// 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  S708C6_nt  {
  int s708c6f0[2];
  void  mf708c6(); // _ZN9S708C6_nt7mf708c6Ev
};
//SIG(-1 S708C6_nt) C1{ m Fi[2]}


void  S708C6_nt ::mf708c6(){}

//skip512 S708C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C5_nt  {
  int s708c5f0;
  __tsi64 s708c5f1;
  void *s708c5f2[4];
  int s708c5f3[2];
  void *s708c5f4;
  ::S708C6_nt s708c5f5;
  void *s708c5f6[2];
  virtual  ~S708C5_nt(); // _ZN9S708C5_ntD1Ev
  virtual void  v9(); // _ZN9S708C5_nt2v9Ev
  virtual void  v10(); // _ZN9S708C5_nt3v10Ev
  virtual void  v11(); // _ZN9S708C5_nt3v11Ev
  virtual void  v12(); // _ZN9S708C5_nt3v12Ev
  virtual void  v13(); // _ZN9S708C5_nt3v13Ev
  virtual void  v14(); // _ZN9S708C5_nt3v14Ev
  virtual void  v15(); // _ZN9S708C5_nt3v15Ev
  virtual void  v16(); // _ZN9S708C5_nt3v16Ev
  virtual void  v17(); // _ZN9S708C5_nt3v17Ev
  virtual void  v18(); // _ZN9S708C5_nt3v18Ev
  virtual void  v19(); // _ZN9S708C5_nt3v19Ev
  virtual void  v20(); // _ZN9S708C5_nt3v20Ev
  virtual void  v21(); // _ZN9S708C5_nt3v21Ev
  virtual void  v22(); // _ZN9S708C5_nt3v22Ev
  virtual void  v23(); // _ZN9S708C5_nt3v23Ev
  virtual void  v24(); // _ZN9S708C5_nt3v24Ev
  virtual void  v25(); // _ZN9S708C5_nt3v25Ev
  virtual void  v26(); // _ZN9S708C5_nt3v26Ev
  virtual void  v27(); // _ZN9S708C5_nt3v27Ev
  virtual void  v28(); // _ZN9S708C5_nt3v28Ev
  virtual void  v29(); // _ZN9S708C5_nt3v29Ev
  virtual void  v30(); // _ZN9S708C5_nt3v30Ev
  virtual void  v31(); // _ZN9S708C5_nt3v31Ev
  virtual void  v32(); // _ZN9S708C5_nt3v32Ev
  virtual void  v33(); // _ZN9S708C5_nt3v33Ev
  virtual void  v34(); // _ZN9S708C5_nt3v34Ev
  virtual void  v35(); // _ZN9S708C5_nt3v35Ev
  virtual void  v36(); // _ZN9S708C5_nt3v36Ev
  virtual void  v37(); // _ZN9S708C5_nt3v37Ev
  virtual void  v38(); // _ZN9S708C5_nt3v38Ev
  virtual void  v39(); // _ZN9S708C5_nt3v39Ev
  virtual void  v40(); // _ZN9S708C5_nt3v40Ev
  virtual void  v41(); // _ZN9S708C5_nt3v41Ev
  virtual void  v42(); // _ZN9S708C5_nt3v42Ev
  virtual void  v43(); // _ZN9S708C5_nt3v43Ev
  virtual void  v44(); // _ZN9S708C5_nt3v44Ev
  virtual void  v45(); // _ZN9S708C5_nt3v45Ev
  virtual void  v46(); // _ZN9S708C5_nt3v46Ev
  virtual void  v47(); // _ZN9S708C5_nt3v47Ev
  virtual void  v48(); // _ZN9S708C5_nt3v48Ev
  virtual void  v49(); // _ZN9S708C5_nt3v49Ev
  virtual void  v50(); // _ZN9S708C5_nt3v50Ev
  virtual void  v51(); // _ZN9S708C5_nt3v51Ev
  virtual void  v52(); // _ZN9S708C5_nt3v52Ev
  virtual void  v53(); // _ZN9S708C5_nt3v53Ev
  virtual void  v54(); // _ZN9S708C5_nt3v54Ev
  virtual void  v55(); // _ZN9S708C5_nt3v55Ev
  virtual void  v56(); // _ZN9S708C5_nt3v56Ev
  virtual void  v57(); // _ZN9S708C5_nt3v57Ev
  virtual void  v58(); // _ZN9S708C5_nt3v58Ev
  virtual void  v59(); // _ZN9S708C5_nt3v59Ev
  virtual void  v60(); // _ZN9S708C5_nt3v60Ev
  virtual void  v61(); // _ZN9S708C5_nt3v61Ev
  virtual void  v62(); // _ZN9S708C5_nt3v62Ev
  virtual void  v63(); // _ZN9S708C5_nt3v63Ev
  virtual void  v64(); // _ZN9S708C5_nt3v64Ev
  virtual void  v65(); // _ZN9S708C5_nt3v65Ev
  virtual void  v66(); // _ZN9S708C5_nt3v66Ev
  virtual void  v67(); // _ZN9S708C5_nt3v67Ev
  virtual void  v68(); // _ZN9S708C5_nt3v68Ev
  virtual void  v69(); // _ZN9S708C5_nt3v69Ev
  virtual void  v70(); // _ZN9S708C5_nt3v70Ev
  virtual void  v71(); // _ZN9S708C5_nt3v71Ev
  virtual void  v72(); // _ZN9S708C5_nt3v72Ev
  S708C5_nt(); // tgen
};
//SIG(-1 S708C5_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]}


 S708C5_nt ::~S708C5_nt(){ note_dtor("S708C5_nt", this);}
void  S708C5_nt ::v9(){vfunc_called(this, "_ZN9S708C5_nt2v9Ev");}
void  S708C5_nt ::v10(){vfunc_called(this, "_ZN9S708C5_nt3v10Ev");}
void  S708C5_nt ::v11(){vfunc_called(this, "_ZN9S708C5_nt3v11Ev");}
void  S708C5_nt ::v12(){vfunc_called(this, "_ZN9S708C5_nt3v12Ev");}
void  S708C5_nt ::v13(){vfunc_called(this, "_ZN9S708C5_nt3v13Ev");}
void  S708C5_nt ::v14(){vfunc_called(this, "_ZN9S708C5_nt3v14Ev");}
void  S708C5_nt ::v15(){vfunc_called(this, "_ZN9S708C5_nt3v15Ev");}
void  S708C5_nt ::v16(){vfunc_called(this, "_ZN9S708C5_nt3v16Ev");}
void  S708C5_nt ::v17(){vfunc_called(this, "_ZN9S708C5_nt3v17Ev");}
void  S708C5_nt ::v18(){vfunc_called(this, "_ZN9S708C5_nt3v18Ev");}
void  S708C5_nt ::v19(){vfunc_called(this, "_ZN9S708C5_nt3v19Ev");}
void  S708C5_nt ::v20(){vfunc_called(this, "_ZN9S708C5_nt3v20Ev");}
void  S708C5_nt ::v21(){vfunc_called(this, "_ZN9S708C5_nt3v21Ev");}
void  S708C5_nt ::v22(){vfunc_called(this, "_ZN9S708C5_nt3v22Ev");}
void  S708C5_nt ::v23(){vfunc_called(this, "_ZN9S708C5_nt3v23Ev");}
void  S708C5_nt ::v24(){vfunc_called(this, "_ZN9S708C5_nt3v24Ev");}
void  S708C5_nt ::v25(){vfunc_called(this, "_ZN9S708C5_nt3v25Ev");}
void  S708C5_nt ::v26(){vfunc_called(this, "_ZN9S708C5_nt3v26Ev");}
void  S708C5_nt ::v27(){vfunc_called(this, "_ZN9S708C5_nt3v27Ev");}
void  S708C5_nt ::v28(){vfunc_called(this, "_ZN9S708C5_nt3v28Ev");}
void  S708C5_nt ::v29(){vfunc_called(this, "_ZN9S708C5_nt3v29Ev");}
void  S708C5_nt ::v30(){vfunc_called(this, "_ZN9S708C5_nt3v30Ev");}
void  S708C5_nt ::v31(){vfunc_called(this, "_ZN9S708C5_nt3v31Ev");}
void  S708C5_nt ::v32(){vfunc_called(this, "_ZN9S708C5_nt3v32Ev");}
void  S708C5_nt ::v33(){vfunc_called(this, "_ZN9S708C5_nt3v33Ev");}
void  S708C5_nt ::v34(){vfunc_called(this, "_ZN9S708C5_nt3v34Ev");}
void  S708C5_nt ::v35(){vfunc_called(this, "_ZN9S708C5_nt3v35Ev");}
void  S708C5_nt ::v36(){vfunc_called(this, "_ZN9S708C5_nt3v36Ev");}
void  S708C5_nt ::v37(){vfunc_called(this, "_ZN9S708C5_nt3v37Ev");}
void  S708C5_nt ::v38(){vfunc_called(this, "_ZN9S708C5_nt3v38Ev");}
void  S708C5_nt ::v39(){vfunc_called(this, "_ZN9S708C5_nt3v39Ev");}
void  S708C5_nt ::v40(){vfunc_called(this, "_ZN9S708C5_nt3v40Ev");}
void  S708C5_nt ::v41(){vfunc_called(this, "_ZN9S708C5_nt3v41Ev");}
void  S708C5_nt ::v42(){vfunc_called(this, "_ZN9S708C5_nt3v42Ev");}
void  S708C5_nt ::v43(){vfunc_called(this, "_ZN9S708C5_nt3v43Ev");}
void  S708C5_nt ::v44(){vfunc_called(this, "_ZN9S708C5_nt3v44Ev");}
void  S708C5_nt ::v45(){vfunc_called(this, "_ZN9S708C5_nt3v45Ev");}
void  S708C5_nt ::v46(){vfunc_called(this, "_ZN9S708C5_nt3v46Ev");}
void  S708C5_nt ::v47(){vfunc_called(this, "_ZN9S708C5_nt3v47Ev");}
void  S708C5_nt ::v48(){vfunc_called(this, "_ZN9S708C5_nt3v48Ev");}
void  S708C5_nt ::v49(){vfunc_called(this, "_ZN9S708C5_nt3v49Ev");}
void  S708C5_nt ::v50(){vfunc_called(this, "_ZN9S708C5_nt3v50Ev");}
void  S708C5_nt ::v51(){vfunc_called(this, "_ZN9S708C5_nt3v51Ev");}
void  S708C5_nt ::v52(){vfunc_called(this, "_ZN9S708C5_nt3v52Ev");}
void  S708C5_nt ::v53(){vfunc_called(this, "_ZN9S708C5_nt3v53Ev");}
void  S708C5_nt ::v54(){vfunc_called(this, "_ZN9S708C5_nt3v54Ev");}
void  S708C5_nt ::v55(){vfunc_called(this, "_ZN9S708C5_nt3v55Ev");}
void  S708C5_nt ::v56(){vfunc_called(this, "_ZN9S708C5_nt3v56Ev");}
void  S708C5_nt ::v57(){vfunc_called(this, "_ZN9S708C5_nt3v57Ev");}
void  S708C5_nt ::v58(){vfunc_called(this, "_ZN9S708C5_nt3v58Ev");}
void  S708C5_nt ::v59(){vfunc_called(this, "_ZN9S708C5_nt3v59Ev");}
void  S708C5_nt ::v60(){vfunc_called(this, "_ZN9S708C5_nt3v60Ev");}
void  S708C5_nt ::v61(){vfunc_called(this, "_ZN9S708C5_nt3v61Ev");}
void  S708C5_nt ::v62(){vfunc_called(this, "_ZN9S708C5_nt3v62Ev");}
void  S708C5_nt ::v63(){vfunc_called(this, "_ZN9S708C5_nt3v63Ev");}
void  S708C5_nt ::v64(){vfunc_called(this, "_ZN9S708C5_nt3v64Ev");}
void  S708C5_nt ::v65(){vfunc_called(this, "_ZN9S708C5_nt3v65Ev");}
void  S708C5_nt ::v66(){vfunc_called(this, "_ZN9S708C5_nt3v66Ev");}
void  S708C5_nt ::v67(){vfunc_called(this, "_ZN9S708C5_nt3v67Ev");}
void  S708C5_nt ::v68(){vfunc_called(this, "_ZN9S708C5_nt3v68Ev");}
void  S708C5_nt ::v69(){vfunc_called(this, "_ZN9S708C5_nt3v69Ev");}
void  S708C5_nt ::v70(){vfunc_called(this, "_ZN9S708C5_nt3v70Ev");}
void  S708C5_nt ::v71(){vfunc_called(this, "_ZN9S708C5_nt3v71Ev");}
void  S708C5_nt ::v72(){vfunc_called(this, "_ZN9S708C5_nt3v72Ev");}
S708C5_nt ::S708C5_nt(){ note_ctor("S708C5_nt", this);} // tgen

//skip512 S708C5_nt

#else // __cplusplus

extern void _ZN9S708C5_ntC1Ev();
extern void _ZN9S708C5_ntD1Ev();
Name_Map name_map_S708C5_nt[] = {
  NSPAIR(_ZN9S708C5_ntC1Ev),
  NSPAIR(_ZN9S708C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S708C5_nt[];
extern void _ZN9S708C5_ntD1Ev();
extern void _ZN9S708C5_ntD0Ev();
extern void _ZN9S708C5_nt2v9Ev();
extern void _ZN9S708C5_nt3v10Ev();
extern void _ZN9S708C5_nt3v11Ev();
extern void _ZN9S708C5_nt3v12Ev();
extern void _ZN9S708C5_nt3v13Ev();
extern void _ZN9S708C5_nt3v14Ev();
extern void _ZN9S708C5_nt3v15Ev();
extern void _ZN9S708C5_nt3v16Ev();
extern void _ZN9S708C5_nt3v17Ev();
extern void _ZN9S708C5_nt3v18Ev();
extern void _ZN9S708C5_nt3v19Ev();
extern void _ZN9S708C5_nt3v20Ev();
extern void _ZN9S708C5_nt3v21Ev();
extern void _ZN9S708C5_nt3v22Ev();
extern void _ZN9S708C5_nt3v23Ev();
extern void _ZN9S708C5_nt3v24Ev();
extern void _ZN9S708C5_nt3v25Ev();
extern void _ZN9S708C5_nt3v26Ev();
extern void _ZN9S708C5_nt3v27Ev();
extern void _ZN9S708C5_nt3v28Ev();
extern void _ZN9S708C5_nt3v29Ev();
extern void _ZN9S708C5_nt3v30Ev();
extern void _ZN9S708C5_nt3v31Ev();
extern void _ZN9S708C5_nt3v32Ev();
extern void _ZN9S708C5_nt3v33Ev();
extern void _ZN9S708C5_nt3v34Ev();
extern void _ZN9S708C5_nt3v35Ev();
extern void _ZN9S708C5_nt3v36Ev();
extern void _ZN9S708C5_nt3v37Ev();
extern void _ZN9S708C5_nt3v38Ev();
extern void _ZN9S708C5_nt3v39Ev();
extern void _ZN9S708C5_nt3v40Ev();
extern void _ZN9S708C5_nt3v41Ev();
extern void _ZN9S708C5_nt3v42Ev();
extern void _ZN9S708C5_nt3v43Ev();
extern void _ZN9S708C5_nt3v44Ev();
extern void _ZN9S708C5_nt3v45Ev();
extern void _ZN9S708C5_nt3v46Ev();
extern void _ZN9S708C5_nt3v47Ev();
extern void _ZN9S708C5_nt3v48Ev();
extern void _ZN9S708C5_nt3v49Ev();
extern void _ZN9S708C5_nt3v50Ev();
extern void _ZN9S708C5_nt3v51Ev();
extern void _ZN9S708C5_nt3v52Ev();
extern void _ZN9S708C5_nt3v53Ev();
extern void _ZN9S708C5_nt3v54Ev();
extern void _ZN9S708C5_nt3v55Ev();
extern void _ZN9S708C5_nt3v56Ev();
extern void _ZN9S708C5_nt3v57Ev();
extern void _ZN9S708C5_nt3v58Ev();
extern void _ZN9S708C5_nt3v59Ev();
extern void _ZN9S708C5_nt3v60Ev();
extern void _ZN9S708C5_nt3v61Ev();
extern void _ZN9S708C5_nt3v62Ev();
extern void _ZN9S708C5_nt3v63Ev();
extern void _ZN9S708C5_nt3v64Ev();
extern void _ZN9S708C5_nt3v65Ev();
extern void _ZN9S708C5_nt3v66Ev();
extern void _ZN9S708C5_nt3v67Ev();
extern void _ZN9S708C5_nt3v68Ev();
extern void _ZN9S708C5_nt3v69Ev();
extern void _ZN9S708C5_nt3v70Ev();
extern void _ZN9S708C5_nt3v71Ev();
extern void _ZN9S708C5_nt3v72Ev();
static  VTBL_ENTRY vtc_S708C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S708C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S708C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S708C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v72Ev,
};
extern VTBL_ENTRY _ZTI9S708C5_nt[];
VTBL_ENTRY *P__ZTI9S708C5_nt = _ZTI9S708C5_nt; 
extern  VTBL_ENTRY _ZTV9S708C5_nt[];
Class_Descriptor cd_S708C5_nt = {  "S708C5_nt", // class name
  0,0,//no base classes
  &(vtc_S708C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S708C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S708C5_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  S708C4_nt  : S708C5_nt {
  virtual  ~S708C4_nt(); // _ZN9S708C4_ntD1Ev
  virtual void  v73(); // _ZN9S708C4_nt3v73Ev
  virtual void  v74(); // _ZN9S708C4_nt3v74Ev
  S708C4_nt(); // tgen
};
//SIG(-1 S708C4_nt) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S708C4_nt ::~S708C4_nt(){ note_dtor("S708C4_nt", this);}
void  S708C4_nt ::v73(){vfunc_called(this, "_ZN9S708C4_nt3v73Ev");}
void  S708C4_nt ::v74(){vfunc_called(this, "_ZN9S708C4_nt3v74Ev");}
S708C4_nt ::S708C4_nt(){ note_ctor("S708C4_nt", this);} // tgen

//skip512 S708C4_nt

#else // __cplusplus

extern void _ZN9S708C4_ntC1Ev();
extern void _ZN9S708C4_ntD1Ev();
Name_Map name_map_S708C4_nt[] = {
  NSPAIR(_ZN9S708C4_ntC1Ev),
  NSPAIR(_ZN9S708C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S708C5_nt;
extern VTBL_ENTRY _ZTI9S708C5_nt[];
extern  VTBL_ENTRY _ZTV9S708C5_nt[];
static Base_Class bases_S708C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S708C4_nt[];
extern void _ZN9S708C4_ntD1Ev();
extern void _ZN9S708C4_ntD0Ev();
extern void _ZN9S708C5_nt2v9Ev();
extern void _ZN9S708C5_nt3v10Ev();
extern void _ZN9S708C5_nt3v11Ev();
extern void _ZN9S708C5_nt3v12Ev();
extern void _ZN9S708C5_nt3v13Ev();
extern void _ZN9S708C5_nt3v14Ev();
extern void _ZN9S708C5_nt3v15Ev();
extern void _ZN9S708C5_nt3v16Ev();
extern void _ZN9S708C5_nt3v17Ev();
extern void _ZN9S708C5_nt3v18Ev();
extern void _ZN9S708C5_nt3v19Ev();
extern void _ZN9S708C5_nt3v20Ev();
extern void _ZN9S708C5_nt3v21Ev();
extern void _ZN9S708C5_nt3v22Ev();
extern void _ZN9S708C5_nt3v23Ev();
extern void _ZN9S708C5_nt3v24Ev();
extern void _ZN9S708C5_nt3v25Ev();
extern void _ZN9S708C5_nt3v26Ev();
extern void _ZN9S708C5_nt3v27Ev();
extern void _ZN9S708C5_nt3v28Ev();
extern void _ZN9S708C5_nt3v29Ev();
extern void _ZN9S708C5_nt3v30Ev();
extern void _ZN9S708C5_nt3v31Ev();
extern void _ZN9S708C5_nt3v32Ev();
extern void _ZN9S708C5_nt3v33Ev();
extern void _ZN9S708C5_nt3v34Ev();
extern void _ZN9S708C5_nt3v35Ev();
extern void _ZN9S708C5_nt3v36Ev();
extern void _ZN9S708C5_nt3v37Ev();
extern void _ZN9S708C5_nt3v38Ev();
extern void _ZN9S708C5_nt3v39Ev();
extern void _ZN9S708C5_nt3v40Ev();
extern void _ZN9S708C5_nt3v41Ev();
extern void _ZN9S708C5_nt3v42Ev();
extern void _ZN9S708C5_nt3v43Ev();
extern void _ZN9S708C5_nt3v44Ev();
extern void _ZN9S708C5_nt3v45Ev();
extern void _ZN9S708C5_nt3v46Ev();
extern void _ZN9S708C5_nt3v47Ev();
extern void _ZN9S708C5_nt3v48Ev();
extern void _ZN9S708C5_nt3v49Ev();
extern void _ZN9S708C5_nt3v50Ev();
extern void _ZN9S708C5_nt3v51Ev();
extern void _ZN9S708C5_nt3v52Ev();
extern void _ZN9S708C5_nt3v53Ev();
extern void _ZN9S708C5_nt3v54Ev();
extern void _ZN9S708C5_nt3v55Ev();
extern void _ZN9S708C5_nt3v56Ev();
extern void _ZN9S708C5_nt3v57Ev();
extern void _ZN9S708C5_nt3v58Ev();
extern void _ZN9S708C5_nt3v59Ev();
extern void _ZN9S708C5_nt3v60Ev();
extern void _ZN9S708C5_nt3v61Ev();
extern void _ZN9S708C5_nt3v62Ev();
extern void _ZN9S708C5_nt3v63Ev();
extern void _ZN9S708C5_nt3v64Ev();
extern void _ZN9S708C5_nt3v65Ev();
extern void _ZN9S708C5_nt3v66Ev();
extern void _ZN9S708C5_nt3v67Ev();
extern void _ZN9S708C5_nt3v68Ev();
extern void _ZN9S708C5_nt3v69Ev();
extern void _ZN9S708C5_nt3v70Ev();
extern void _ZN9S708C5_nt3v71Ev();
extern void _ZN9S708C5_nt3v72Ev();
extern void _ZN9S708C4_nt3v73Ev();
extern void _ZN9S708C4_nt3v74Ev();
static  VTBL_ENTRY vtc_S708C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S708C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S708C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S708C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S708C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S708C4_nt3v74Ev,
};
extern VTBL_ENTRY _ZTI9S708C4_nt[];
VTBL_ENTRY *P__ZTI9S708C4_nt = _ZTI9S708C4_nt; 
extern  VTBL_ENTRY _ZTV9S708C4_nt[];
Class_Descriptor cd_S708C4_nt = {  "S708C4_nt", // class name
  bases_S708C4_nt, 1,
  &(vtc_S708C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S708C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S708C4_nt),70, //virtual function table var
  2, // 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  S708C7_nt  {
  int s708c7f0[4];
  char s708c7f1[9];
  void  mf708c7(); // _ZN9S708C7_nt7mf708c7Ev
};
//SIG(-1 S708C7_nt) C1{ m Fi[4] Fc[9]}


void  S708C7_nt ::mf708c7(){}

//skip512 S708C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C10_nt  {
  void *s708c10f0;
  int s708c10f1[2];
  void  mf708c10(); // _ZN10S708C10_nt8mf708c10Ev
};
//SIG(-1 S708C10_nt) C1{ m Fp Fi[2]}


void  S708C10_nt ::mf708c10(){}

//skip512 S708C10_nt

#else // __cplusplus

Class_Descriptor cd_S708C10_nt = {  "S708C10_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  S708C9_nt  : S708C10_nt {
};
//SIG(-1 S708C9_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S708C9_nt

#else // __cplusplus

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



//skip512 S708C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S708C10_nt;
extern Class_Descriptor cd_S708C9_nt;
static Base_Class bases_S708C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S708C14  : S708C10_nt {
};
//SIG(-1 S708C14) C1{ BC2{ m Fp Fi[2]}}



static void Test_S708C14()
{
  extern Class_Descriptor cd_S708C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C14, buf);
    S708C14 &lv = *(new (buf) S708C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C14)");
    check_base_class_offset(lv, (S708C10_nt*), 0, "S708C14");
    test_class_info(&lv, &cd_S708C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C14(Test_S708C14, "S708C14", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S708C13()
{
  extern Class_Descriptor cd_S708C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C13, buf);
    S708C13 &lv = *(new (buf) S708C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C13)");
    check_base_class_offset(lv, (S708C10_nt*)(S708C14*), 0, "S708C13");
    check_base_class_offset(lv, (S708C14*), 0, "S708C13");
    test_class_info(&lv, &cd_S708C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C13(Test_S708C13, "S708C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S708C10_nt;
extern Class_Descriptor cd_S708C14;
static Base_Class bases_S708C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S708C13 = {  "S708C13", // class name
  bases_S708C13, 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  S708C18  : S708C10_nt {
};
//SIG(-1 S708C18) C1{ BC2{ m Fp Fi[2]}}



static void Test_S708C18()
{
  extern Class_Descriptor cd_S708C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C18, buf);
    S708C18 &lv = *(new (buf) S708C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C18)");
    check_base_class_offset(lv, (S708C10_nt*), 0, "S708C18");
    test_class_info(&lv, &cd_S708C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C18(Test_S708C18, "S708C18", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S708C17()
{
  extern Class_Descriptor cd_S708C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C17, buf);
    S708C17 &lv = *(new (buf) S708C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C17)");
    check_base_class_offset(lv, (S708C10_nt*)(S708C18*), 0, "S708C17");
    check_base_class_offset(lv, (S708C18*), 0, "S708C17");
    test_class_info(&lv, &cd_S708C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C17(Test_S708C17, "S708C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S708C10_nt;
extern Class_Descriptor cd_S708C18;
static Base_Class bases_S708C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S708C17 = {  "S708C17", // class name
  bases_S708C17, 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  S708C19_nt  {
  void *s708c19f0;
  ::S708C6_nt s708c19f1;
  void  mf708c19(); // _ZN10S708C19_nt8mf708c19Ev
};
//SIG(-1 S708C19_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S708C19_nt ::mf708c19(){}

//skip512 S708C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C3_nt  : S708C4_nt {
  ::S708C7_nt s708c3f0;
  int s708c3f1;
  unsigned int s708c3f2:1;
  unsigned int s708c3f3:1;
  unsigned int s708c3f4:1;
  unsigned int s708c3f5:1;
  ::S708C8_nt s708c3f6;
  ::S708C8_nt s708c3f7;
  void *s708c3f8;
  ::S708C13 s708c3f9;
  ::S708C13 s708c3f10;
  ::S708C13 s708c3f11;
  ::S708C17 s708c3f12;
  char s708c3f13;
  int s708c3f14;
  void *s708c3f15;
  ::S708C6_nt s708c3f16;
  ::S708C6_nt s708c3f17;
  ::S708C6_nt s708c3f18;
  ::S708C6_nt s708c3f19;
  ::S708C6_nt s708c3f20;
  ::S708C6_nt s708c3f21;
  ::S708C19_nt s708c3f22;
  ::S708C19_nt s708c3f23;
  ::S708C19_nt s708c3f24;
  ::S708C19_nt s708c3f25;
  ::S708C19_nt s708c3f26;
  ::S708C19_nt s708c3f27;
  ::S708C19_nt s708c3f28;
  ::S708C19_nt s708c3f29;
  ::S708C19_nt s708c3f30;
  ::S708C19_nt s708c3f31;
  virtual  ~S708C3_nt(); // _ZN9S708C3_ntD1Ev
  virtual void  v75(); // _ZN9S708C3_nt3v75Ev
  virtual void  v76(); // _ZN9S708C3_nt3v76Ev
  virtual void  v77(); // _ZN9S708C3_nt3v77Ev
  virtual void  v78(); // _ZN9S708C3_nt3v78Ev
  virtual void  v79(); // _ZN9S708C3_nt3v79Ev
  virtual void  v80(); // _ZN9S708C3_nt3v80Ev
  virtual void  v81(); // _ZN9S708C3_nt3v81Ev
  virtual void  v82(); // _ZN9S708C3_nt3v82Ev
  virtual void  v83(); // _ZN9S708C3_nt3v83Ev
  virtual void  v84(); // _ZN9S708C3_nt3v84Ev
  virtual void  v85(); // _ZN9S708C3_nt3v85Ev
  virtual void  v86(); // _ZN9S708C3_nt3v86Ev
  virtual void  v87(); // _ZN9S708C3_nt3v87Ev
  virtual void  v88(); // _ZN9S708C3_nt3v88Ev
  virtual void  v89(); // _ZN9S708C3_nt3v89Ev
  virtual void  v90(); // _ZN9S708C3_nt3v90Ev
  virtual void  v91(); // _ZN9S708C3_nt3v91Ev
  virtual void  v92(); // _ZN9S708C3_nt3v92Ev
  virtual void  v93(); // _ZN9S708C3_nt3v93Ev
  virtual void  v94(); // _ZN9S708C3_nt3v94Ev
  virtual void  v95(); // _ZN9S708C3_nt3v95Ev
  virtual void  v96(); // _ZN9S708C3_nt3v96Ev
  virtual void  v97(); // _ZN9S708C3_nt3v97Ev
  virtual void  v98(); // _ZN9S708C3_nt3v98Ev
  virtual void  v99(); // _ZN9S708C3_nt3v99Ev
  virtual void  v100(); // _ZN9S708C3_nt4v100Ev
  virtual void  v101(); // _ZN9S708C3_nt4v101Ev
  virtual void  v102(); // _ZN9S708C3_nt4v102Ev
  virtual void  v103(); // _ZN9S708C3_nt4v103Ev
  virtual void  v104(); // _ZN9S708C3_nt4v104Ev
  virtual void  v105(); // _ZN9S708C3_nt4v105Ev
  virtual void  v106(); // _ZN9S708C3_nt4v106Ev
  virtual void  v107(); // _ZN9S708C3_nt4v107Ev
  virtual void  v108(); // _ZN9S708C3_nt4v108Ev
  virtual void  v109(); // _ZN9S708C3_nt4v109Ev
  virtual void  v110(); // _ZN9S708C3_nt4v110Ev
  virtual void  v111(); // _ZN9S708C3_nt4v111Ev
  virtual void  v112(); // _ZN9S708C3_nt4v112Ev
  virtual void  v113(); // _ZN9S708C3_nt4v113Ev
  virtual void  v114(); // _ZN9S708C3_nt4v114Ev
  virtual void  v115(); // _ZN9S708C3_nt4v115Ev
  virtual void  v116(); // _ZN9S708C3_nt4v116Ev
  virtual void  v117(); // _ZN9S708C3_nt4v117Ev
  virtual void  v118(); // _ZN9S708C3_nt4v118Ev
  virtual void  v119(); // _ZN9S708C3_nt4v119Ev
  virtual void  v120(); // _ZN9S708C3_nt4v120Ev
  virtual void  v121(); // _ZN9S708C3_nt4v121Ev
  virtual void  v122(); // _ZN9S708C3_nt4v122Ev
  virtual void  v123(); // _ZN9S708C3_nt4v123Ev
  virtual void  v124(); // _ZN9S708C3_nt4v124Ev
  virtual void  v125(); // _ZN9S708C3_nt4v125Ev
  virtual void  v126(); // _ZN9S708C3_nt4v126Ev
  virtual void  v127(); // _ZN9S708C3_nt4v127Ev
  virtual void  v128(); // _ZN9S708C3_nt4v128Ev
  virtual void  v129(); // _ZN9S708C3_nt4v129Ev
  virtual void  v130(); // _ZN9S708C3_nt4v130Ev
  virtual void  v131(); // _ZN9S708C3_nt4v131Ev
  virtual void  v132(); // _ZN9S708C3_nt4v132Ev
  virtual void  v133(); // _ZN9S708C3_nt4v133Ev
  virtual void  v134(); // _ZN9S708C3_nt4v134Ev
  virtual void  v135(); // _ZN9S708C3_nt4v135Ev
  virtual void  v136(); // _ZN9S708C3_nt4v136Ev
  virtual void  v137(); // _ZN9S708C3_nt4v137Ev
  virtual void  v138(); // _ZN9S708C3_nt4v138Ev
  virtual void  v139(); // _ZN9S708C3_nt4v139Ev
  virtual void  v140(); // _ZN9S708C3_nt4v140Ev
  virtual void  v141(); // _ZN9S708C3_nt4v141Ev
  virtual void  v142(); // _ZN9S708C3_nt4v142Ev
  virtual void  v143(); // _ZN9S708C3_nt4v143Ev
  virtual void  v144(); // _ZN9S708C3_nt4v144Ev
  virtual void  v145(); // _ZN9S708C3_nt4v145Ev
  virtual void  v146(); // _ZN9S708C3_nt4v146Ev
  virtual void  v147(); // _ZN9S708C3_nt4v147Ev
  virtual void  v148(); // _ZN9S708C3_nt4v148Ev
  virtual void  v149(); // _ZN9S708C3_nt4v149Ev
  virtual void  v150(); // _ZN9S708C3_nt4v150Ev
  S708C3_nt(); // tgen
};
//SIG(-1 S708C3_nt) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v141 v142} 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 FC5{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 Fp FC9{ BC10{ BC8}} FC9 FC9 FC11{ BC12{ BC8}} Fc Fi Fp FC4 FC4 FC4 FC4 FC4 FC4 FC13{ m Fp FC4} FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13}


 S708C3_nt ::~S708C3_nt(){ note_dtor("S708C3_nt", this);}
void  S708C3_nt ::v75(){vfunc_called(this, "_ZN9S708C3_nt3v75Ev");}
void  S708C3_nt ::v76(){vfunc_called(this, "_ZN9S708C3_nt3v76Ev");}
void  S708C3_nt ::v77(){vfunc_called(this, "_ZN9S708C3_nt3v77Ev");}
void  S708C3_nt ::v78(){vfunc_called(this, "_ZN9S708C3_nt3v78Ev");}
void  S708C3_nt ::v79(){vfunc_called(this, "_ZN9S708C3_nt3v79Ev");}
void  S708C3_nt ::v80(){vfunc_called(this, "_ZN9S708C3_nt3v80Ev");}
void  S708C3_nt ::v81(){vfunc_called(this, "_ZN9S708C3_nt3v81Ev");}
void  S708C3_nt ::v82(){vfunc_called(this, "_ZN9S708C3_nt3v82Ev");}
void  S708C3_nt ::v83(){vfunc_called(this, "_ZN9S708C3_nt3v83Ev");}
void  S708C3_nt ::v84(){vfunc_called(this, "_ZN9S708C3_nt3v84Ev");}
void  S708C3_nt ::v85(){vfunc_called(this, "_ZN9S708C3_nt3v85Ev");}
void  S708C3_nt ::v86(){vfunc_called(this, "_ZN9S708C3_nt3v86Ev");}
void  S708C3_nt ::v87(){vfunc_called(this, "_ZN9S708C3_nt3v87Ev");}
void  S708C3_nt ::v88(){vfunc_called(this, "_ZN9S708C3_nt3v88Ev");}
void  S708C3_nt ::v89(){vfunc_called(this, "_ZN9S708C3_nt3v89Ev");}
void  S708C3_nt ::v90(){vfunc_called(this, "_ZN9S708C3_nt3v90Ev");}
void  S708C3_nt ::v91(){vfunc_called(this, "_ZN9S708C3_nt3v91Ev");}
void  S708C3_nt ::v92(){vfunc_called(this, "_ZN9S708C3_nt3v92Ev");}
void  S708C3_nt ::v93(){vfunc_called(this, "_ZN9S708C3_nt3v93Ev");}
void  S708C3_nt ::v94(){vfunc_called(this, "_ZN9S708C3_nt3v94Ev");}
void  S708C3_nt ::v95(){vfunc_called(this, "_ZN9S708C3_nt3v95Ev");}
void  S708C3_nt ::v96(){vfunc_called(this, "_ZN9S708C3_nt3v96Ev");}
void  S708C3_nt ::v97(){vfunc_called(this, "_ZN9S708C3_nt3v97Ev");}
void  S708C3_nt ::v98(){vfunc_called(this, "_ZN9S708C3_nt3v98Ev");}
void  S708C3_nt ::v99(){vfunc_called(this, "_ZN9S708C3_nt3v99Ev");}
void  S708C3_nt ::v100(){vfunc_called(this, "_ZN9S708C3_nt4v100Ev");}
void  S708C3_nt ::v101(){vfunc_called(this, "_ZN9S708C3_nt4v101Ev");}
void  S708C3_nt ::v102(){vfunc_called(this, "_ZN9S708C3_nt4v102Ev");}
void  S708C3_nt ::v103(){vfunc_called(this, "_ZN9S708C3_nt4v103Ev");}
void  S708C3_nt ::v104(){vfunc_called(this, "_ZN9S708C3_nt4v104Ev");}
void  S708C3_nt ::v105(){vfunc_called(this, "_ZN9S708C3_nt4v105Ev");}
void  S708C3_nt ::v106(){vfunc_called(this, "_ZN9S708C3_nt4v106Ev");}
void  S708C3_nt ::v107(){vfunc_called(this, "_ZN9S708C3_nt4v107Ev");}
void  S708C3_nt ::v108(){vfunc_called(this, "_ZN9S708C3_nt4v108Ev");}
void  S708C3_nt ::v109(){vfunc_called(this, "_ZN9S708C3_nt4v109Ev");}
void  S708C3_nt ::v110(){vfunc_called(this, "_ZN9S708C3_nt4v110Ev");}
void  S708C3_nt ::v111(){vfunc_called(this, "_ZN9S708C3_nt4v111Ev");}
void  S708C3_nt ::v112(){vfunc_called(this, "_ZN9S708C3_nt4v112Ev");}
void  S708C3_nt ::v113(){vfunc_called(this, "_ZN9S708C3_nt4v113Ev");}
void  S708C3_nt ::v114(){vfunc_called(this, "_ZN9S708C3_nt4v114Ev");}
void  S708C3_nt ::v115(){vfunc_called(this, "_ZN9S708C3_nt4v115Ev");}
void  S708C3_nt ::v116(){vfunc_called(this, "_ZN9S708C3_nt4v116Ev");}
void  S708C3_nt ::v117(){vfunc_called(this, "_ZN9S708C3_nt4v117Ev");}
void  S708C3_nt ::v118(){vfunc_called(this, "_ZN9S708C3_nt4v118Ev");}
void  S708C3_nt ::v119(){vfunc_called(this, "_ZN9S708C3_nt4v119Ev");}
void  S708C3_nt ::v120(){vfunc_called(this, "_ZN9S708C3_nt4v120Ev");}
void  S708C3_nt ::v121(){vfunc_called(this, "_ZN9S708C3_nt4v121Ev");}
void  S708C3_nt ::v122(){vfunc_called(this, "_ZN9S708C3_nt4v122Ev");}
void  S708C3_nt ::v123(){vfunc_called(this, "_ZN9S708C3_nt4v123Ev");}
void  S708C3_nt ::v124(){vfunc_called(this, "_ZN9S708C3_nt4v124Ev");}
void  S708C3_nt ::v125(){vfunc_called(this, "_ZN9S708C3_nt4v125Ev");}
void  S708C3_nt ::v126(){vfunc_called(this, "_ZN9S708C3_nt4v126Ev");}
void  S708C3_nt ::v127(){vfunc_called(this, "_ZN9S708C3_nt4v127Ev");}
void  S708C3_nt ::v128(){vfunc_called(this, "_ZN9S708C3_nt4v128Ev");}
void  S708C3_nt ::v129(){vfunc_called(this, "_ZN9S708C3_nt4v129Ev");}
void  S708C3_nt ::v130(){vfunc_called(this, "_ZN9S708C3_nt4v130Ev");}
void  S708C3_nt ::v131(){vfunc_called(this, "_ZN9S708C3_nt4v131Ev");}
void  S708C3_nt ::v132(){vfunc_called(this, "_ZN9S708C3_nt4v132Ev");}
void  S708C3_nt ::v133(){vfunc_called(this, "_ZN9S708C3_nt4v133Ev");}
void  S708C3_nt ::v134(){vfunc_called(this, "_ZN9S708C3_nt4v134Ev");}
void  S708C3_nt ::v135(){vfunc_called(this, "_ZN9S708C3_nt4v135Ev");}
void  S708C3_nt ::v136(){vfunc_called(this, "_ZN9S708C3_nt4v136Ev");}
void  S708C3_nt ::v137(){vfunc_called(this, "_ZN9S708C3_nt4v137Ev");}
void  S708C3_nt ::v138(){vfunc_called(this, "_ZN9S708C3_nt4v138Ev");}
void  S708C3_nt ::v139(){vfunc_called(this, "_ZN9S708C3_nt4v139Ev");}
void  S708C3_nt ::v140(){vfunc_called(this, "_ZN9S708C3_nt4v140Ev");}
void  S708C3_nt ::v141(){vfunc_called(this, "_ZN9S708C3_nt4v141Ev");}
void  S708C3_nt ::v142(){vfunc_called(this, "_ZN9S708C3_nt4v142Ev");}
void  S708C3_nt ::v143(){vfunc_called(this, "_ZN9S708C3_nt4v143Ev");}
void  S708C3_nt ::v144(){vfunc_called(this, "_ZN9S708C3_nt4v144Ev");}
void  S708C3_nt ::v145(){vfunc_called(this, "_ZN9S708C3_nt4v145Ev");}
void  S708C3_nt ::v146(){vfunc_called(this, "_ZN9S708C3_nt4v146Ev");}
void  S708C3_nt ::v147(){vfunc_called(this, "_ZN9S708C3_nt4v147Ev");}
void  S708C3_nt ::v148(){vfunc_called(this, "_ZN9S708C3_nt4v148Ev");}
void  S708C3_nt ::v149(){vfunc_called(this, "_ZN9S708C3_nt4v149Ev");}
void  S708C3_nt ::v150(){vfunc_called(this, "_ZN9S708C3_nt4v150Ev");}
S708C3_nt ::S708C3_nt(){ note_ctor("S708C3_nt", this);} // tgen

//skip512 S708C3_nt

#else // __cplusplus

extern void _ZN9S708C3_ntC1Ev();
extern void _ZN9S708C3_ntD1Ev();
Name_Map name_map_S708C3_nt[] = {
  NSPAIR(_ZN9S708C3_ntC1Ev),
  NSPAIR(_ZN9S708C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S708C5_nt;
extern VTBL_ENTRY _ZTI9S708C5_nt[];
extern  VTBL_ENTRY _ZTV9S708C5_nt[];
extern Class_Descriptor cd_S708C4_nt;
extern VTBL_ENTRY _ZTI9S708C4_nt[];
extern  VTBL_ENTRY _ZTV9S708C4_nt[];
static Base_Class bases_S708C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S708C3_nt[];
extern void _ZN9S708C3_ntD1Ev();
extern void _ZN9S708C3_ntD0Ev();
extern void _ZN9S708C5_nt2v9Ev();
extern void _ZN9S708C5_nt3v10Ev();
extern void _ZN9S708C5_nt3v11Ev();
extern void _ZN9S708C5_nt3v12Ev();
extern void _ZN9S708C5_nt3v13Ev();
extern void _ZN9S708C5_nt3v14Ev();
extern void _ZN9S708C5_nt3v15Ev();
extern void _ZN9S708C5_nt3v16Ev();
extern void _ZN9S708C5_nt3v17Ev();
extern void _ZN9S708C5_nt3v18Ev();
extern void _ZN9S708C5_nt3v19Ev();
extern void _ZN9S708C5_nt3v20Ev();
extern void _ZN9S708C5_nt3v21Ev();
extern void _ZN9S708C5_nt3v22Ev();
extern void _ZN9S708C5_nt3v23Ev();
extern void _ZN9S708C5_nt3v24Ev();
extern void _ZN9S708C5_nt3v25Ev();
extern void _ZN9S708C5_nt3v26Ev();
extern void _ZN9S708C5_nt3v27Ev();
extern void _ZN9S708C5_nt3v28Ev();
extern void _ZN9S708C5_nt3v29Ev();
extern void _ZN9S708C5_nt3v30Ev();
extern void _ZN9S708C5_nt3v31Ev();
extern void _ZN9S708C5_nt3v32Ev();
extern void _ZN9S708C5_nt3v33Ev();
extern void _ZN9S708C5_nt3v34Ev();
extern void _ZN9S708C5_nt3v35Ev();
extern void _ZN9S708C5_nt3v36Ev();
extern void _ZN9S708C5_nt3v37Ev();
extern void _ZN9S708C5_nt3v38Ev();
extern void _ZN9S708C5_nt3v39Ev();
extern void _ZN9S708C5_nt3v40Ev();
extern void _ZN9S708C5_nt3v41Ev();
extern void _ZN9S708C5_nt3v42Ev();
extern void _ZN9S708C5_nt3v43Ev();
extern void _ZN9S708C5_nt3v44Ev();
extern void _ZN9S708C5_nt3v45Ev();
extern void _ZN9S708C5_nt3v46Ev();
extern void _ZN9S708C5_nt3v47Ev();
extern void _ZN9S708C5_nt3v48Ev();
extern void _ZN9S708C5_nt3v49Ev();
extern void _ZN9S708C5_nt3v50Ev();
extern void _ZN9S708C5_nt3v51Ev();
extern void _ZN9S708C5_nt3v52Ev();
extern void _ZN9S708C5_nt3v53Ev();
extern void _ZN9S708C5_nt3v54Ev();
extern void _ZN9S708C5_nt3v55Ev();
extern void _ZN9S708C5_nt3v56Ev();
extern void _ZN9S708C5_nt3v57Ev();
extern void _ZN9S708C5_nt3v58Ev();
extern void _ZN9S708C5_nt3v59Ev();
extern void _ZN9S708C5_nt3v60Ev();
extern void _ZN9S708C5_nt3v61Ev();
extern void _ZN9S708C5_nt3v62Ev();
extern void _ZN9S708C5_nt3v63Ev();
extern void _ZN9S708C5_nt3v64Ev();
extern void _ZN9S708C5_nt3v65Ev();
extern void _ZN9S708C5_nt3v66Ev();
extern void _ZN9S708C5_nt3v67Ev();
extern void _ZN9S708C5_nt3v68Ev();
extern void _ZN9S708C5_nt3v69Ev();
extern void _ZN9S708C5_nt3v70Ev();
extern void _ZN9S708C5_nt3v71Ev();
extern void _ZN9S708C5_nt3v72Ev();
extern void _ZN9S708C4_nt3v73Ev();
extern void _ZN9S708C4_nt3v74Ev();
extern void _ZN9S708C3_nt3v75Ev();
extern void _ZN9S708C3_nt3v76Ev();
extern void _ZN9S708C3_nt3v77Ev();
extern void _ZN9S708C3_nt3v78Ev();
extern void _ZN9S708C3_nt3v79Ev();
extern void _ZN9S708C3_nt3v80Ev();
extern void _ZN9S708C3_nt3v81Ev();
extern void _ZN9S708C3_nt3v82Ev();
extern void _ZN9S708C3_nt3v83Ev();
extern void _ZN9S708C3_nt3v84Ev();
extern void _ZN9S708C3_nt3v85Ev();
extern void _ZN9S708C3_nt3v86Ev();
extern void _ZN9S708C3_nt3v87Ev();
extern void _ZN9S708C3_nt3v88Ev();
extern void _ZN9S708C3_nt3v89Ev();
extern void _ZN9S708C3_nt3v90Ev();
extern void _ZN9S708C3_nt3v91Ev();
extern void _ZN9S708C3_nt3v92Ev();
extern void _ZN9S708C3_nt3v93Ev();
extern void _ZN9S708C3_nt3v94Ev();
extern void _ZN9S708C3_nt3v95Ev();
extern void _ZN9S708C3_nt3v96Ev();
extern void _ZN9S708C3_nt3v97Ev();
extern void _ZN9S708C3_nt3v98Ev();
extern void _ZN9S708C3_nt3v99Ev();
extern void _ZN9S708C3_nt4v100Ev();
extern void _ZN9S708C3_nt4v101Ev();
extern void _ZN9S708C3_nt4v102Ev();
extern void _ZN9S708C3_nt4v103Ev();
extern void _ZN9S708C3_nt4v104Ev();
extern void _ZN9S708C3_nt4v105Ev();
extern void _ZN9S708C3_nt4v106Ev();
extern void _ZN9S708C3_nt4v107Ev();
extern void _ZN9S708C3_nt4v108Ev();
extern void _ZN9S708C3_nt4v109Ev();
extern void _ZN9S708C3_nt4v110Ev();
extern void _ZN9S708C3_nt4v111Ev();
extern void _ZN9S708C3_nt4v112Ev();
extern void _ZN9S708C3_nt4v113Ev();
extern void _ZN9S708C3_nt4v114Ev();
extern void _ZN9S708C3_nt4v115Ev();
extern void _ZN9S708C3_nt4v116Ev();
extern void _ZN9S708C3_nt4v117Ev();
extern void _ZN9S708C3_nt4v118Ev();
extern void _ZN9S708C3_nt4v119Ev();
extern void _ZN9S708C3_nt4v120Ev();
extern void _ZN9S708C3_nt4v121Ev();
extern void _ZN9S708C3_nt4v122Ev();
extern void _ZN9S708C3_nt4v123Ev();
extern void _ZN9S708C3_nt4v124Ev();
extern void _ZN9S708C3_nt4v125Ev();
extern void _ZN9S708C3_nt4v126Ev();
extern void _ZN9S708C3_nt4v127Ev();
extern void _ZN9S708C3_nt4v128Ev();
extern void _ZN9S708C3_nt4v129Ev();
extern void _ZN9S708C3_nt4v130Ev();
extern void _ZN9S708C3_nt4v131Ev();
extern void _ZN9S708C3_nt4v132Ev();
extern void _ZN9S708C3_nt4v133Ev();
extern void _ZN9S708C3_nt4v134Ev();
extern void _ZN9S708C3_nt4v135Ev();
extern void _ZN9S708C3_nt4v136Ev();
extern void _ZN9S708C3_nt4v137Ev();
extern void _ZN9S708C3_nt4v138Ev();
extern void _ZN9S708C3_nt4v139Ev();
extern void _ZN9S708C3_nt4v140Ev();
extern void _ZN9S708C3_nt4v141Ev();
extern void _ZN9S708C3_nt4v142Ev();
extern void _ZN9S708C3_nt4v143Ev();
extern void _ZN9S708C3_nt4v144Ev();
extern void _ZN9S708C3_nt4v145Ev();
extern void _ZN9S708C3_nt4v146Ev();
extern void _ZN9S708C3_nt4v147Ev();
extern void _ZN9S708C3_nt4v148Ev();
extern void _ZN9S708C3_nt4v149Ev();
extern void _ZN9S708C3_nt4v150Ev();
static  VTBL_ENTRY vtc_S708C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S708C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S708C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S708C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S708C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S708C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v150Ev,
};
extern VTBL_ENTRY _ZTI9S708C3_nt[];
VTBL_ENTRY *P__ZTI9S708C3_nt = _ZTI9S708C3_nt; 
extern  VTBL_ENTRY _ZTV9S708C3_nt[];
Class_Descriptor cd_S708C3_nt = {  "S708C3_nt", // class name
  bases_S708C3_nt, 2,
  &(vtc_S708C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,352), // object size
  NSPAIRA(_ZTI9S708C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S708C3_nt),146, //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  S708C21_nt  {
  int s708c21f0[4];
  void  mf708c21(); // _ZN10S708C21_nt8mf708c21Ev
};
//SIG(-1 S708C21_nt) C1{ m Fi[4]}


void  S708C21_nt ::mf708c21(){}

//skip512 S708C21_nt

#else // __cplusplus

Class_Descriptor cd_S708C21_nt = {  "S708C21_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C20_nt  : S708C21_nt {
};
//SIG(-1 S708C20_nt) C1{ BC2{ m Fi[4]}}



//skip512 S708C20_nt

#else // __cplusplus

extern Class_Descriptor cd_S708C21_nt;
static Base_Class bases_S708C20_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S708C22_nt  {
  ::S708C6_nt s708c22f0;
  void *s708c22f1;
  ::S708C20_nt s708c22f2;
  void *s708c22f3;
  void  mf708c22(); // _ZN10S708C22_nt8mf708c22Ev
};
//SIG(-1 S708C22_nt) C1{ m FC2{ m Fi[2]} Fp FC3{ BC4{ m Fi[4]}} Fp}


void  S708C22_nt ::mf708c22(){}

//skip512 S708C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C24_nt  {
  void *s708c24f0[8];
  char s708c24f1[4];
  void  mf708c24(); // _ZN10S708C24_nt8mf708c24Ev
};
//SIG(-1 S708C24_nt) C1{ m Fp[8] Fc[4]}


void  S708C24_nt ::mf708c24(){}

//skip512 S708C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C26_nt  {
  int s708c26f0[4];
  char s708c26f1[4];
  void  mf708c26(); // _ZN10S708C26_nt8mf708c26Ev
};
//SIG(-1 S708C26_nt) C1{ m Fi[4] Fc[4]}


void  S708C26_nt ::mf708c26(){}

//skip512 S708C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C25_nt  {
  void *s708c25f0[5];
  ::S708C26_nt s708c25f1;
  unsigned int s708c25f2:1;
  unsigned int s708c25f3:1;
  int s708c25f4;
  char s708c25f5[8];
  void  mf708c25(); // _ZN10S708C25_nt8mf708c25Ev
};
//SIG(-1 S708C25_nt) C1{ m Fp[5] FC2{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]}


void  S708C25_nt ::mf708c25(){}

//skip512 S708C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C29_nt  {
  int s708c29f0[3];
  void  mf708c29(); // _ZN10S708C29_nt8mf708c29Ev
};
//SIG(-1 S708C29_nt) C1{ m Fi[3]}


void  S708C29_nt ::mf708c29(){}

//skip512 S708C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C30_nt  {
  void  mf708c30(); // _ZN10S708C30_nt8mf708c30Ev
};
//SIG(-1 S708C30_nt) C1{ m}


void  S708C30_nt ::mf708c30(){}

//skip512 S708C30_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C32_nt  {
  int s708c32f0[2];
  char s708c32f1[2];
  void  mf708c32(); // _ZN10S708C32_nt8mf708c32Ev
};
//SIG(-1 S708C32_nt) C1{ m Fi[2] Fc[2]}


void  S708C32_nt ::mf708c32(){}

//skip512 S708C32_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S708C31_nt  : S708C32_nt {
  int s708c31f0;
};
//SIG(-1 S708C31_nt) C1{ BC2{ m Fi[2] Fc[2]} Fi}



//skip512 S708C31_nt

#else // __cplusplus

extern Class_Descriptor cd_S708C32_nt;
static Base_Class bases_S708C31_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C32_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S708C28_nt  {
  ::S708C29_nt s708c28f0;
  ::S708C30_nt s708c28f1;
  ::S708C31_nt s708c28f2;
  char s708c28f3;
  void  mf708c28(); // _ZN10S708C28_nt8mf708c28Ev
};
//SIG(-1 S708C28_nt) C1{ m FC2{ m Fi[3]} FC3{ m} FC4{ BC5{ m Fi[2] Fc[2]} Fi} Fc}


void  S708C28_nt ::mf708c28(){}

//skip512 S708C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C36_nt  {
  void *s708c36f0[2];
  void  mf708c36(); // _ZN10S708C36_nt8mf708c36Ev
};
//SIG(-1 S708C36_nt) C1{ m Fp[2]}


void  S708C36_nt ::mf708c36(){}

//skip512 S708C36_nt

#else // __cplusplus

Class_Descriptor cd_S708C36_nt = {  "S708C36_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  S708C35_nt  : S708C36_nt {
};
//SIG(-1 S708C35_nt) C1{ BC2{ m Fp[2]}}



//skip512 S708C35_nt

#else // __cplusplus

extern Class_Descriptor cd_S708C36_nt;
static Base_Class bases_S708C35_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C36_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S708C39  : S708C10_nt {
};
//SIG(-1 S708C39) C1{ BC2{ m Fp Fi[2]}}



static void Test_S708C39()
{
  extern Class_Descriptor cd_S708C39;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C39, buf);
    S708C39 &lv = *(new (buf) S708C39());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C39)");
    check_base_class_offset(lv, (S708C10_nt*), 0, "S708C39");
    test_class_info(&lv, &cd_S708C39);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C39(Test_S708C39, "S708C39", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S708C38()
{
  extern Class_Descriptor cd_S708C38;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C38, buf);
    S708C38 &lv = *(new (buf) S708C38());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C38)");
    check_base_class_offset(lv, (S708C10_nt*)(S708C39*), 0, "S708C38");
    check_base_class_offset(lv, (S708C39*), 0, "S708C38");
    test_class_info(&lv, &cd_S708C38);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C38(Test_S708C38, "S708C38", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S708C10_nt;
extern Class_Descriptor cd_S708C39;
static Base_Class bases_S708C38[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S708C38 = {  "S708C38", // class name
  bases_S708C38, 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  S708C37_nt  : S708C38 {
};
//SIG(-1 S708C37_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S708C37_nt

#else // __cplusplus

extern Class_Descriptor cd_S708C10_nt;
extern Class_Descriptor cd_S708C39;
extern Class_Descriptor cd_S708C38;
static Base_Class bases_S708C37_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S708C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S708C34_nt  {
  ::S708C35_nt s708c34f0;
  char s708c34f1;
  ::S708C37_nt s708c34f2;
  int s708c34f3;
  ::S708C6_nt s708c34f4;
  ::S708C6_nt s708c34f5;
  void *s708c34f6;
  void  mf708c34(); // _ZN10S708C34_nt8mf708c34Ev
};
//SIG(-1 S708C34_nt) C1{ m FC2{ BC3{ m Fp[2]}} Fc FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} Fi FC8{ m Fi[2]} FC8 Fp}


void  S708C34_nt ::mf708c34(){}

//skip512 S708C34_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S708C43()
{
  extern Class_Descriptor cd_S708C43;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C43, buf);
    S708C43 &lv = *(new (buf) S708C43());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C43)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C43)");
    check_base_class_offset(lv, (S708C10_nt*), 0, "S708C43");
    test_class_info(&lv, &cd_S708C43);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C43(Test_S708C43, "S708C43", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S708C42()
{
  extern Class_Descriptor cd_S708C42;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C42, buf);
    S708C42 &lv = *(new (buf) S708C42());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C42)");
    check_base_class_offset(lv, (S708C10_nt*)(S708C43*), 0, "S708C42");
    check_base_class_offset(lv, (S708C43*), 0, "S708C42");
    test_class_info(&lv, &cd_S708C42);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C42(Test_S708C42, "S708C42", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S708C10_nt;
extern Class_Descriptor cd_S708C43;
static Base_Class bases_S708C42[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C43,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S708C42 = {  "S708C42", // class name
  bases_S708C42, 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  S708C2_nt  : S708C3_nt {
  ::S708C20_nt s708c2f0;
  ::S708C6_nt s708c2f1;
  void *s708c2f2[2];
  ::S708C22_nt s708c2f3;
  ::S708C24_nt s708c2f4;
  int s708c2f5;
  ::S708C25_nt s708c2f6;
  int s708c2f7[4];
  ::S708C6_nt s708c2f8[4];
  ::S708C28_nt s708c2f9;
  ::S708C29_nt s708c2f10;
  int s708c2f11;
  ::S708C34_nt s708c2f12;
  ::S708C34_nt s708c2f13;
  void *s708c2f14;
  ::S708C29_nt s708c2f15;
  ::S708C17 s708c2f16;
  ::S708C42 s708c2f17;
  unsigned int s708c2f18:1;
  unsigned int s708c2f19:1;
  unsigned int s708c2f20:1;
  ::S708C30_nt s708c2f21;
  ::S708C19_nt s708c2f22;
  ::S708C19_nt s708c2f23;
  ::S708C19_nt s708c2f24;
  ::S708C19_nt s708c2f25;
  ::S708C19_nt s708c2f26;
  ::S708C19_nt s708c2f27;
  ::S708C19_nt s708c2f28;
  ::S708C19_nt s708c2f29;
  ::S708C19_nt s708c2f30;
  ::S708C19_nt s708c2f31;
  ::S708C19_nt s708c2f32;
  ::S708C19_nt s708c2f33;
  ::S708C19_nt s708c2f34;
  virtual  ~S708C2_nt(); // _ZN9S708C2_ntD1Ev
  virtual void  v151(); // _ZN9S708C2_nt4v151Ev
  virtual void  v152(); // _ZN9S708C2_nt4v152Ev
  virtual void  v153(); // _ZN9S708C2_nt4v153Ev
  virtual void  v154(); // _ZN9S708C2_nt4v154Ev
  virtual void  v155(); // _ZN9S708C2_nt4v155Ev
  virtual void  v156(); // _ZN9S708C2_nt4v156Ev
  virtual void  v157(); // _ZN9S708C2_nt4v157Ev
  virtual void  v158(); // _ZN9S708C2_nt4v158Ev
  virtual void  v159(); // _ZN9S708C2_nt4v159Ev
  virtual void  v160(); // _ZN9S708C2_nt4v160Ev
  virtual void  v161(); // _ZN9S708C2_nt4v161Ev
  virtual void  v162(); // _ZN9S708C2_nt4v162Ev
  virtual void  v163(); // _ZN9S708C2_nt4v163Ev
  virtual void  v164(); // _ZN9S708C2_nt4v164Ev
  virtual void  v165(); // _ZN9S708C2_nt4v165Ev
  virtual void  v166(); // _ZN9S708C2_nt4v166Ev
  virtual void  v167(); // _ZN9S708C2_nt4v167Ev
  virtual void  v168(); // _ZN9S708C2_nt4v168Ev
  virtual void  v169(); // _ZN9S708C2_nt4v169Ev
  virtual void  v170(); // _ZN9S708C2_nt4v170Ev
  virtual void  v171(); // _ZN9S708C2_nt4v171Ev
  virtual void  v172(); // _ZN9S708C2_nt4v172Ev
  virtual void  v173(); // _ZN9S708C2_nt4v173Ev
  virtual void  v174(); // _ZN9S708C2_nt4v174Ev
  virtual void  v175(); // _ZN9S708C2_nt4v175Ev
  virtual void  v176(); // _ZN9S708C2_nt4v176Ev
  virtual void  v177(); // _ZN9S708C2_nt4v177Ev
  virtual void  v178(); // _ZN9S708C2_nt4v178Ev
  virtual void  v179(); // _ZN9S708C2_nt4v179Ev
  virtual void  v180(); // _ZN9S708C2_nt4v180Ev
  virtual void  v181(); // _ZN9S708C2_nt4v181Ev
  virtual void  v182(); // _ZN9S708C2_nt4v182Ev
  virtual void  v183(); // _ZN9S708C2_nt4v183Ev
  virtual void  v184(); // _ZN9S708C2_nt4v184Ev
  virtual void  v185(); // _ZN9S708C2_nt4v185Ev
  virtual void  v186(); // _ZN9S708C2_nt4v186Ev
  virtual void  v187(); // _ZN9S708C2_nt4v187Ev
  virtual void  v188(); // _ZN9S708C2_nt4v188Ev
  virtual void  v189(); // _ZN9S708C2_nt4v189Ev
  virtual void  v190(); // _ZN9S708C2_nt4v190Ev
  virtual void  v191(); // _ZN9S708C2_nt4v191Ev
  virtual void  v192(); // _ZN9S708C2_nt4v192Ev
  virtual void  v193(); // _ZN9S708C2_nt4v193Ev
  virtual void  v194(); // _ZN9S708C2_nt4v194Ev
  virtual void  v195(); // _ZN9S708C2_nt4v195Ev
  virtual void  v196(); // _ZN9S708C2_nt4v196Ev
  virtual void  v197(); // _ZN9S708C2_nt4v197Ev
  virtual void  v198(); // _ZN9S708C2_nt4v198Ev
  virtual void  v199(); // _ZN9S708C2_nt4v199Ev
  virtual void  v200(); // _ZN9S708C2_nt4v200Ev
  virtual void  v201(); // _ZN9S708C2_nt4v201Ev
  virtual void  v202(); // _ZN9S708C2_nt4v202Ev
  virtual void  v203(); // _ZN9S708C2_nt4v203Ev
  virtual void  v204(); // _ZN9S708C2_nt4v204Ev
  virtual void  v205(); // _ZN9S708C2_nt4v205Ev
  virtual void  v206(); // _ZN9S708C2_nt4v206Ev
  virtual void  v207(); // _ZN9S708C2_nt4v207Ev
  virtual void  v208(); // _ZN9S708C2_nt4v208Ev
  virtual void  v209(); // _ZN9S708C2_nt4v209Ev
  virtual void  v210(); // _ZN9S708C2_nt4v210Ev
  virtual void  v211(); // _ZN9S708C2_nt4v211Ev
  virtual void  v212(); // _ZN9S708C2_nt4v212Ev
  virtual void  v213(); // _ZN9S708C2_nt4v213Ev
  virtual void  v214(); // _ZN9S708C2_nt4v214Ev
  virtual void  v215(); // _ZN9S708C2_nt4v215Ev
  virtual void  v216(); // _ZN9S708C2_nt4v216Ev
  virtual void  v217(); // _ZN9S708C2_nt4v217Ev
  virtual void  v218(); // _ZN9S708C2_nt4v218Ev
  virtual void  v219(); // _ZN9S708C2_nt4v219Ev
  S708C2_nt(); // tgen
};
//SIG(-1 S708C2_nt) C1{ BC2{ BC3{ BC4{ vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v134 v135} vd 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{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC7 Fp FC10{ BC11{ BC9}} FC10 FC10 FC12{ BC13{ BC9}} Fc Fi Fp FC5 FC5 FC5 FC5 FC5 FC5 FC14{ m Fp FC5} FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14} 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 FC15{ BC16{ m Fi[4]}} FC5 Fp[2] FC17{ m FC5 Fp FC15 Fp} FC18{ m Fp[8] Fc[4]} Fi FC19{ m Fp[5] FC20{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC5[4] FC21{ m FC22{ m Fi[3]} FC23{ m} FC24{ BC25{ m Fi[2] Fc[2]} Fi} Fc} FC22 Fi FC26{ m FC27{ BC28{ m Fp[2]}} Fc FC29{ BC30{ BC31{ BC9}}} Fi FC5 FC5 Fp} FC26 Fp FC22 FC12 FC32{ BC33{ BC9}} Fi:1 Fi:1 Fi:1 FC23 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14}


 S708C2_nt ::~S708C2_nt(){ note_dtor("S708C2_nt", this);}
void  S708C2_nt ::v151(){vfunc_called(this, "_ZN9S708C2_nt4v151Ev");}
void  S708C2_nt ::v152(){vfunc_called(this, "_ZN9S708C2_nt4v152Ev");}
void  S708C2_nt ::v153(){vfunc_called(this, "_ZN9S708C2_nt4v153Ev");}
void  S708C2_nt ::v154(){vfunc_called(this, "_ZN9S708C2_nt4v154Ev");}
void  S708C2_nt ::v155(){vfunc_called(this, "_ZN9S708C2_nt4v155Ev");}
void  S708C2_nt ::v156(){vfunc_called(this, "_ZN9S708C2_nt4v156Ev");}
void  S708C2_nt ::v157(){vfunc_called(this, "_ZN9S708C2_nt4v157Ev");}
void  S708C2_nt ::v158(){vfunc_called(this, "_ZN9S708C2_nt4v158Ev");}
void  S708C2_nt ::v159(){vfunc_called(this, "_ZN9S708C2_nt4v159Ev");}
void  S708C2_nt ::v160(){vfunc_called(this, "_ZN9S708C2_nt4v160Ev");}
void  S708C2_nt ::v161(){vfunc_called(this, "_ZN9S708C2_nt4v161Ev");}
void  S708C2_nt ::v162(){vfunc_called(this, "_ZN9S708C2_nt4v162Ev");}
void  S708C2_nt ::v163(){vfunc_called(this, "_ZN9S708C2_nt4v163Ev");}
void  S708C2_nt ::v164(){vfunc_called(this, "_ZN9S708C2_nt4v164Ev");}
void  S708C2_nt ::v165(){vfunc_called(this, "_ZN9S708C2_nt4v165Ev");}
void  S708C2_nt ::v166(){vfunc_called(this, "_ZN9S708C2_nt4v166Ev");}
void  S708C2_nt ::v167(){vfunc_called(this, "_ZN9S708C2_nt4v167Ev");}
void  S708C2_nt ::v168(){vfunc_called(this, "_ZN9S708C2_nt4v168Ev");}
void  S708C2_nt ::v169(){vfunc_called(this, "_ZN9S708C2_nt4v169Ev");}
void  S708C2_nt ::v170(){vfunc_called(this, "_ZN9S708C2_nt4v170Ev");}
void  S708C2_nt ::v171(){vfunc_called(this, "_ZN9S708C2_nt4v171Ev");}
void  S708C2_nt ::v172(){vfunc_called(this, "_ZN9S708C2_nt4v172Ev");}
void  S708C2_nt ::v173(){vfunc_called(this, "_ZN9S708C2_nt4v173Ev");}
void  S708C2_nt ::v174(){vfunc_called(this, "_ZN9S708C2_nt4v174Ev");}
void  S708C2_nt ::v175(){vfunc_called(this, "_ZN9S708C2_nt4v175Ev");}
void  S708C2_nt ::v176(){vfunc_called(this, "_ZN9S708C2_nt4v176Ev");}
void  S708C2_nt ::v177(){vfunc_called(this, "_ZN9S708C2_nt4v177Ev");}
void  S708C2_nt ::v178(){vfunc_called(this, "_ZN9S708C2_nt4v178Ev");}
void  S708C2_nt ::v179(){vfunc_called(this, "_ZN9S708C2_nt4v179Ev");}
void  S708C2_nt ::v180(){vfunc_called(this, "_ZN9S708C2_nt4v180Ev");}
void  S708C2_nt ::v181(){vfunc_called(this, "_ZN9S708C2_nt4v181Ev");}
void  S708C2_nt ::v182(){vfunc_called(this, "_ZN9S708C2_nt4v182Ev");}
void  S708C2_nt ::v183(){vfunc_called(this, "_ZN9S708C2_nt4v183Ev");}
void  S708C2_nt ::v184(){vfunc_called(this, "_ZN9S708C2_nt4v184Ev");}
void  S708C2_nt ::v185(){vfunc_called(this, "_ZN9S708C2_nt4v185Ev");}
void  S708C2_nt ::v186(){vfunc_called(this, "_ZN9S708C2_nt4v186Ev");}
void  S708C2_nt ::v187(){vfunc_called(this, "_ZN9S708C2_nt4v187Ev");}
void  S708C2_nt ::v188(){vfunc_called(this, "_ZN9S708C2_nt4v188Ev");}
void  S708C2_nt ::v189(){vfunc_called(this, "_ZN9S708C2_nt4v189Ev");}
void  S708C2_nt ::v190(){vfunc_called(this, "_ZN9S708C2_nt4v190Ev");}
void  S708C2_nt ::v191(){vfunc_called(this, "_ZN9S708C2_nt4v191Ev");}
void  S708C2_nt ::v192(){vfunc_called(this, "_ZN9S708C2_nt4v192Ev");}
void  S708C2_nt ::v193(){vfunc_called(this, "_ZN9S708C2_nt4v193Ev");}
void  S708C2_nt ::v194(){vfunc_called(this, "_ZN9S708C2_nt4v194Ev");}
void  S708C2_nt ::v195(){vfunc_called(this, "_ZN9S708C2_nt4v195Ev");}
void  S708C2_nt ::v196(){vfunc_called(this, "_ZN9S708C2_nt4v196Ev");}
void  S708C2_nt ::v197(){vfunc_called(this, "_ZN9S708C2_nt4v197Ev");}
void  S708C2_nt ::v198(){vfunc_called(this, "_ZN9S708C2_nt4v198Ev");}
void  S708C2_nt ::v199(){vfunc_called(this, "_ZN9S708C2_nt4v199Ev");}
void  S708C2_nt ::v200(){vfunc_called(this, "_ZN9S708C2_nt4v200Ev");}
void  S708C2_nt ::v201(){vfunc_called(this, "_ZN9S708C2_nt4v201Ev");}
void  S708C2_nt ::v202(){vfunc_called(this, "_ZN9S708C2_nt4v202Ev");}
void  S708C2_nt ::v203(){vfunc_called(this, "_ZN9S708C2_nt4v203Ev");}
void  S708C2_nt ::v204(){vfunc_called(this, "_ZN9S708C2_nt4v204Ev");}
void  S708C2_nt ::v205(){vfunc_called(this, "_ZN9S708C2_nt4v205Ev");}
void  S708C2_nt ::v206(){vfunc_called(this, "_ZN9S708C2_nt4v206Ev");}
void  S708C2_nt ::v207(){vfunc_called(this, "_ZN9S708C2_nt4v207Ev");}
void  S708C2_nt ::v208(){vfunc_called(this, "_ZN9S708C2_nt4v208Ev");}
void  S708C2_nt ::v209(){vfunc_called(this, "_ZN9S708C2_nt4v209Ev");}
void  S708C2_nt ::v210(){vfunc_called(this, "_ZN9S708C2_nt4v210Ev");}
void  S708C2_nt ::v211(){vfunc_called(this, "_ZN9S708C2_nt4v211Ev");}
void  S708C2_nt ::v212(){vfunc_called(this, "_ZN9S708C2_nt4v212Ev");}
void  S708C2_nt ::v213(){vfunc_called(this, "_ZN9S708C2_nt4v213Ev");}
void  S708C2_nt ::v214(){vfunc_called(this, "_ZN9S708C2_nt4v214Ev");}
void  S708C2_nt ::v215(){vfunc_called(this, "_ZN9S708C2_nt4v215Ev");}
void  S708C2_nt ::v216(){vfunc_called(this, "_ZN9S708C2_nt4v216Ev");}
void  S708C2_nt ::v217(){vfunc_called(this, "_ZN9S708C2_nt4v217Ev");}
void  S708C2_nt ::v218(){vfunc_called(this, "_ZN9S708C2_nt4v218Ev");}
void  S708C2_nt ::v219(){vfunc_called(this, "_ZN9S708C2_nt4v219Ev");}
S708C2_nt ::S708C2_nt(){ note_ctor("S708C2_nt", this);} // tgen

//skip512 S708C2_nt

#else // __cplusplus

extern void _ZN9S708C2_ntC1Ev();
extern void _ZN9S708C2_ntD1Ev();
Name_Map name_map_S708C2_nt[] = {
  NSPAIR(_ZN9S708C2_ntC1Ev),
  NSPAIR(_ZN9S708C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S708C5_nt;
extern VTBL_ENTRY _ZTI9S708C5_nt[];
extern  VTBL_ENTRY _ZTV9S708C5_nt[];
extern Class_Descriptor cd_S708C4_nt;
extern VTBL_ENTRY _ZTI9S708C4_nt[];
extern  VTBL_ENTRY _ZTV9S708C4_nt[];
extern Class_Descriptor cd_S708C3_nt;
extern VTBL_ENTRY _ZTI9S708C3_nt[];
extern  VTBL_ENTRY _ZTV9S708C3_nt[];
static Base_Class bases_S708C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S708C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S708C2_nt[];
extern void _ZN9S708C2_ntD1Ev();
extern void _ZN9S708C2_ntD0Ev();
extern void _ZN9S708C5_nt2v9Ev();
extern void _ZN9S708C5_nt3v10Ev();
extern void _ZN9S708C5_nt3v11Ev();
extern void _ZN9S708C5_nt3v12Ev();
extern void _ZN9S708C5_nt3v13Ev();
extern void _ZN9S708C5_nt3v14Ev();
extern void _ZN9S708C5_nt3v15Ev();
extern void _ZN9S708C5_nt3v16Ev();
extern void _ZN9S708C5_nt3v17Ev();
extern void _ZN9S708C5_nt3v18Ev();
extern void _ZN9S708C5_nt3v19Ev();
extern void _ZN9S708C5_nt3v20Ev();
extern void _ZN9S708C5_nt3v21Ev();
extern void _ZN9S708C5_nt3v22Ev();
extern void _ZN9S708C5_nt3v23Ev();
extern void _ZN9S708C5_nt3v24Ev();
extern void _ZN9S708C5_nt3v25Ev();
extern void _ZN9S708C5_nt3v26Ev();
extern void _ZN9S708C5_nt3v27Ev();
extern void _ZN9S708C5_nt3v28Ev();
extern void _ZN9S708C5_nt3v29Ev();
extern void _ZN9S708C5_nt3v30Ev();
extern void _ZN9S708C5_nt3v31Ev();
extern void _ZN9S708C5_nt3v32Ev();
extern void _ZN9S708C5_nt3v33Ev();
extern void _ZN9S708C5_nt3v34Ev();
extern void _ZN9S708C5_nt3v35Ev();
extern void _ZN9S708C5_nt3v36Ev();
extern void _ZN9S708C5_nt3v37Ev();
extern void _ZN9S708C5_nt3v38Ev();
extern void _ZN9S708C5_nt3v39Ev();
extern void _ZN9S708C5_nt3v40Ev();
extern void _ZN9S708C5_nt3v41Ev();
extern void _ZN9S708C5_nt3v42Ev();
extern void _ZN9S708C5_nt3v43Ev();
extern void _ZN9S708C5_nt3v44Ev();
extern void _ZN9S708C5_nt3v45Ev();
extern void _ZN9S708C5_nt3v46Ev();
extern void _ZN9S708C5_nt3v47Ev();
extern void _ZN9S708C5_nt3v48Ev();
extern void _ZN9S708C5_nt3v49Ev();
extern void _ZN9S708C5_nt3v50Ev();
extern void _ZN9S708C5_nt3v51Ev();
extern void _ZN9S708C5_nt3v52Ev();
extern void _ZN9S708C5_nt3v53Ev();
extern void _ZN9S708C5_nt3v54Ev();
extern void _ZN9S708C5_nt3v55Ev();
extern void _ZN9S708C5_nt3v56Ev();
extern void _ZN9S708C5_nt3v57Ev();
extern void _ZN9S708C5_nt3v58Ev();
extern void _ZN9S708C5_nt3v59Ev();
extern void _ZN9S708C5_nt3v60Ev();
extern void _ZN9S708C5_nt3v61Ev();
extern void _ZN9S708C5_nt3v62Ev();
extern void _ZN9S708C5_nt3v63Ev();
extern void _ZN9S708C5_nt3v64Ev();
extern void _ZN9S708C5_nt3v65Ev();
extern void _ZN9S708C5_nt3v66Ev();
extern void _ZN9S708C5_nt3v67Ev();
extern void _ZN9S708C5_nt3v68Ev();
extern void _ZN9S708C5_nt3v69Ev();
extern void _ZN9S708C5_nt3v70Ev();
extern void _ZN9S708C5_nt3v71Ev();
extern void _ZN9S708C5_nt3v72Ev();
extern void _ZN9S708C4_nt3v73Ev();
extern void _ZN9S708C4_nt3v74Ev();
extern void _ZN9S708C3_nt3v75Ev();
extern void _ZN9S708C3_nt3v76Ev();
extern void _ZN9S708C3_nt3v77Ev();
extern void _ZN9S708C3_nt3v78Ev();
extern void _ZN9S708C3_nt3v79Ev();
extern void _ZN9S708C3_nt3v80Ev();
extern void _ZN9S708C3_nt3v81Ev();
extern void _ZN9S708C3_nt3v82Ev();
extern void _ZN9S708C3_nt3v83Ev();
extern void _ZN9S708C3_nt3v84Ev();
extern void _ZN9S708C3_nt3v85Ev();
extern void _ZN9S708C3_nt3v86Ev();
extern void _ZN9S708C3_nt3v87Ev();
extern void _ZN9S708C3_nt3v88Ev();
extern void _ZN9S708C3_nt3v89Ev();
extern void _ZN9S708C3_nt3v90Ev();
extern void _ZN9S708C3_nt3v91Ev();
extern void _ZN9S708C3_nt3v92Ev();
extern void _ZN9S708C3_nt3v93Ev();
extern void _ZN9S708C3_nt3v94Ev();
extern void _ZN9S708C3_nt3v95Ev();
extern void _ZN9S708C3_nt3v96Ev();
extern void _ZN9S708C3_nt3v97Ev();
extern void _ZN9S708C3_nt3v98Ev();
extern void _ZN9S708C3_nt3v99Ev();
extern void _ZN9S708C3_nt4v100Ev();
extern void _ZN9S708C3_nt4v101Ev();
extern void _ZN9S708C3_nt4v102Ev();
extern void _ZN9S708C3_nt4v103Ev();
extern void _ZN9S708C3_nt4v104Ev();
extern void _ZN9S708C3_nt4v105Ev();
extern void _ZN9S708C3_nt4v106Ev();
extern void _ZN9S708C3_nt4v107Ev();
extern void _ZN9S708C3_nt4v108Ev();
extern void _ZN9S708C3_nt4v109Ev();
extern void _ZN9S708C3_nt4v110Ev();
extern void _ZN9S708C3_nt4v111Ev();
extern void _ZN9S708C3_nt4v112Ev();
extern void _ZN9S708C3_nt4v113Ev();
extern void _ZN9S708C3_nt4v114Ev();
extern void _ZN9S708C3_nt4v115Ev();
extern void _ZN9S708C3_nt4v116Ev();
extern void _ZN9S708C3_nt4v117Ev();
extern void _ZN9S708C3_nt4v118Ev();
extern void _ZN9S708C3_nt4v119Ev();
extern void _ZN9S708C3_nt4v120Ev();
extern void _ZN9S708C3_nt4v121Ev();
extern void _ZN9S708C3_nt4v122Ev();
extern void _ZN9S708C3_nt4v123Ev();
extern void _ZN9S708C3_nt4v124Ev();
extern void _ZN9S708C3_nt4v125Ev();
extern void _ZN9S708C3_nt4v126Ev();
extern void _ZN9S708C3_nt4v127Ev();
extern void _ZN9S708C3_nt4v128Ev();
extern void _ZN9S708C3_nt4v129Ev();
extern void _ZN9S708C3_nt4v130Ev();
extern void _ZN9S708C3_nt4v131Ev();
extern void _ZN9S708C3_nt4v132Ev();
extern void _ZN9S708C3_nt4v133Ev();
extern void _ZN9S708C3_nt4v134Ev();
extern void _ZN9S708C3_nt4v135Ev();
extern void _ZN9S708C3_nt4v136Ev();
extern void _ZN9S708C3_nt4v137Ev();
extern void _ZN9S708C3_nt4v138Ev();
extern void _ZN9S708C3_nt4v139Ev();
extern void _ZN9S708C3_nt4v140Ev();
extern void _ZN9S708C3_nt4v141Ev();
extern void _ZN9S708C3_nt4v142Ev();
extern void _ZN9S708C3_nt4v143Ev();
extern void _ZN9S708C3_nt4v144Ev();
extern void _ZN9S708C3_nt4v145Ev();
extern void _ZN9S708C3_nt4v146Ev();
extern void _ZN9S708C3_nt4v147Ev();
extern void _ZN9S708C3_nt4v148Ev();
extern void _ZN9S708C3_nt4v149Ev();
extern void _ZN9S708C3_nt4v150Ev();
extern void _ZN9S708C2_nt4v151Ev();
extern void _ZN9S708C2_nt4v152Ev();
extern void _ZN9S708C2_nt4v153Ev();
extern void _ZN9S708C2_nt4v154Ev();
extern void _ZN9S708C2_nt4v155Ev();
extern void _ZN9S708C2_nt4v156Ev();
extern void _ZN9S708C2_nt4v157Ev();
extern void _ZN9S708C2_nt4v158Ev();
extern void _ZN9S708C2_nt4v159Ev();
extern void _ZN9S708C2_nt4v160Ev();
extern void _ZN9S708C2_nt4v161Ev();
extern void _ZN9S708C2_nt4v162Ev();
extern void _ZN9S708C2_nt4v163Ev();
extern void _ZN9S708C2_nt4v164Ev();
extern void _ZN9S708C2_nt4v165Ev();
extern void _ZN9S708C2_nt4v166Ev();
extern void _ZN9S708C2_nt4v167Ev();
extern void _ZN9S708C2_nt4v168Ev();
extern void _ZN9S708C2_nt4v169Ev();
extern void _ZN9S708C2_nt4v170Ev();
extern void _ZN9S708C2_nt4v171Ev();
extern void _ZN9S708C2_nt4v172Ev();
extern void _ZN9S708C2_nt4v173Ev();
extern void _ZN9S708C2_nt4v174Ev();
extern void _ZN9S708C2_nt4v175Ev();
extern void _ZN9S708C2_nt4v176Ev();
extern void _ZN9S708C2_nt4v177Ev();
extern void _ZN9S708C2_nt4v178Ev();
extern void _ZN9S708C2_nt4v179Ev();
extern void _ZN9S708C2_nt4v180Ev();
extern void _ZN9S708C2_nt4v181Ev();
extern void _ZN9S708C2_nt4v182Ev();
extern void _ZN9S708C2_nt4v183Ev();
extern void _ZN9S708C2_nt4v184Ev();
extern void _ZN9S708C2_nt4v185Ev();
extern void _ZN9S708C2_nt4v186Ev();
extern void _ZN9S708C2_nt4v187Ev();
extern void _ZN9S708C2_nt4v188Ev();
extern void _ZN9S708C2_nt4v189Ev();
extern void _ZN9S708C2_nt4v190Ev();
extern void _ZN9S708C2_nt4v191Ev();
extern void _ZN9S708C2_nt4v192Ev();
extern void _ZN9S708C2_nt4v193Ev();
extern void _ZN9S708C2_nt4v194Ev();
extern void _ZN9S708C2_nt4v195Ev();
extern void _ZN9S708C2_nt4v196Ev();
extern void _ZN9S708C2_nt4v197Ev();
extern void _ZN9S708C2_nt4v198Ev();
extern void _ZN9S708C2_nt4v199Ev();
extern void _ZN9S708C2_nt4v200Ev();
extern void _ZN9S708C2_nt4v201Ev();
extern void _ZN9S708C2_nt4v202Ev();
extern void _ZN9S708C2_nt4v203Ev();
extern void _ZN9S708C2_nt4v204Ev();
extern void _ZN9S708C2_nt4v205Ev();
extern void _ZN9S708C2_nt4v206Ev();
extern void _ZN9S708C2_nt4v207Ev();
extern void _ZN9S708C2_nt4v208Ev();
extern void _ZN9S708C2_nt4v209Ev();
extern void _ZN9S708C2_nt4v210Ev();
extern void _ZN9S708C2_nt4v211Ev();
extern void _ZN9S708C2_nt4v212Ev();
extern void _ZN9S708C2_nt4v213Ev();
extern void _ZN9S708C2_nt4v214Ev();
extern void _ZN9S708C2_nt4v215Ev();
extern void _ZN9S708C2_nt4v216Ev();
extern void _ZN9S708C2_nt4v217Ev();
extern void _ZN9S708C2_nt4v218Ev();
extern void _ZN9S708C2_nt4v219Ev();
static  VTBL_ENTRY vtc_S708C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S708C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S708C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S708C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S708C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S708C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v219Ev,
};
extern VTBL_ENTRY _ZTI9S708C2_nt[];
VTBL_ENTRY *P__ZTI9S708C2_nt = _ZTI9S708C2_nt; 
extern  VTBL_ENTRY _ZTV9S708C2_nt[];
Class_Descriptor cd_S708C2_nt = {  "S708C2_nt", // class name
  bases_S708C2_nt, 3,
  &(vtc_S708C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1224,908), // object size
  NSPAIRA(_ZTI9S708C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S708C2_nt),215, //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  S708C47  : S708C10_nt {
};
//SIG(-1 S708C47) C1{ BC2{ m Fp Fi[2]}}



static void Test_S708C47()
{
  extern Class_Descriptor cd_S708C47;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C47, buf);
    S708C47 &lv = *(new (buf) S708C47());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C47)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C47)");
    check_base_class_offset(lv, (S708C10_nt*), 0, "S708C47");
    test_class_info(&lv, &cd_S708C47);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C47(Test_S708C47, "S708C47", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S708C10_nt;
static Base_Class bases_S708C47[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S708C47 = {  "S708C47", // class name
  bases_S708C47, 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  S708C46_nt  {
  ::S708C47 s708c46f0;
  void *s708c46f1;
  int s708c46f2;
  void  mf708c46(); // _ZN10S708C46_nt8mf708c46Ev
};
//SIG(-1 S708C46_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fp Fi}


void  S708C46_nt ::mf708c46(){}

//skip512 S708C46_nt

#else // __cplusplus

Class_Descriptor cd_S708C46_nt = {  "S708C46_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S708C45_nt  : S708C46_nt {
};
//SIG(-1 S708C45_nt) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



//skip512 S708C45_nt

#else // __cplusplus

extern Class_Descriptor cd_S708C46_nt;
static Base_Class bases_S708C45_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C46_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S708C51  : S708C10_nt {
};
//SIG(-1 S708C51) C1{ BC2{ m Fp Fi[2]}}



static void Test_S708C51()
{
  extern Class_Descriptor cd_S708C51;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C51, buf);
    S708C51 &lv = *(new (buf) S708C51());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C51)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C51)");
    check_base_class_offset(lv, (S708C10_nt*), 0, "S708C51");
    test_class_info(&lv, &cd_S708C51);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C51(Test_S708C51, "S708C51", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S708C50()
{
  extern Class_Descriptor cd_S708C50;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S708C50, buf);
    S708C50 &lv = *(new (buf) S708C50());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S708C50)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C50)");
    check_base_class_offset(lv, (S708C10_nt*)(S708C51*), 0, "S708C50");
    check_base_class_offset(lv, (S708C51*), 0, "S708C50");
    test_class_info(&lv, &cd_S708C50);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C50(Test_S708C50, "S708C50", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S708C10_nt;
extern Class_Descriptor cd_S708C51;
static Base_Class bases_S708C50[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S708C50 = {  "S708C50", // class name
  bases_S708C50, 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  S708C1  : S708C2_nt {
  void *s708c1f0;
  int s708c1f1;
  ::S708C45_nt s708c1f2;
  int s708c1f3[3];
  ::S708C42 s708c1f4;
  ::S708C50 s708c1f5;
  ::S708C50 s708c1f6;
  ::S708C50 s708c1f7;
  ::S708C45_nt s708c1f8;
  virtual  ~S708C1(); // _ZN6S708C1D1Ev
  virtual void  v1(); // _ZN6S708C12v1Ev
  virtual void  v2(); // _ZN6S708C12v2Ev
  virtual void  v3(); // _ZN6S708C12v3Ev
  virtual void  v4(); // _ZN6S708C12v4Ev
  virtual void  v5(); // _ZN6S708C12v5Ev
  virtual void  v6(); // _ZN6S708C12v6Ev
  virtual void  v7(); // _ZN6S708C12v7Ev
  virtual void  v8(); // _ZN6S708C12v8Ev
  S708C1(); // tgen
};
//SIG(1 S708C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74} vd 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 FC7{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 Fp FC11{ BC12{ BC10}} FC11 FC11 FC13{ BC14{ BC10}} Fc Fi Fp FC6 FC6 FC6 FC6 FC6 FC6 FC15{ m Fp FC6} FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 FC16{ BC17{ m Fi[4]}} FC6 Fp[2] FC18{ m FC6 Fp FC16 Fp} FC19{ m Fp[8] Fc[4]} Fi FC20{ m Fp[5] FC21{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC6[4] FC22{ m FC23{ m Fi[3]} FC24{ m} FC25{ BC26{ m Fi[2] Fc[2]} Fi} Fc} FC23 Fi FC27{ m FC28{ BC29{ m Fp[2]}} Fc FC30{ BC31{ BC32{ BC10}}} Fi FC6 FC6 Fp} FC27 Fp FC23 FC13 FC33{ BC34{ BC10}} Fi:1 Fi:1 Fi:1 FC24 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi FC35{ BC36{ m FC37{ BC10} Fp Fi}} Fi[3] FC33 FC38{ BC39{ BC10}} FC38 FC38 FC35}


 S708C1 ::~S708C1(){ note_dtor("S708C1", this);}
void  S708C1 ::v1(){vfunc_called(this, "_ZN6S708C12v1Ev");}
void  S708C1 ::v2(){vfunc_called(this, "_ZN6S708C12v2Ev");}
void  S708C1 ::v3(){vfunc_called(this, "_ZN6S708C12v3Ev");}
void  S708C1 ::v4(){vfunc_called(this, "_ZN6S708C12v4Ev");}
void  S708C1 ::v5(){vfunc_called(this, "_ZN6S708C12v5Ev");}
void  S708C1 ::v6(){vfunc_called(this, "_ZN6S708C12v6Ev");}
void  S708C1 ::v7(){vfunc_called(this, "_ZN6S708C12v7Ev");}
void  S708C1 ::v8(){vfunc_called(this, "_ZN6S708C12v8Ev");}
S708C1 ::S708C1(){ note_ctor("S708C1", this);} // tgen

static void Test_S708C1()
{
  extern Class_Descriptor cd_S708C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(174,255)];
    init_test(&cd_S708C1, buf);
    S708C1 *dp, &lv = *(dp=new (buf) S708C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1384,1016), "sizeof(S708C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S708C1)");
    check_base_class_offset(lv, (S708C5_nt*)(S708C4_nt*)(S708C3_nt*)(S708C2_nt*), 0, "S708C1");
    check_base_class_offset(lv, (S708C4_nt*)(S708C3_nt*)(S708C2_nt*), 0, "S708C1");
    check_base_class_offset(lv, (S708C3_nt*)(S708C2_nt*), 0, "S708C1");
    check_base_class_offset(lv, (S708C2_nt*), 0, "S708C1");
    check_field_offset(lv, s708c1f0, ABISELECT(1224,908), "S708C1.s708c1f0");
    check_field_offset(lv, s708c1f1, ABISELECT(1232,912), "S708C1.s708c1f1");
    check_field_offset(lv, s708c1f2, ABISELECT(1240,916), "S708C1.s708c1f2");
    check_field_offset(lv, s708c1f3, ABISELECT(1272,936), "S708C1.s708c1f3");
    check_field_offset(lv, s708c1f4, ABISELECT(1288,948), "S708C1.s708c1f4");
    check_field_offset(lv, s708c1f5, ABISELECT(1304,960), "S708C1.s708c1f5");
    check_field_offset(lv, s708c1f6, ABISELECT(1320,972), "S708C1.s708c1f6");
    check_field_offset(lv, s708c1f7, ABISELECT(1336,984), "S708C1.s708c1f7");
    check_field_offset(lv, s708c1f8, ABISELECT(1352,996), "S708C1.s708c1f8");
    test_class_info(&lv, &cd_S708C1);
    dp->~S708C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS708C1(Test_S708C1, "S708C1", ABISELECT(1384,1016));

#else // __cplusplus

extern void _ZN6S708C1C1Ev();
extern void _ZN6S708C1D1Ev();
Name_Map name_map_S708C1[] = {
  NSPAIR(_ZN6S708C1C1Ev),
  NSPAIR(_ZN6S708C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S708C5_nt;
extern VTBL_ENTRY _ZTI9S708C5_nt[];
extern  VTBL_ENTRY _ZTV9S708C5_nt[];
extern Class_Descriptor cd_S708C4_nt;
extern VTBL_ENTRY _ZTI9S708C4_nt[];
extern  VTBL_ENTRY _ZTV9S708C4_nt[];
extern Class_Descriptor cd_S708C3_nt;
extern VTBL_ENTRY _ZTI9S708C3_nt[];
extern  VTBL_ENTRY _ZTV9S708C3_nt[];
extern Class_Descriptor cd_S708C2_nt;
extern VTBL_ENTRY _ZTI9S708C2_nt[];
extern  VTBL_ENTRY _ZTV9S708C2_nt[];
static Base_Class bases_S708C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S708C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S708C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S708C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S708C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S708C1[];
extern void _ZN6S708C1D1Ev();
extern void _ZN6S708C1D0Ev();
extern void _ZN9S708C5_nt2v9Ev();
extern void _ZN9S708C5_nt3v10Ev();
extern void _ZN9S708C5_nt3v11Ev();
extern void _ZN9S708C5_nt3v12Ev();
extern void _ZN9S708C5_nt3v13Ev();
extern void _ZN9S708C5_nt3v14Ev();
extern void _ZN9S708C5_nt3v15Ev();
extern void _ZN9S708C5_nt3v16Ev();
extern void _ZN9S708C5_nt3v17Ev();
extern void _ZN9S708C5_nt3v18Ev();
extern void _ZN9S708C5_nt3v19Ev();
extern void _ZN9S708C5_nt3v20Ev();
extern void _ZN9S708C5_nt3v21Ev();
extern void _ZN9S708C5_nt3v22Ev();
extern void _ZN9S708C5_nt3v23Ev();
extern void _ZN9S708C5_nt3v24Ev();
extern void _ZN9S708C5_nt3v25Ev();
extern void _ZN9S708C5_nt3v26Ev();
extern void _ZN9S708C5_nt3v27Ev();
extern void _ZN9S708C5_nt3v28Ev();
extern void _ZN9S708C5_nt3v29Ev();
extern void _ZN9S708C5_nt3v30Ev();
extern void _ZN9S708C5_nt3v31Ev();
extern void _ZN9S708C5_nt3v32Ev();
extern void _ZN9S708C5_nt3v33Ev();
extern void _ZN9S708C5_nt3v34Ev();
extern void _ZN9S708C5_nt3v35Ev();
extern void _ZN9S708C5_nt3v36Ev();
extern void _ZN9S708C5_nt3v37Ev();
extern void _ZN9S708C5_nt3v38Ev();
extern void _ZN9S708C5_nt3v39Ev();
extern void _ZN9S708C5_nt3v40Ev();
extern void _ZN9S708C5_nt3v41Ev();
extern void _ZN9S708C5_nt3v42Ev();
extern void _ZN9S708C5_nt3v43Ev();
extern void _ZN9S708C5_nt3v44Ev();
extern void _ZN9S708C5_nt3v45Ev();
extern void _ZN9S708C5_nt3v46Ev();
extern void _ZN9S708C5_nt3v47Ev();
extern void _ZN9S708C5_nt3v48Ev();
extern void _ZN9S708C5_nt3v49Ev();
extern void _ZN9S708C5_nt3v50Ev();
extern void _ZN9S708C5_nt3v51Ev();
extern void _ZN9S708C5_nt3v52Ev();
extern void _ZN9S708C5_nt3v53Ev();
extern void _ZN9S708C5_nt3v54Ev();
extern void _ZN9S708C5_nt3v55Ev();
extern void _ZN9S708C5_nt3v56Ev();
extern void _ZN9S708C5_nt3v57Ev();
extern void _ZN9S708C5_nt3v58Ev();
extern void _ZN9S708C5_nt3v59Ev();
extern void _ZN9S708C5_nt3v60Ev();
extern void _ZN9S708C5_nt3v61Ev();
extern void _ZN9S708C5_nt3v62Ev();
extern void _ZN9S708C5_nt3v63Ev();
extern void _ZN9S708C5_nt3v64Ev();
extern void _ZN9S708C5_nt3v65Ev();
extern void _ZN9S708C5_nt3v66Ev();
extern void _ZN9S708C5_nt3v67Ev();
extern void _ZN9S708C5_nt3v68Ev();
extern void _ZN9S708C5_nt3v69Ev();
extern void _ZN9S708C5_nt3v70Ev();
extern void _ZN9S708C5_nt3v71Ev();
extern void _ZN9S708C5_nt3v72Ev();
extern void _ZN9S708C4_nt3v73Ev();
extern void _ZN9S708C4_nt3v74Ev();
extern void _ZN9S708C3_nt3v75Ev();
extern void _ZN9S708C3_nt3v76Ev();
extern void _ZN9S708C3_nt3v77Ev();
extern void _ZN9S708C3_nt3v78Ev();
extern void _ZN9S708C3_nt3v79Ev();
extern void _ZN9S708C3_nt3v80Ev();
extern void _ZN9S708C3_nt3v81Ev();
extern void _ZN9S708C3_nt3v82Ev();
extern void _ZN9S708C3_nt3v83Ev();
extern void _ZN9S708C3_nt3v84Ev();
extern void _ZN9S708C3_nt3v85Ev();
extern void _ZN9S708C3_nt3v86Ev();
extern void _ZN9S708C3_nt3v87Ev();
extern void _ZN9S708C3_nt3v88Ev();
extern void _ZN9S708C3_nt3v89Ev();
extern void _ZN9S708C3_nt3v90Ev();
extern void _ZN9S708C3_nt3v91Ev();
extern void _ZN9S708C3_nt3v92Ev();
extern void _ZN9S708C3_nt3v93Ev();
extern void _ZN9S708C3_nt3v94Ev();
extern void _ZN9S708C3_nt3v95Ev();
extern void _ZN9S708C3_nt3v96Ev();
extern void _ZN9S708C3_nt3v97Ev();
extern void _ZN9S708C3_nt3v98Ev();
extern void _ZN9S708C3_nt3v99Ev();
extern void _ZN9S708C3_nt4v100Ev();
extern void _ZN9S708C3_nt4v101Ev();
extern void _ZN9S708C3_nt4v102Ev();
extern void _ZN9S708C3_nt4v103Ev();
extern void _ZN9S708C3_nt4v104Ev();
extern void _ZN9S708C3_nt4v105Ev();
extern void _ZN9S708C3_nt4v106Ev();
extern void _ZN9S708C3_nt4v107Ev();
extern void _ZN9S708C3_nt4v108Ev();
extern void _ZN9S708C3_nt4v109Ev();
extern void _ZN9S708C3_nt4v110Ev();
extern void _ZN9S708C3_nt4v111Ev();
extern void _ZN9S708C3_nt4v112Ev();
extern void _ZN9S708C3_nt4v113Ev();
extern void _ZN9S708C3_nt4v114Ev();
extern void _ZN9S708C3_nt4v115Ev();
extern void _ZN9S708C3_nt4v116Ev();
extern void _ZN9S708C3_nt4v117Ev();
extern void _ZN9S708C3_nt4v118Ev();
extern void _ZN9S708C3_nt4v119Ev();
extern void _ZN9S708C3_nt4v120Ev();
extern void _ZN9S708C3_nt4v121Ev();
extern void _ZN9S708C3_nt4v122Ev();
extern void _ZN9S708C3_nt4v123Ev();
extern void _ZN9S708C3_nt4v124Ev();
extern void _ZN9S708C3_nt4v125Ev();
extern void _ZN9S708C3_nt4v126Ev();
extern void _ZN9S708C3_nt4v127Ev();
extern void _ZN9S708C3_nt4v128Ev();
extern void _ZN9S708C3_nt4v129Ev();
extern void _ZN9S708C3_nt4v130Ev();
extern void _ZN9S708C3_nt4v131Ev();
extern void _ZN9S708C3_nt4v132Ev();
extern void _ZN9S708C3_nt4v133Ev();
extern void _ZN9S708C3_nt4v134Ev();
extern void _ZN9S708C3_nt4v135Ev();
extern void _ZN9S708C3_nt4v136Ev();
extern void _ZN9S708C3_nt4v137Ev();
extern void _ZN9S708C3_nt4v138Ev();
extern void _ZN9S708C3_nt4v139Ev();
extern void _ZN9S708C3_nt4v140Ev();
extern void _ZN9S708C3_nt4v141Ev();
extern void _ZN9S708C3_nt4v142Ev();
extern void _ZN9S708C3_nt4v143Ev();
extern void _ZN9S708C3_nt4v144Ev();
extern void _ZN9S708C3_nt4v145Ev();
extern void _ZN9S708C3_nt4v146Ev();
extern void _ZN9S708C3_nt4v147Ev();
extern void _ZN9S708C3_nt4v148Ev();
extern void _ZN9S708C3_nt4v149Ev();
extern void _ZN9S708C3_nt4v150Ev();
extern void _ZN9S708C2_nt4v151Ev();
extern void _ZN9S708C2_nt4v152Ev();
extern void _ZN9S708C2_nt4v153Ev();
extern void _ZN9S708C2_nt4v154Ev();
extern void _ZN9S708C2_nt4v155Ev();
extern void _ZN9S708C2_nt4v156Ev();
extern void _ZN9S708C2_nt4v157Ev();
extern void _ZN9S708C2_nt4v158Ev();
extern void _ZN9S708C2_nt4v159Ev();
extern void _ZN9S708C2_nt4v160Ev();
extern void _ZN9S708C2_nt4v161Ev();
extern void _ZN9S708C2_nt4v162Ev();
extern void _ZN9S708C2_nt4v163Ev();
extern void _ZN9S708C2_nt4v164Ev();
extern void _ZN9S708C2_nt4v165Ev();
extern void _ZN9S708C2_nt4v166Ev();
extern void _ZN9S708C2_nt4v167Ev();
extern void _ZN9S708C2_nt4v168Ev();
extern void _ZN9S708C2_nt4v169Ev();
extern void _ZN9S708C2_nt4v170Ev();
extern void _ZN9S708C2_nt4v171Ev();
extern void _ZN9S708C2_nt4v172Ev();
extern void _ZN9S708C2_nt4v173Ev();
extern void _ZN9S708C2_nt4v174Ev();
extern void _ZN9S708C2_nt4v175Ev();
extern void _ZN9S708C2_nt4v176Ev();
extern void _ZN9S708C2_nt4v177Ev();
extern void _ZN9S708C2_nt4v178Ev();
extern void _ZN9S708C2_nt4v179Ev();
extern void _ZN9S708C2_nt4v180Ev();
extern void _ZN9S708C2_nt4v181Ev();
extern void _ZN9S708C2_nt4v182Ev();
extern void _ZN9S708C2_nt4v183Ev();
extern void _ZN9S708C2_nt4v184Ev();
extern void _ZN9S708C2_nt4v185Ev();
extern void _ZN9S708C2_nt4v186Ev();
extern void _ZN9S708C2_nt4v187Ev();
extern void _ZN9S708C2_nt4v188Ev();
extern void _ZN9S708C2_nt4v189Ev();
extern void _ZN9S708C2_nt4v190Ev();
extern void _ZN9S708C2_nt4v191Ev();
extern void _ZN9S708C2_nt4v192Ev();
extern void _ZN9S708C2_nt4v193Ev();
extern void _ZN9S708C2_nt4v194Ev();
extern void _ZN9S708C2_nt4v195Ev();
extern void _ZN9S708C2_nt4v196Ev();
extern void _ZN9S708C2_nt4v197Ev();
extern void _ZN9S708C2_nt4v198Ev();
extern void _ZN9S708C2_nt4v199Ev();
extern void _ZN9S708C2_nt4v200Ev();
extern void _ZN9S708C2_nt4v201Ev();
extern void _ZN9S708C2_nt4v202Ev();
extern void _ZN9S708C2_nt4v203Ev();
extern void _ZN9S708C2_nt4v204Ev();
extern void _ZN9S708C2_nt4v205Ev();
extern void _ZN9S708C2_nt4v206Ev();
extern void _ZN9S708C2_nt4v207Ev();
extern void _ZN9S708C2_nt4v208Ev();
extern void _ZN9S708C2_nt4v209Ev();
extern void _ZN9S708C2_nt4v210Ev();
extern void _ZN9S708C2_nt4v211Ev();
extern void _ZN9S708C2_nt4v212Ev();
extern void _ZN9S708C2_nt4v213Ev();
extern void _ZN9S708C2_nt4v214Ev();
extern void _ZN9S708C2_nt4v215Ev();
extern void _ZN9S708C2_nt4v216Ev();
extern void _ZN9S708C2_nt4v217Ev();
extern void _ZN9S708C2_nt4v218Ev();
extern void _ZN9S708C2_nt4v219Ev();
extern void _ZN6S708C12v1Ev();
extern void _ZN6S708C12v2Ev();
extern void _ZN6S708C12v3Ev();
extern void _ZN6S708C12v4Ev();
extern void _ZN6S708C12v5Ev();
extern void _ZN6S708C12v6Ev();
extern void _ZN6S708C12v7Ev();
extern void _ZN6S708C12v8Ev();
static  VTBL_ENTRY vtc_S708C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S708C1[0]),
  (VTBL_ENTRY)&_ZN6S708C1D1Ev,
  (VTBL_ENTRY)&_ZN6S708C1D0Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S708C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S708C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S708C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S708C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S708C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN6S708C12v1Ev,
  (VTBL_ENTRY)&_ZN6S708C12v2Ev,
  (VTBL_ENTRY)&_ZN6S708C12v3Ev,
  (VTBL_ENTRY)&_ZN6S708C12v4Ev,
  (VTBL_ENTRY)&_ZN6S708C12v5Ev,
  (VTBL_ENTRY)&_ZN6S708C12v6Ev,
  (VTBL_ENTRY)&_ZN6S708C12v7Ev,
  (VTBL_ENTRY)&_ZN6S708C12v8Ev,
};
extern VTBL_ENTRY _ZTI6S708C1[];
extern  VTBL_ENTRY _ZTV6S708C1[];
Class_Descriptor cd_S708C1 = {  "S708C1", // class name
  bases_S708C1, 4,
  &(vtc_S708C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1384,1016), // object size
  NSPAIRA(_ZTI6S708C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S708C1),223, //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  S2123C8_nt  {
  void  mf2123c8(); // _ZN10S2123C8_nt8mf2123c8Ev
};
//SIG(-1 S2123C8_nt) C1{ m}


void  S2123C8_nt ::mf2123c8(){}

//skip512 S2123C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S2123C8_nt[];
VTBL_ENTRY *P__ZTI10S2123C8_nt = _ZTI10S2123C8_nt; 
Class_Descriptor cd_S2123C8_nt = {  "S2123C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S2123C8_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  S2123C6_nt  {
  void *s2123c6f0;
  int s2123c6f1;
  ::S708C30_nt s2123c6f2;
  ::S2123C8_nt s2123c6f3;
  void  mf2123c6(); // _ZN10S2123C6_nt8mf2123c6Ev
};
//SIG(-1 S2123C6_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2123C6_nt ::mf2123c6(){}

//skip512 S2123C6_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



//skip512 S2123C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2123C6_nt;
static Base_Class bases_S2123C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S2123C4_nt  {
  void *s2123c4f0;
  int s2123c4f1;
  ::S2123C5_nt s2123c4f2;
  ::S2123C5_nt s2123c4f3;
  int s2123c4f4;
  virtual  ~S2123C4_nt(); // _ZN10S2123C4_ntD1Ev
  virtual void  v2(); // _ZN10S2123C4_nt2v2Ev
  virtual void  v3(); // _ZN10S2123C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2123C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2123C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2123C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2123C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2123C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2123C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2123C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2123C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2123C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2123C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2123C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2123C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2123C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2123C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2123C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2123C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2123C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2123C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2123C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2123C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2123C4_nt3v24Ev
  S2123C4_nt(); // tgen
};
//SIG(-1 S2123C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC2 Fi}


 S2123C4_nt ::~S2123C4_nt(){ note_dtor("S2123C4_nt", this);}
void  S2123C4_nt ::v2(){vfunc_called(this, "_ZN10S2123C4_nt2v2Ev");}
void  S2123C4_nt ::v3(){vfunc_called(this, "_ZN10S2123C4_nt2v3Ev");}
void  S2123C4_nt ::v4(){vfunc_called(this, "_ZN10S2123C4_nt2v4Ev");}
void  S2123C4_nt ::v5(){vfunc_called(this, "_ZN10S2123C4_nt2v5Ev");}
void  S2123C4_nt ::v6(){vfunc_called(this, "_ZN10S2123C4_nt2v6Ev");}
void  S2123C4_nt ::v7(){vfunc_called(this, "_ZN10S2123C4_nt2v7Ev");}
void  S2123C4_nt ::v8(){vfunc_called(this, "_ZN10S2123C4_nt2v8Ev");}
void  S2123C4_nt ::v9(){vfunc_called(this, "_ZN10S2123C4_nt2v9Ev");}
void  S2123C4_nt ::v10(){vfunc_called(this, "_ZN10S2123C4_nt3v10Ev");}
void  S2123C4_nt ::v11(){vfunc_called(this, "_ZN10S2123C4_nt3v11Ev");}
void  S2123C4_nt ::v12(){vfunc_called(this, "_ZN10S2123C4_nt3v12Ev");}
void  S2123C4_nt ::v13(){vfunc_called(this, "_ZN10S2123C4_nt3v13Ev");}
void  S2123C4_nt ::v14(){vfunc_called(this, "_ZN10S2123C4_nt3v14Ev");}
void  S2123C4_nt ::v15(){vfunc_called(this, "_ZN10S2123C4_nt3v15Ev");}
void  S2123C4_nt ::v16(){vfunc_called(this, "_ZN10S2123C4_nt3v16Ev");}
void  S2123C4_nt ::v17(){vfunc_called(this, "_ZN10S2123C4_nt3v17Ev");}
void  S2123C4_nt ::v18(){vfunc_called(this, "_ZN10S2123C4_nt3v18Ev");}
void  S2123C4_nt ::v19(){vfunc_called(this, "_ZN10S2123C4_nt3v19Ev");}
void  S2123C4_nt ::v20(){vfunc_called(this, "_ZN10S2123C4_nt3v20Ev");}
void  S2123C4_nt ::v21(){vfunc_called(this, "_ZN10S2123C4_nt3v21Ev");}
void  S2123C4_nt ::v22(){vfunc_called(this, "_ZN10S2123C4_nt3v22Ev");}
void  S2123C4_nt ::v23(){vfunc_called(this, "_ZN10S2123C4_nt3v23Ev");}
void  S2123C4_nt ::v24(){vfunc_called(this, "_ZN10S2123C4_nt3v24Ev");}
S2123C4_nt ::S2123C4_nt(){ note_ctor("S2123C4_nt", this);} // tgen

//skip512 S2123C4_nt

#else // __cplusplus

extern void _ZN10S2123C4_ntC1Ev();
extern void _ZN10S2123C4_ntD1Ev();
Name_Map name_map_S2123C4_nt[] = {
  NSPAIR(_ZN10S2123C4_ntC1Ev),
  NSPAIR(_ZN10S2123C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2123C4_nt[];
extern void _ZN10S2123C4_ntD1Ev();
extern void _ZN10S2123C4_ntD0Ev();
extern void _ZN10S2123C4_nt2v2Ev();
extern void _ZN10S2123C4_nt2v3Ev();
extern void _ZN10S2123C4_nt2v4Ev();
extern void _ZN10S2123C4_nt2v5Ev();
extern void _ZN10S2123C4_nt2v6Ev();
extern void _ZN10S2123C4_nt2v7Ev();
extern void _ZN10S2123C4_nt2v8Ev();
extern void _ZN10S2123C4_nt2v9Ev();
extern void _ZN10S2123C4_nt3v10Ev();
extern void _ZN10S2123C4_nt3v11Ev();
extern void _ZN10S2123C4_nt3v12Ev();
extern void _ZN10S2123C4_nt3v13Ev();
extern void _ZN10S2123C4_nt3v14Ev();
extern void _ZN10S2123C4_nt3v15Ev();
extern void _ZN10S2123C4_nt3v16Ev();
extern void _ZN10S2123C4_nt3v17Ev();
extern void _ZN10S2123C4_nt3v18Ev();
extern void _ZN10S2123C4_nt3v19Ev();
extern void _ZN10S2123C4_nt3v20Ev();
extern void _ZN10S2123C4_nt3v21Ev();
extern void _ZN10S2123C4_nt3v22Ev();
extern void _ZN10S2123C4_nt3v23Ev();
extern void _ZN10S2123C4_nt3v24Ev();
static  VTBL_ENTRY vtc_S2123C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2123C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2123C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI10S2123C4_nt[];
VTBL_ENTRY *P__ZTI10S2123C4_nt = _ZTI10S2123C4_nt; 
extern  VTBL_ENTRY _ZTV10S2123C4_nt[];
Class_Descriptor cd_S2123C4_nt = {  "S2123C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2123C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2123C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2123C4_nt),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C14_nt  {
  __tsi64 s2123c14f0[2];
  void  mf2123c14(); // _ZN11S2123C14_nt9mf2123c14Ev
};
//SIG(-1 S2123C14_nt) C1{ m FL[2]}


void  S2123C14_nt ::mf2123c14(){}

//skip512 S2123C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C13_nt  {
  ::S2123C14_nt s2123c13f0;
  void  mf2123c13(); // _ZN11S2123C13_nt9mf2123c13Ev
};
//SIG(-1 S2123C13_nt) C1{ m FC2{ m FL[2]}}


void  S2123C13_nt ::mf2123c13(){}

//skip512 S2123C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C17_nt  {
  ::S2123C13_nt s2123c17f0;
  void  mf2123c17(); // _ZN11S2123C17_nt9mf2123c17Ev
};
//SIG(-1 S2123C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2123C17_nt ::mf2123c17(){}

//skip512 S2123C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C18_nt  {
  ::S2123C13_nt s2123c18f0;
  ::S2123C13_nt s2123c18f1;
  ::S2123C13_nt s2123c18f2;
  ::S2123C13_nt s2123c18f3;
  void  mf2123c18(); // _ZN11S2123C18_nt9mf2123c18Ev
};
//SIG(-1 S2123C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2123C18_nt ::mf2123c18(){}

//skip512 S2123C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C20_nt  {
  void *s2123c20f0;
  int s2123c20f1;
  ::S2123C8_nt s2123c20f2;
  void  mf2123c20(); // _ZN11S2123C20_nt9mf2123c20Ev
};
//SIG(-1 S2123C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2123C20_nt ::mf2123c20(){}

//skip512 S2123C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C19_nt  {
  ::S2123C20_nt s2123c19f0;
  int s2123c19f1;
  void  mf2123c19(); // _ZN11S2123C19_nt9mf2123c19Ev
};
//SIG(-1 S2123C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2123C19_nt ::mf2123c19(){}

//skip512 S2123C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C23  {
  void  mf2123c23(); // _ZN8S2123C239mf2123c23Ev
};
//SIG(-1 S2123C23) C1{ m}


void  S2123C23 ::mf2123c23(){}

static void Test_S2123C23()
{
  {
    init_simple_test("S2123C23");
    S2123C23 lv;
    check2(sizeof(lv), 1, "sizeof(S2123C23)");
    check2(__alignof__(lv), 1, "__alignof__(S2123C23)");
  }
}
static Arrange_To_Call_Me vS2123C23(Test_S2123C23, "S2123C23", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2123C23[];
VTBL_ENTRY *P__ZTI8S2123C23 = _ZTI8S2123C23; 
Class_Descriptor cd_S2123C23 = {  "S2123C23", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2123C23),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  S2123C22  {
  void *s2123c22f0;
  int s2123c22f1;
  ::S2123C23 s2123c22f2;
  ::S2123C23 s2123c22f3;
  void  mf2123c22(); // _ZN8S2123C229mf2123c22Ev
};
//SIG(-1 S2123C22) C1{ m Fp Fi FC2{ m} FC2}


void  S2123C22 ::mf2123c22(){}

static void Test_S2123C22()
{
  {
    init_simple_test("S2123C22");
    S2123C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2123C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2123C22)");
    check_field_offset(lv, s2123c22f0, 0, "S2123C22.s2123c22f0");
    check_field_offset(lv, s2123c22f1, ABISELECT(8,4), "S2123C22.s2123c22f1");
    check_field_offset(lv, s2123c22f2, ABISELECT(12,8), "S2123C22.s2123c22f2");
    check_field_offset(lv, s2123c22f3, ABISELECT(13,9), "S2123C22.s2123c22f3");
  }
}
static Arrange_To_Call_Me vS2123C22(Test_S2123C22, "S2123C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C27  {
  void  mf2123c27(); // _ZN8S2123C279mf2123c27Ev
};
//SIG(-1 S2123C27) C1{ m}


void  S2123C27 ::mf2123c27(){}

static void Test_S2123C27()
{
  {
    init_simple_test("S2123C27");
    S2123C27 lv;
    check2(sizeof(lv), 1, "sizeof(S2123C27)");
    check2(__alignof__(lv), 1, "__alignof__(S2123C27)");
  }
}
static Arrange_To_Call_Me vS2123C27(Test_S2123C27, "S2123C27", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2123C27[];
VTBL_ENTRY *P__ZTI8S2123C27 = _ZTI8S2123C27; 
Class_Descriptor cd_S2123C27 = {  "S2123C27", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2123C27),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  S2123C26  {
  void *s2123c26f0;
  int s2123c26f1;
  ::S2123C27 s2123c26f2;
  ::S2123C27 s2123c26f3;
  void  mf2123c26(); // _ZN8S2123C269mf2123c26Ev
};
//SIG(-1 S2123C26) C1{ m Fp Fi FC2{ m} FC2}


void  S2123C26 ::mf2123c26(){}

static void Test_S2123C26()
{
  {
    init_simple_test("S2123C26");
    S2123C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2123C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2123C26)");
    check_field_offset(lv, s2123c26f0, 0, "S2123C26.s2123c26f0");
    check_field_offset(lv, s2123c26f1, ABISELECT(8,4), "S2123C26.s2123c26f1");
    check_field_offset(lv, s2123c26f2, ABISELECT(12,8), "S2123C26.s2123c26f2");
    check_field_offset(lv, s2123c26f3, ABISELECT(13,9), "S2123C26.s2123c26f3");
  }
}
static Arrange_To_Call_Me vS2123C26(Test_S2123C26, "S2123C26", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S2123C25()
{
  extern Class_Descriptor cd_S2123C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2123C25, buf);
    S2123C25 &lv = *(new (buf) S2123C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2123C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2123C25)");
    check_base_class_offset(lv, (S2123C26*), 0, "S2123C25");
    test_class_info(&lv, &cd_S2123C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2123C25(Test_S2123C25, "S2123C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2123C26;
static Base_Class bases_S2123C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2123C25 = {  "S2123C25", // class name
  bases_S2123C25, 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  S2123C30  {
  void  mf2123c30(); // _ZN8S2123C309mf2123c30Ev
};
//SIG(-1 S2123C30) C1{ m}


void  S2123C30 ::mf2123c30(){}

static void Test_S2123C30()
{
  {
    init_simple_test("S2123C30");
    S2123C30 lv;
    check2(sizeof(lv), 1, "sizeof(S2123C30)");
    check2(__alignof__(lv), 1, "__alignof__(S2123C30)");
  }
}
static Arrange_To_Call_Me vS2123C30(Test_S2123C30, "S2123C30", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2123C30[];
VTBL_ENTRY *P__ZTI8S2123C30 = _ZTI8S2123C30; 
Class_Descriptor cd_S2123C30 = {  "S2123C30", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2123C30),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  S2123C29_nt  {
  void *s2123c29f0;
  int s2123c29f1[2];
  ::S2123C30 s2123c29f2;
  void  mf2123c29(); // _ZN11S2123C29_nt9mf2123c29Ev
};
//SIG(-1 S2123C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2123C29_nt ::mf2123c29(){}

//skip512 S2123C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C37  {
  void *s2123c37f0;
  int s2123c37f1[2];
  ::S2123C30 s2123c37f2;
  void  mf2123c37(); // _ZN8S2123C379mf2123c37Ev
};
//SIG(-1 S2123C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2123C37 ::mf2123c37(){}

static void Test_S2123C37()
{
  {
    init_simple_test("S2123C37");
    S2123C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2123C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2123C37)");
    check_field_offset(lv, s2123c37f0, 0, "S2123C37.s2123c37f0");
    check_field_offset(lv, s2123c37f1, ABISELECT(8,4), "S2123C37.s2123c37f1");
    check_field_offset(lv, s2123c37f2, ABISELECT(16,12), "S2123C37.s2123c37f2");
  }
}
static Arrange_To_Call_Me vS2123C37(Test_S2123C37, "S2123C37", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C3_nt  : S2123C4_nt {
  ::S2123C13_nt s2123c3f0;
  ::S2123C13_nt s2123c3f1;
  ::S2123C13_nt s2123c3f2;
  ::S2123C13_nt s2123c3f3;
  ::S2123C17_nt s2123c3f4;
  ::S2123C18_nt s2123c3f5;
  ::S2123C18_nt s2123c3f6;
  ::S2123C13_nt s2123c3f7;
  ::S2123C13_nt s2123c3f8;
  ::S2123C13_nt s2123c3f9;
  void *s2123c3f10;
  ::S2123C17_nt s2123c3f11;
  ::S2123C19_nt s2123c3f12;
  int s2123c3f13;
  void *s2123c3f14[7];
  ::S2123C22 s2123c3f15;
  int s2123c3f16:8;
  int s2123c3f17:8;
  int s2123c3f18:16;
  int s2123c3f19:16;
  int s2123c3f20:8;
  int s2123c3f21:8;
  int s2123c3f22:8;
  int s2123c3f23:32;
  int s2123c3f24:8;
  int s2123c3f25:4;
  int s2123c3f26:4;
  int s2123c3f27:4;
  int s2123c3f28:4;
  int s2123c3f29:4;
  int s2123c3f30:4;
  int s2123c3f31:4;
  int s2123c3f32:4;
  int s2123c3f33:4;
  int s2123c3f34:4;
  unsigned char s2123c3f35:1;
  unsigned char s2123c3f36:1;
  unsigned char s2123c3f37:1;
  unsigned char s2123c3f38:1;
  unsigned char s2123c3f39:1;
  unsigned char s2123c3f40:1;
  unsigned char s2123c3f41:1;
  unsigned char s2123c3f42:1;
  unsigned char s2123c3f43:1;
  unsigned char s2123c3f44:1;
  unsigned char s2123c3f45:1;
  unsigned char s2123c3f46:1;
  unsigned char s2123c3f47:1;
  unsigned char s2123c3f48:1;
  unsigned char s2123c3f49:1;
  unsigned char s2123c3f50:1;
  unsigned char s2123c3f51:1;
  unsigned char s2123c3f52:1;
  unsigned char s2123c3f53:1;
  unsigned char s2123c3f54:1;
  unsigned char s2123c3f55:1;
  unsigned char s2123c3f56:1;
  unsigned char s2123c3f57:1;
  unsigned char s2123c3f58:1;
  unsigned char s2123c3f59:1;
  unsigned char s2123c3f60:1;
  unsigned char s2123c3f61:1;
  unsigned char s2123c3f62:1;
  unsigned char s2123c3f63:1;
  unsigned char s2123c3f64:1;
  unsigned char s2123c3f65:1;
  unsigned char s2123c3f66:1;
  unsigned char s2123c3f67:1;
  unsigned char s2123c3f68:1;
  unsigned char s2123c3f69:1;
  unsigned char s2123c3f70:1;
  unsigned char s2123c3f71:1;
  unsigned char s2123c3f72:1;
  unsigned char s2123c3f73:1;
  unsigned char s2123c3f74:1;
  unsigned char s2123c3f75:1;
  int s2123c3f76[7];
  void *s2123c3f77[6];
  int s2123c3f78:8;
  int s2123c3f79:8;
  int s2123c3f80:8;
  int s2123c3f81:8;
  int s2123c3f82:8;
  int s2123c3f83:8;
  ::S2123C25 s2123c3f84;
  void *s2123c3f85[4];
  int s2123c3f86:8;
  int s2123c3f87:8;
  int s2123c3f88:8;
  int s2123c3f89:8;
  int s2123c3f90:8;
  int s2123c3f91:16;
  int s2123c3f92:16;
  int s2123c3f93:16;
  int s2123c3f94:4;
  int s2123c3f95:4;
  int s2123c3f96:4;
  int s2123c3f97:4;
  int s2123c3f98:4;
  int s2123c3f99:4;
  int s2123c3f100:4;
  int s2123c3f101:4;
  int s2123c3f102:4;
  int s2123c3f103:4;
  int s2123c3f104:4;
  int s2123c3f105:4;
  int s2123c3f106:8;
  int s2123c3f107:8;
  int s2123c3f108:8;
  void *s2123c3f109[7];
  ::S2123C29_nt s2123c3f110;
  void *s2123c3f111[2];
  int s2123c3f112:16;
  int s2123c3f113:16;
  ::S2123C25 s2123c3f114;
  ::S2123C29_nt s2123c3f115;
  ::S2123C37 s2123c3f116;
  void *s2123c3f117[2];
  int s2123c3f118:24;
  int s2123c3f119:8;
  void *s2123c3f120;
  virtual  ~S2123C3_nt(); // _ZN10S2123C3_ntD1Ev
  virtual void  v25(); // _ZN10S2123C3_nt3v25Ev
  virtual void  v26(); // _ZN10S2123C3_nt3v26Ev
  virtual void  v27(); // _ZN10S2123C3_nt3v27Ev
  virtual void  v28(); // _ZN10S2123C3_nt3v28Ev
  virtual void  v29(); // _ZN10S2123C3_nt3v29Ev
  virtual void  v30(); // _ZN10S2123C3_nt3v30Ev
  virtual void  v31(); // _ZN10S2123C3_nt3v31Ev
  virtual void  v32(); // _ZN10S2123C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2123C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2123C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2123C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2123C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2123C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2123C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2123C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2123C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2123C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2123C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2123C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2123C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2123C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2123C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2123C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2123C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2123C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2123C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2123C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2123C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2123C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2123C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2123C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2123C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2123C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2123C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2123C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2123C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2123C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2123C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2123C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2123C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2123C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2123C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2123C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2123C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2123C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2123C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2123C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2123C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2123C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2123C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2123C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2123C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2123C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2123C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2123C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2123C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2123C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2123C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2123C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2123C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2123C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2123C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2123C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2123C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2123C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2123C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2123C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2123C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2123C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2123C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2123C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2123C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2123C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2123C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2123C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2123C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2123C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2123C3_nt4v102Ev
  S2123C3_nt(); // tgen
};
//SIG(-1 S2123C3_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC6} Fi} Fi Fp[7] FC13{ m Fp Fi FC14{ m} FC14} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC17{ m} FC17}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC19{ m}} Fp[2] Fi:16 Fi:16 FC15 FC18 FC20{ m Fp Fi[2] FC19} Fp[2] Fi:24 Fi:8 Fp}


 S2123C3_nt ::~S2123C3_nt(){ note_dtor("S2123C3_nt", this);}
void  S2123C3_nt ::v25(){vfunc_called(this, "_ZN10S2123C3_nt3v25Ev");}
void  S2123C3_nt ::v26(){vfunc_called(this, "_ZN10S2123C3_nt3v26Ev");}
void  S2123C3_nt ::v27(){vfunc_called(this, "_ZN10S2123C3_nt3v27Ev");}
void  S2123C3_nt ::v28(){vfunc_called(this, "_ZN10S2123C3_nt3v28Ev");}
void  S2123C3_nt ::v29(){vfunc_called(this, "_ZN10S2123C3_nt3v29Ev");}
void  S2123C3_nt ::v30(){vfunc_called(this, "_ZN10S2123C3_nt3v30Ev");}
void  S2123C3_nt ::v31(){vfunc_called(this, "_ZN10S2123C3_nt3v31Ev");}
void  S2123C3_nt ::v32(){vfunc_called(this, "_ZN10S2123C3_nt3v32Ev");}
void  S2123C3_nt ::v33(){vfunc_called(this, "_ZN10S2123C3_nt3v33Ev");}
void  S2123C3_nt ::v34(){vfunc_called(this, "_ZN10S2123C3_nt3v34Ev");}
void  S2123C3_nt ::v35(){vfunc_called(this, "_ZN10S2123C3_nt3v35Ev");}
void  S2123C3_nt ::v36(){vfunc_called(this, "_ZN10S2123C3_nt3v36Ev");}
void  S2123C3_nt ::v37(){vfunc_called(this, "_ZN10S2123C3_nt3v37Ev");}
void  S2123C3_nt ::v38(){vfunc_called(this, "_ZN10S2123C3_nt3v38Ev");}
void  S2123C3_nt ::v39(){vfunc_called(this, "_ZN10S2123C3_nt3v39Ev");}
void  S2123C3_nt ::v40(){vfunc_called(this, "_ZN10S2123C3_nt3v40Ev");}
void  S2123C3_nt ::v41(){vfunc_called(this, "_ZN10S2123C3_nt3v41Ev");}
void  S2123C3_nt ::v42(){vfunc_called(this, "_ZN10S2123C3_nt3v42Ev");}
void  S2123C3_nt ::v43(){vfunc_called(this, "_ZN10S2123C3_nt3v43Ev");}
void  S2123C3_nt ::v44(){vfunc_called(this, "_ZN10S2123C3_nt3v44Ev");}
void  S2123C3_nt ::v45(){vfunc_called(this, "_ZN10S2123C3_nt3v45Ev");}
void  S2123C3_nt ::v46(){vfunc_called(this, "_ZN10S2123C3_nt3v46Ev");}
void  S2123C3_nt ::v47(){vfunc_called(this, "_ZN10S2123C3_nt3v47Ev");}
void  S2123C3_nt ::v48(){vfunc_called(this, "_ZN10S2123C3_nt3v48Ev");}
void  S2123C3_nt ::v49(){vfunc_called(this, "_ZN10S2123C3_nt3v49Ev");}
void  S2123C3_nt ::v50(){vfunc_called(this, "_ZN10S2123C3_nt3v50Ev");}
void  S2123C3_nt ::v51(){vfunc_called(this, "_ZN10S2123C3_nt3v51Ev");}
void  S2123C3_nt ::v52(){vfunc_called(this, "_ZN10S2123C3_nt3v52Ev");}
void  S2123C3_nt ::v53(){vfunc_called(this, "_ZN10S2123C3_nt3v53Ev");}
void  S2123C3_nt ::v54(){vfunc_called(this, "_ZN10S2123C3_nt3v54Ev");}
void  S2123C3_nt ::v55(){vfunc_called(this, "_ZN10S2123C3_nt3v55Ev");}
void  S2123C3_nt ::v56(){vfunc_called(this, "_ZN10S2123C3_nt3v56Ev");}
void  S2123C3_nt ::v57(){vfunc_called(this, "_ZN10S2123C3_nt3v57Ev");}
void  S2123C3_nt ::v58(){vfunc_called(this, "_ZN10S2123C3_nt3v58Ev");}
void  S2123C3_nt ::v59(){vfunc_called(this, "_ZN10S2123C3_nt3v59Ev");}
void  S2123C3_nt ::v60(){vfunc_called(this, "_ZN10S2123C3_nt3v60Ev");}
void  S2123C3_nt ::v61(){vfunc_called(this, "_ZN10S2123C3_nt3v61Ev");}
void  S2123C3_nt ::v62(){vfunc_called(this, "_ZN10S2123C3_nt3v62Ev");}
void  S2123C3_nt ::v63(){vfunc_called(this, "_ZN10S2123C3_nt3v63Ev");}
void  S2123C3_nt ::v64(){vfunc_called(this, "_ZN10S2123C3_nt3v64Ev");}
void  S2123C3_nt ::v65(){vfunc_called(this, "_ZN10S2123C3_nt3v65Ev");}
void  S2123C3_nt ::v66(){vfunc_called(this, "_ZN10S2123C3_nt3v66Ev");}
void  S2123C3_nt ::v67(){vfunc_called(this, "_ZN10S2123C3_nt3v67Ev");}
void  S2123C3_nt ::v68(){vfunc_called(this, "_ZN10S2123C3_nt3v68Ev");}
void  S2123C3_nt ::v69(){vfunc_called(this, "_ZN10S2123C3_nt3v69Ev");}
void  S2123C3_nt ::v70(){vfunc_called(this, "_ZN10S2123C3_nt3v70Ev");}
void  S2123C3_nt ::v71(){vfunc_called(this, "_ZN10S2123C3_nt3v71Ev");}
void  S2123C3_nt ::v72(){vfunc_called(this, "_ZN10S2123C3_nt3v72Ev");}
void  S2123C3_nt ::v73(){vfunc_called(this, "_ZN10S2123C3_nt3v73Ev");}
void  S2123C3_nt ::v74(){vfunc_called(this, "_ZN10S2123C3_nt3v74Ev");}
void  S2123C3_nt ::v75(){vfunc_called(this, "_ZN10S2123C3_nt3v75Ev");}
void  S2123C3_nt ::v76(){vfunc_called(this, "_ZN10S2123C3_nt3v76Ev");}
void  S2123C3_nt ::v77(){vfunc_called(this, "_ZN10S2123C3_nt3v77Ev");}
void  S2123C3_nt ::v78(){vfunc_called(this, "_ZN10S2123C3_nt3v78Ev");}
void  S2123C3_nt ::v79(){vfunc_called(this, "_ZN10S2123C3_nt3v79Ev");}
void  S2123C3_nt ::v80(){vfunc_called(this, "_ZN10S2123C3_nt3v80Ev");}
void  S2123C3_nt ::v81(){vfunc_called(this, "_ZN10S2123C3_nt3v81Ev");}
void  S2123C3_nt ::v82(){vfunc_called(this, "_ZN10S2123C3_nt3v82Ev");}
void  S2123C3_nt ::v83(){vfunc_called(this, "_ZN10S2123C3_nt3v83Ev");}
void  S2123C3_nt ::v84(){vfunc_called(this, "_ZN10S2123C3_nt3v84Ev");}
void  S2123C3_nt ::v85(){vfunc_called(this, "_ZN10S2123C3_nt3v85Ev");}
void  S2123C3_nt ::v86(){vfunc_called(this, "_ZN10S2123C3_nt3v86Ev");}
void  S2123C3_nt ::v87(){vfunc_called(this, "_ZN10S2123C3_nt3v87Ev");}
void  S2123C3_nt ::v88(){vfunc_called(this, "_ZN10S2123C3_nt3v88Ev");}
void  S2123C3_nt ::v89(){vfunc_called(this, "_ZN10S2123C3_nt3v89Ev");}
void  S2123C3_nt ::v90(){vfunc_called(this, "_ZN10S2123C3_nt3v90Ev");}
void  S2123C3_nt ::v91(){vfunc_called(this, "_ZN10S2123C3_nt3v91Ev");}
void  S2123C3_nt ::v92(){vfunc_called(this, "_ZN10S2123C3_nt3v92Ev");}
void  S2123C3_nt ::v93(){vfunc_called(this, "_ZN10S2123C3_nt3v93Ev");}
void  S2123C3_nt ::v94(){vfunc_called(this, "_ZN10S2123C3_nt3v94Ev");}
void  S2123C3_nt ::v95(){vfunc_called(this, "_ZN10S2123C3_nt3v95Ev");}
void  S2123C3_nt ::v96(){vfunc_called(this, "_ZN10S2123C3_nt3v96Ev");}
void  S2123C3_nt ::v97(){vfunc_called(this, "_ZN10S2123C3_nt3v97Ev");}
void  S2123C3_nt ::v98(){vfunc_called(this, "_ZN10S2123C3_nt3v98Ev");}
void  S2123C3_nt ::v99(){vfunc_called(this, "_ZN10S2123C3_nt3v99Ev");}
void  S2123C3_nt ::v100(){vfunc_called(this, "_ZN10S2123C3_nt4v100Ev");}
void  S2123C3_nt ::v101(){vfunc_called(this, "_ZN10S2123C3_nt4v101Ev");}
void  S2123C3_nt ::v102(){vfunc_called(this, "_ZN10S2123C3_nt4v102Ev");}
S2123C3_nt ::S2123C3_nt(){ note_ctor("S2123C3_nt", this);} // tgen

//skip512 S2123C3_nt

#else // __cplusplus

extern void _ZN10S2123C3_ntC1Ev();
extern void _ZN10S2123C3_ntD1Ev();
Name_Map name_map_S2123C3_nt[] = {
  NSPAIR(_ZN10S2123C3_ntC1Ev),
  NSPAIR(_ZN10S2123C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C4_nt;
extern VTBL_ENTRY _ZTI10S2123C4_nt[];
extern  VTBL_ENTRY _ZTV10S2123C4_nt[];
static Base_Class bases_S2123C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2123C3_nt[];
extern void _ZN10S2123C3_ntD1Ev();
extern void _ZN10S2123C3_ntD0Ev();
extern void _ZN10S2123C4_nt2v2Ev();
extern void _ZN10S2123C4_nt2v3Ev();
extern void _ZN10S2123C4_nt2v4Ev();
extern void _ZN10S2123C4_nt2v5Ev();
extern void _ZN10S2123C4_nt2v6Ev();
extern void _ZN10S2123C4_nt2v7Ev();
extern void _ZN10S2123C4_nt2v8Ev();
extern void _ZN10S2123C4_nt2v9Ev();
extern void _ZN10S2123C4_nt3v10Ev();
extern void _ZN10S2123C4_nt3v11Ev();
extern void _ZN10S2123C4_nt3v12Ev();
extern void _ZN10S2123C4_nt3v13Ev();
extern void _ZN10S2123C4_nt3v14Ev();
extern void _ZN10S2123C4_nt3v15Ev();
extern void _ZN10S2123C4_nt3v16Ev();
extern void _ZN10S2123C4_nt3v17Ev();
extern void _ZN10S2123C4_nt3v18Ev();
extern void _ZN10S2123C4_nt3v19Ev();
extern void _ZN10S2123C4_nt3v20Ev();
extern void _ZN10S2123C4_nt3v21Ev();
extern void _ZN10S2123C4_nt3v22Ev();
extern void _ZN10S2123C4_nt3v23Ev();
extern void _ZN10S2123C4_nt3v24Ev();
extern void _ZN10S2123C3_nt3v25Ev();
extern void _ZN10S2123C3_nt3v26Ev();
extern void _ZN10S2123C3_nt3v27Ev();
extern void _ZN10S2123C3_nt3v28Ev();
extern void _ZN10S2123C3_nt3v29Ev();
extern void _ZN10S2123C3_nt3v30Ev();
extern void _ZN10S2123C3_nt3v31Ev();
extern void _ZN10S2123C3_nt3v32Ev();
extern void _ZN10S2123C3_nt3v33Ev();
extern void _ZN10S2123C3_nt3v34Ev();
extern void _ZN10S2123C3_nt3v35Ev();
extern void _ZN10S2123C3_nt3v36Ev();
extern void _ZN10S2123C3_nt3v37Ev();
extern void _ZN10S2123C3_nt3v38Ev();
extern void _ZN10S2123C3_nt3v39Ev();
extern void _ZN10S2123C3_nt3v40Ev();
extern void _ZN10S2123C3_nt3v41Ev();
extern void _ZN10S2123C3_nt3v42Ev();
extern void _ZN10S2123C3_nt3v43Ev();
extern void _ZN10S2123C3_nt3v44Ev();
extern void _ZN10S2123C3_nt3v45Ev();
extern void _ZN10S2123C3_nt3v46Ev();
extern void _ZN10S2123C3_nt3v47Ev();
extern void _ZN10S2123C3_nt3v48Ev();
extern void _ZN10S2123C3_nt3v49Ev();
extern void _ZN10S2123C3_nt3v50Ev();
extern void _ZN10S2123C3_nt3v51Ev();
extern void _ZN10S2123C3_nt3v52Ev();
extern void _ZN10S2123C3_nt3v53Ev();
extern void _ZN10S2123C3_nt3v54Ev();
extern void _ZN10S2123C3_nt3v55Ev();
extern void _ZN10S2123C3_nt3v56Ev();
extern void _ZN10S2123C3_nt3v57Ev();
extern void _ZN10S2123C3_nt3v58Ev();
extern void _ZN10S2123C3_nt3v59Ev();
extern void _ZN10S2123C3_nt3v60Ev();
extern void _ZN10S2123C3_nt3v61Ev();
extern void _ZN10S2123C3_nt3v62Ev();
extern void _ZN10S2123C3_nt3v63Ev();
extern void _ZN10S2123C3_nt3v64Ev();
extern void _ZN10S2123C3_nt3v65Ev();
extern void _ZN10S2123C3_nt3v66Ev();
extern void _ZN10S2123C3_nt3v67Ev();
extern void _ZN10S2123C3_nt3v68Ev();
extern void _ZN10S2123C3_nt3v69Ev();
extern void _ZN10S2123C3_nt3v70Ev();
extern void _ZN10S2123C3_nt3v71Ev();
extern void _ZN10S2123C3_nt3v72Ev();
extern void _ZN10S2123C3_nt3v73Ev();
extern void _ZN10S2123C3_nt3v74Ev();
extern void _ZN10S2123C3_nt3v75Ev();
extern void _ZN10S2123C3_nt3v76Ev();
extern void _ZN10S2123C3_nt3v77Ev();
extern void _ZN10S2123C3_nt3v78Ev();
extern void _ZN10S2123C3_nt3v79Ev();
extern void _ZN10S2123C3_nt3v80Ev();
extern void _ZN10S2123C3_nt3v81Ev();
extern void _ZN10S2123C3_nt3v82Ev();
extern void _ZN10S2123C3_nt3v83Ev();
extern void _ZN10S2123C3_nt3v84Ev();
extern void _ZN10S2123C3_nt3v85Ev();
extern void _ZN10S2123C3_nt3v86Ev();
extern void _ZN10S2123C3_nt3v87Ev();
extern void _ZN10S2123C3_nt3v88Ev();
extern void _ZN10S2123C3_nt3v89Ev();
extern void _ZN10S2123C3_nt3v90Ev();
extern void _ZN10S2123C3_nt3v91Ev();
extern void _ZN10S2123C3_nt3v92Ev();
extern void _ZN10S2123C3_nt3v93Ev();
extern void _ZN10S2123C3_nt3v94Ev();
extern void _ZN10S2123C3_nt3v95Ev();
extern void _ZN10S2123C3_nt3v96Ev();
extern void _ZN10S2123C3_nt3v97Ev();
extern void _ZN10S2123C3_nt3v98Ev();
extern void _ZN10S2123C3_nt3v99Ev();
extern void _ZN10S2123C3_nt4v100Ev();
extern void _ZN10S2123C3_nt4v101Ev();
extern void _ZN10S2123C3_nt4v102Ev();
static  VTBL_ENTRY vtc_S2123C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2123C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2123C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v102Ev,
};
extern VTBL_ENTRY _ZTI10S2123C3_nt[];
VTBL_ENTRY *P__ZTI10S2123C3_nt = _ZTI10S2123C3_nt; 
extern  VTBL_ENTRY _ZTV10S2123C3_nt[];
Class_Descriptor cd_S2123C3_nt = {  "S2123C3_nt", // class name
  bases_S2123C3_nt, 1,
  &(vtc_S2123C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2123C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2123C3_nt),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2123C2  : S2123C3_nt {
  virtual  ~S2123C2(); // _ZN7S2123C2D1Ev
  virtual void  v103(); // _ZN7S2123C24v103Ev
  virtual void  v104(); // _ZN7S2123C24v104Ev
  virtual void  v105(); // _ZN7S2123C24v105Ev
  virtual void  v106(); // _ZN7S2123C24v106Ev
  virtual void  v107(); // _ZN7S2123C24v107Ev
  virtual void  v108(); // _ZN7S2123C24v108Ev
  virtual void  v109(); // _ZN7S2123C24v109Ev
  virtual void  v110(); // _ZN7S2123C24v110Ev
  S2123C2(); // tgen
};
//SIG(-1 S2123C2) C1{ BC2{ BC3{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC4 Fi} 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 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 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC7} Fi} Fi Fp[7] FC14{ m Fp Fi FC15{ m} FC15} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC18{ m} FC18}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:16 Fi:16 FC16 FC19 FC21{ m Fp Fi[2] FC20} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S2123C2 ::~S2123C2(){ note_dtor("S2123C2", this);}
void  S2123C2 ::v103(){vfunc_called(this, "_ZN7S2123C24v103Ev");}
void  S2123C2 ::v104(){vfunc_called(this, "_ZN7S2123C24v104Ev");}
void  S2123C2 ::v105(){vfunc_called(this, "_ZN7S2123C24v105Ev");}
void  S2123C2 ::v106(){vfunc_called(this, "_ZN7S2123C24v106Ev");}
void  S2123C2 ::v107(){vfunc_called(this, "_ZN7S2123C24v107Ev");}
void  S2123C2 ::v108(){vfunc_called(this, "_ZN7S2123C24v108Ev");}
void  S2123C2 ::v109(){vfunc_called(this, "_ZN7S2123C24v109Ev");}
void  S2123C2 ::v110(){vfunc_called(this, "_ZN7S2123C24v110Ev");}
S2123C2 ::S2123C2(){ note_ctor("S2123C2", this);} // tgen

static void Test_S2123C2()
{
  extern Class_Descriptor cd_S2123C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(105,159)];
    init_test(&cd_S2123C2, buf);
    S2123C2 *dp, &lv = *(dp=new (buf) S2123C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,632), "sizeof(S2123C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2123C2)");
    check_base_class_offset(lv, (S2123C4_nt*)(S2123C3_nt*), 0, "S2123C2");
    check_base_class_offset(lv, (S2123C3_nt*), 0, "S2123C2");
    test_class_info(&lv, &cd_S2123C2);
    dp->~S2123C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2123C2(Test_S2123C2, "S2123C2", ABISELECT(832,632));

#else // __cplusplus

extern void _ZN7S2123C2C1Ev();
extern void _ZN7S2123C2D1Ev();
Name_Map name_map_S2123C2[] = {
  NSPAIR(_ZN7S2123C2C1Ev),
  NSPAIR(_ZN7S2123C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C4_nt;
extern VTBL_ENTRY _ZTI10S2123C4_nt[];
extern  VTBL_ENTRY _ZTV10S2123C4_nt[];
extern Class_Descriptor cd_S2123C3_nt;
extern VTBL_ENTRY _ZTI10S2123C3_nt[];
extern  VTBL_ENTRY _ZTV10S2123C3_nt[];
static Base_Class bases_S2123C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2123C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2123C2[];
extern void _ZN7S2123C2D1Ev();
extern void _ZN7S2123C2D0Ev();
extern void _ZN10S2123C4_nt2v2Ev();
extern void _ZN10S2123C4_nt2v3Ev();
extern void _ZN10S2123C4_nt2v4Ev();
extern void _ZN10S2123C4_nt2v5Ev();
extern void _ZN10S2123C4_nt2v6Ev();
extern void _ZN10S2123C4_nt2v7Ev();
extern void _ZN10S2123C4_nt2v8Ev();
extern void _ZN10S2123C4_nt2v9Ev();
extern void _ZN10S2123C4_nt3v10Ev();
extern void _ZN10S2123C4_nt3v11Ev();
extern void _ZN10S2123C4_nt3v12Ev();
extern void _ZN10S2123C4_nt3v13Ev();
extern void _ZN10S2123C4_nt3v14Ev();
extern void _ZN10S2123C4_nt3v15Ev();
extern void _ZN10S2123C4_nt3v16Ev();
extern void _ZN10S2123C4_nt3v17Ev();
extern void _ZN10S2123C4_nt3v18Ev();
extern void _ZN10S2123C4_nt3v19Ev();
extern void _ZN10S2123C4_nt3v20Ev();
extern void _ZN10S2123C4_nt3v21Ev();
extern void _ZN10S2123C4_nt3v22Ev();
extern void _ZN10S2123C4_nt3v23Ev();
extern void _ZN10S2123C4_nt3v24Ev();
extern void _ZN10S2123C3_nt3v25Ev();
extern void _ZN10S2123C3_nt3v26Ev();
extern void _ZN10S2123C3_nt3v27Ev();
extern void _ZN10S2123C3_nt3v28Ev();
extern void _ZN10S2123C3_nt3v29Ev();
extern void _ZN10S2123C3_nt3v30Ev();
extern void _ZN10S2123C3_nt3v31Ev();
extern void _ZN10S2123C3_nt3v32Ev();
extern void _ZN10S2123C3_nt3v33Ev();
extern void _ZN10S2123C3_nt3v34Ev();
extern void _ZN10S2123C3_nt3v35Ev();
extern void _ZN10S2123C3_nt3v36Ev();
extern void _ZN10S2123C3_nt3v37Ev();
extern void _ZN10S2123C3_nt3v38Ev();
extern void _ZN10S2123C3_nt3v39Ev();
extern void _ZN10S2123C3_nt3v40Ev();
extern void _ZN10S2123C3_nt3v41Ev();
extern void _ZN10S2123C3_nt3v42Ev();
extern void _ZN10S2123C3_nt3v43Ev();
extern void _ZN10S2123C3_nt3v44Ev();
extern void _ZN10S2123C3_nt3v45Ev();
extern void _ZN10S2123C3_nt3v46Ev();
extern void _ZN10S2123C3_nt3v47Ev();
extern void _ZN10S2123C3_nt3v48Ev();
extern void _ZN10S2123C3_nt3v49Ev();
extern void _ZN10S2123C3_nt3v50Ev();
extern void _ZN10S2123C3_nt3v51Ev();
extern void _ZN10S2123C3_nt3v52Ev();
extern void _ZN10S2123C3_nt3v53Ev();
extern void _ZN10S2123C3_nt3v54Ev();
extern void _ZN10S2123C3_nt3v55Ev();
extern void _ZN10S2123C3_nt3v56Ev();
extern void _ZN10S2123C3_nt3v57Ev();
extern void _ZN10S2123C3_nt3v58Ev();
extern void _ZN10S2123C3_nt3v59Ev();
extern void _ZN10S2123C3_nt3v60Ev();
extern void _ZN10S2123C3_nt3v61Ev();
extern void _ZN10S2123C3_nt3v62Ev();
extern void _ZN10S2123C3_nt3v63Ev();
extern void _ZN10S2123C3_nt3v64Ev();
extern void _ZN10S2123C3_nt3v65Ev();
extern void _ZN10S2123C3_nt3v66Ev();
extern void _ZN10S2123C3_nt3v67Ev();
extern void _ZN10S2123C3_nt3v68Ev();
extern void _ZN10S2123C3_nt3v69Ev();
extern void _ZN10S2123C3_nt3v70Ev();
extern void _ZN10S2123C3_nt3v71Ev();
extern void _ZN10S2123C3_nt3v72Ev();
extern void _ZN10S2123C3_nt3v73Ev();
extern void _ZN10S2123C3_nt3v74Ev();
extern void _ZN10S2123C3_nt3v75Ev();
extern void _ZN10S2123C3_nt3v76Ev();
extern void _ZN10S2123C3_nt3v77Ev();
extern void _ZN10S2123C3_nt3v78Ev();
extern void _ZN10S2123C3_nt3v79Ev();
extern void _ZN10S2123C3_nt3v80Ev();
extern void _ZN10S2123C3_nt3v81Ev();
extern void _ZN10S2123C3_nt3v82Ev();
extern void _ZN10S2123C3_nt3v83Ev();
extern void _ZN10S2123C3_nt3v84Ev();
extern void _ZN10S2123C3_nt3v85Ev();
extern void _ZN10S2123C3_nt3v86Ev();
extern void _ZN10S2123C3_nt3v87Ev();
extern void _ZN10S2123C3_nt3v88Ev();
extern void _ZN10S2123C3_nt3v89Ev();
extern void _ZN10S2123C3_nt3v90Ev();
extern void _ZN10S2123C3_nt3v91Ev();
extern void _ZN10S2123C3_nt3v92Ev();
extern void _ZN10S2123C3_nt3v93Ev();
extern void _ZN10S2123C3_nt3v94Ev();
extern void _ZN10S2123C3_nt3v95Ev();
extern void _ZN10S2123C3_nt3v96Ev();
extern void _ZN10S2123C3_nt3v97Ev();
extern void _ZN10S2123C3_nt3v98Ev();
extern void _ZN10S2123C3_nt3v99Ev();
extern void _ZN10S2123C3_nt4v100Ev();
extern void _ZN10S2123C3_nt4v101Ev();
extern void _ZN10S2123C3_nt4v102Ev();
extern void _ZN7S2123C24v103Ev();
extern void _ZN7S2123C24v104Ev();
extern void _ZN7S2123C24v105Ev();
extern void _ZN7S2123C24v106Ev();
extern void _ZN7S2123C24v107Ev();
extern void _ZN7S2123C24v108Ev();
extern void _ZN7S2123C24v109Ev();
extern void _ZN7S2123C24v110Ev();
static  VTBL_ENTRY vtc_S2123C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2123C2[0]),
  (VTBL_ENTRY)&_ZN7S2123C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2123C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v103Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v104Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v105Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v106Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v107Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v108Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v109Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v110Ev,
};
extern VTBL_ENTRY _ZTI7S2123C2[];
extern  VTBL_ENTRY _ZTV7S2123C2[];
Class_Descriptor cd_S2123C2 = {  "S2123C2", // class name
  bases_S2123C2, 2,
  &(vtc_S2123C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI7S2123C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2123C2),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  S2123C1  : S2123C2 {
  virtual  ~S2123C1(); // _ZN7S2123C1D1Ev
  virtual void  v1(); // _ZN7S2123C12v1Ev
  S2123C1(); // tgen
};
//SIG(1 S2123C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC5 Fi} vd 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 FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9 FC11{ m FC9} FC12{ m FC9 FC9 FC9 FC9} FC12 FC9 FC9 FC9 Fp FC11 FC13{ m FC14{ m Fp Fi FC8} Fi} Fi Fp[7] FC15{ m Fp Fi FC16{ m} FC16} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC19{ m} FC19}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:16 Fi:16 FC17 FC20 FC22{ m Fp Fi[2] FC21} Fp[2] Fi:24 Fi:8 Fp} vd v103 v104 v105 v106 v107 v108 v109 v110} vd v1}


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

static void Test_S2123C1()
{
  extern Class_Descriptor cd_S2123C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(105,159)];
    init_test(&cd_S2123C1, buf);
    S2123C1 *dp, &lv = *(dp=new (buf) S2123C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,632), "sizeof(S2123C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2123C1)");
    check_base_class_offset(lv, (S2123C4_nt*)(S2123C3_nt*)(S2123C2*), 0, "S2123C1");
    check_base_class_offset(lv, (S2123C3_nt*)(S2123C2*), 0, "S2123C1");
    check_base_class_offset(lv, (S2123C2*), 0, "S2123C1");
    test_class_info(&lv, &cd_S2123C1);
    dp->~S2123C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2123C1(Test_S2123C1, "S2123C1", ABISELECT(832,632));

#else // __cplusplus

extern void _ZN7S2123C1C1Ev();
extern void _ZN7S2123C1D1Ev();
Name_Map name_map_S2123C1[] = {
  NSPAIR(_ZN7S2123C1C1Ev),
  NSPAIR(_ZN7S2123C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C4_nt;
extern VTBL_ENTRY _ZTI10S2123C4_nt[];
extern  VTBL_ENTRY _ZTV10S2123C4_nt[];
extern Class_Descriptor cd_S2123C3_nt;
extern VTBL_ENTRY _ZTI10S2123C3_nt[];
extern  VTBL_ENTRY _ZTV10S2123C3_nt[];
extern Class_Descriptor cd_S2123C2;
extern VTBL_ENTRY _ZTI7S2123C2[];
extern  VTBL_ENTRY _ZTV7S2123C2[];
static Base_Class bases_S2123C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2123C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2123C1[];
extern void _ZN7S2123C1D1Ev();
extern void _ZN7S2123C1D0Ev();
extern void _ZN10S2123C4_nt2v2Ev();
extern void _ZN10S2123C4_nt2v3Ev();
extern void _ZN10S2123C4_nt2v4Ev();
extern void _ZN10S2123C4_nt2v5Ev();
extern void _ZN10S2123C4_nt2v6Ev();
extern void _ZN10S2123C4_nt2v7Ev();
extern void _ZN10S2123C4_nt2v8Ev();
extern void _ZN10S2123C4_nt2v9Ev();
extern void _ZN10S2123C4_nt3v10Ev();
extern void _ZN10S2123C4_nt3v11Ev();
extern void _ZN10S2123C4_nt3v12Ev();
extern void _ZN10S2123C4_nt3v13Ev();
extern void _ZN10S2123C4_nt3v14Ev();
extern void _ZN10S2123C4_nt3v15Ev();
extern void _ZN10S2123C4_nt3v16Ev();
extern void _ZN10S2123C4_nt3v17Ev();
extern void _ZN10S2123C4_nt3v18Ev();
extern void _ZN10S2123C4_nt3v19Ev();
extern void _ZN10S2123C4_nt3v20Ev();
extern void _ZN10S2123C4_nt3v21Ev();
extern void _ZN10S2123C4_nt3v22Ev();
extern void _ZN10S2123C4_nt3v23Ev();
extern void _ZN10S2123C4_nt3v24Ev();
extern void _ZN10S2123C3_nt3v25Ev();
extern void _ZN10S2123C3_nt3v26Ev();
extern void _ZN10S2123C3_nt3v27Ev();
extern void _ZN10S2123C3_nt3v28Ev();
extern void _ZN10S2123C3_nt3v29Ev();
extern void _ZN10S2123C3_nt3v30Ev();
extern void _ZN10S2123C3_nt3v31Ev();
extern void _ZN10S2123C3_nt3v32Ev();
extern void _ZN10S2123C3_nt3v33Ev();
extern void _ZN10S2123C3_nt3v34Ev();
extern void _ZN10S2123C3_nt3v35Ev();
extern void _ZN10S2123C3_nt3v36Ev();
extern void _ZN10S2123C3_nt3v37Ev();
extern void _ZN10S2123C3_nt3v38Ev();
extern void _ZN10S2123C3_nt3v39Ev();
extern void _ZN10S2123C3_nt3v40Ev();
extern void _ZN10S2123C3_nt3v41Ev();
extern void _ZN10S2123C3_nt3v42Ev();
extern void _ZN10S2123C3_nt3v43Ev();
extern void _ZN10S2123C3_nt3v44Ev();
extern void _ZN10S2123C3_nt3v45Ev();
extern void _ZN10S2123C3_nt3v46Ev();
extern void _ZN10S2123C3_nt3v47Ev();
extern void _ZN10S2123C3_nt3v48Ev();
extern void _ZN10S2123C3_nt3v49Ev();
extern void _ZN10S2123C3_nt3v50Ev();
extern void _ZN10S2123C3_nt3v51Ev();
extern void _ZN10S2123C3_nt3v52Ev();
extern void _ZN10S2123C3_nt3v53Ev();
extern void _ZN10S2123C3_nt3v54Ev();
extern void _ZN10S2123C3_nt3v55Ev();
extern void _ZN10S2123C3_nt3v56Ev();
extern void _ZN10S2123C3_nt3v57Ev();
extern void _ZN10S2123C3_nt3v58Ev();
extern void _ZN10S2123C3_nt3v59Ev();
extern void _ZN10S2123C3_nt3v60Ev();
extern void _ZN10S2123C3_nt3v61Ev();
extern void _ZN10S2123C3_nt3v62Ev();
extern void _ZN10S2123C3_nt3v63Ev();
extern void _ZN10S2123C3_nt3v64Ev();
extern void _ZN10S2123C3_nt3v65Ev();
extern void _ZN10S2123C3_nt3v66Ev();
extern void _ZN10S2123C3_nt3v67Ev();
extern void _ZN10S2123C3_nt3v68Ev();
extern void _ZN10S2123C3_nt3v69Ev();
extern void _ZN10S2123C3_nt3v70Ev();
extern void _ZN10S2123C3_nt3v71Ev();
extern void _ZN10S2123C3_nt3v72Ev();
extern void _ZN10S2123C3_nt3v73Ev();
extern void _ZN10S2123C3_nt3v74Ev();
extern void _ZN10S2123C3_nt3v75Ev();
extern void _ZN10S2123C3_nt3v76Ev();
extern void _ZN10S2123C3_nt3v77Ev();
extern void _ZN10S2123C3_nt3v78Ev();
extern void _ZN10S2123C3_nt3v79Ev();
extern void _ZN10S2123C3_nt3v80Ev();
extern void _ZN10S2123C3_nt3v81Ev();
extern void _ZN10S2123C3_nt3v82Ev();
extern void _ZN10S2123C3_nt3v83Ev();
extern void _ZN10S2123C3_nt3v84Ev();
extern void _ZN10S2123C3_nt3v85Ev();
extern void _ZN10S2123C3_nt3v86Ev();
extern void _ZN10S2123C3_nt3v87Ev();
extern void _ZN10S2123C3_nt3v88Ev();
extern void _ZN10S2123C3_nt3v89Ev();
extern void _ZN10S2123C3_nt3v90Ev();
extern void _ZN10S2123C3_nt3v91Ev();
extern void _ZN10S2123C3_nt3v92Ev();
extern void _ZN10S2123C3_nt3v93Ev();
extern void _ZN10S2123C3_nt3v94Ev();
extern void _ZN10S2123C3_nt3v95Ev();
extern void _ZN10S2123C3_nt3v96Ev();
extern void _ZN10S2123C3_nt3v97Ev();
extern void _ZN10S2123C3_nt3v98Ev();
extern void _ZN10S2123C3_nt3v99Ev();
extern void _ZN10S2123C3_nt4v100Ev();
extern void _ZN10S2123C3_nt4v101Ev();
extern void _ZN10S2123C3_nt4v102Ev();
extern void _ZN7S2123C24v103Ev();
extern void _ZN7S2123C24v104Ev();
extern void _ZN7S2123C24v105Ev();
extern void _ZN7S2123C24v106Ev();
extern void _ZN7S2123C24v107Ev();
extern void _ZN7S2123C24v108Ev();
extern void _ZN7S2123C24v109Ev();
extern void _ZN7S2123C24v110Ev();
extern void _ZN7S2123C12v1Ev();
static  VTBL_ENTRY vtc_S2123C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2123C1[0]),
  (VTBL_ENTRY)&_ZN7S2123C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2123C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2123C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2123C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v103Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v104Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v105Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v106Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v107Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v108Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v109Ev,
  (VTBL_ENTRY)&_ZN7S2123C24v110Ev,
  (VTBL_ENTRY)&_ZN7S2123C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2123C1[];
extern  VTBL_ENTRY _ZTV7S2123C1[];
Class_Descriptor cd_S2123C1 = {  "S2123C1", // class name
  bases_S2123C1, 3,
  &(vtc_S2123C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI7S2123C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2123C1),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C5  {
  __tsi64 s468c5f0;
  void *s468c5f1;
  char s468c5f2:6;
  long double s468c5f3;
  char s468c5f4[7];
  __tsi64 s468c5f5;
  char s468c5f6[9];
  long double s468c5f7[8];
  void *s468c5f8;
  short s468c5f9;
  void *s468c5f10[7];
  int s468c5f11;
  void *s468c5f12;
  virtual void  v1(); // _ZN6S468C52v1Ev
  virtual void  v2(); // _ZN6S468C52v2Ev
  ~S468C5(); // tgen
  S468C5(); // tgen
};
//SIG(-1 S468C5) C1{ v1 v2 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}


void  S468C5 ::v1(){vfunc_called(this, "_ZN6S468C52v1Ev");}
void  S468C5 ::v2(){vfunc_called(this, "_ZN6S468C52v2Ev");}
S468C5 ::~S468C5(){ note_dtor("S468C5", this);} // tgen
S468C5 ::S468C5(){ note_ctor("S468C5", this);} // tgen

static void Test_S468C5()
{
  extern Class_Descriptor cd_S468C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,51)];
    init_test(&cd_S468C5, buf);
    S468C5 *dp, &lv = *(dp=new (buf) S468C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S468C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C5)");
    check_field_offset(lv, s468c5f0, ABISELECT(8,4), "S468C5.s468c5f0");
    check_field_offset(lv, s468c5f1, ABISELECT(16,12), "S468C5.s468c5f1");
    set_bf_and_test(lv, s468c5f2, ABISELECT(24,16), 0, 6, 1, "S468C5");
    set_bf_and_test(lv, s468c5f2, ABISELECT(24,16), 0, 6, hide_sll(1LL<<5), "S468C5");
    check_field_offset(lv, s468c5f3, ABISELECT(32,20), "S468C5.s468c5f3");
    check_field_offset(lv, s468c5f4, ABISELECT(48,32), "S468C5.s468c5f4");
    check_field_offset(lv, s468c5f5, ABISELECT(56,40), "S468C5.s468c5f5");
    check_field_offset(lv, s468c5f6, ABISELECT(64,48), "S468C5.s468c5f6");
    check_field_offset(lv, s468c5f7, ABISELECT(80,60), "S468C5.s468c5f7");
    check_field_offset(lv, s468c5f8, ABISELECT(208,156), "S468C5.s468c5f8");
    check_field_offset(lv, s468c5f9, ABISELECT(216,160), "S468C5.s468c5f9");
    check_field_offset(lv, s468c5f10, ABISELECT(224,164), "S468C5.s468c5f10");
    check_field_offset(lv, s468c5f11, ABISELECT(280,192), "S468C5.s468c5f11");
    check_field_offset(lv, s468c5f12, ABISELECT(288,196), "S468C5.s468c5f12");
    test_class_info(&lv, &cd_S468C5);
    dp->~S468C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C5(Test_S468C5, "S468C5", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN6S468C5C1Ev();
extern void _ZN6S468C5D1Ev();
Name_Map name_map_S468C5[] = {
  NSPAIR(_ZN6S468C5C1Ev),
  NSPAIR(_ZN6S468C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S468C5[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY vtc_S468C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S468C5[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
Class_Descriptor cd_S468C5 = {  "S468C5", // class name
  0,0,//no base classes
  &(vtc_S468C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI6S468C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S468C5),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  S468C7  {
  void *s468c7f0;
  __tsi64 s468c7f1;
  void *s468c7f2[7];
  void  mf468c7(); // _ZN6S468C77mf468c7Ev
  virtual  ~S468C7(); // _ZN6S468C7D1Ev
  S468C7(); // tgen
};
//SIG(-1 S468C7) C1{ vd m Fp FL Fp[7]}


void  S468C7 ::mf468c7(){}
 S468C7 ::~S468C7(){ note_dtor("S468C7", this);}
S468C7 ::S468C7(){ note_ctor("S468C7", this);} // tgen

static void Test_S468C7()
{
  extern Class_Descriptor cd_S468C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S468C7, buf);
    S468C7 *dp, &lv = *(dp=new (buf) S468C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S468C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S468C7)");
    check_field_offset(lv, s468c7f0, ABISELECT(8,4), "S468C7.s468c7f0");
    check_field_offset(lv, s468c7f1, ABISELECT(16,8), "S468C7.s468c7f1");
    check_field_offset(lv, s468c7f2, ABISELECT(24,16), "S468C7.s468c7f2");
    test_class_info(&lv, &cd_S468C7);
    dp->~S468C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C7(Test_S468C7, "S468C7", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S468C7C1Ev();
extern void _ZN6S468C7D1Ev();
Name_Map name_map_S468C7[] = {
  NSPAIR(_ZN6S468C7C1Ev),
  NSPAIR(_ZN6S468C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S468C7[];
extern void _ZN6S468C7D1Ev();
extern void _ZN6S468C7D0Ev();
static  VTBL_ENTRY vtc_S468C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S468C7[0]),
  (VTBL_ENTRY)&_ZN6S468C7D1Ev,
  (VTBL_ENTRY)&_ZN6S468C7D0Ev,
};
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
Class_Descriptor cd_S468C7 = {  "S468C7", // class name
  0,0,//no base classes
  &(vtc_S468C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S468C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S468C7),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  S468C6  {
  ::S468C5 s468c6f0[8];
  ::S468C5 s468c6f1[2];
  void *s468c6f2;
  int s468c6f3;
  ::S468C7 s468c6f4;
  ::S468C5 s468c6f5[5];
  void *s468c6f6[5];
  ::S468C5 s468c6f7[5];
  virtual void  v3(); // _ZN6S468C62v3Ev
  ~S468C6(); // tgen
  S468C6(); // tgen
};
//SIG(-1 S468C6) C1{ v1 FC2{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC2[2] Fp Fi FC3{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]}


void  S468C6 ::v3(){vfunc_called(this, "_ZN6S468C62v3Ev");}
S468C6 ::~S468C6(){ note_dtor("S468C6", this);} // tgen
S468C6 ::S468C6(){ note_ctor("S468C6", this);} // tgen

static void Test_S468C6()
{
  extern Class_Descriptor cd_S468C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(391,1020)];
    init_test(&cd_S468C6, buf);
    S468C6 *dp, &lv = *(dp=new (buf) S468C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6240,4076), "sizeof(S468C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C6)");
    check_field_offset(lv, s468c6f0, ABISELECT(16,4), "S468C6.s468c6f0");
    check_field_offset(lv, s468c6f1, ABISELECT(2448,1604), "S468C6.s468c6f1");
    check_field_offset(lv, s468c6f2, ABISELECT(3056,2004), "S468C6.s468c6f2");
    check_field_offset(lv, s468c6f3, ABISELECT(3064,2008), "S468C6.s468c6f3");
    check_field_offset(lv, s468c6f4, ABISELECT(3072,2012), "S468C6.s468c6f4");
    check_field_offset(lv, s468c6f5, ABISELECT(3152,2056), "S468C6.s468c6f5");
    check_field_offset(lv, s468c6f6, ABISELECT(4672,3056), "S468C6.s468c6f6");
    check_field_offset(lv, s468c6f7, ABISELECT(4720,3076), "S468C6.s468c6f7");
    test_class_info(&lv, &cd_S468C6);
    dp->~S468C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C6(Test_S468C6, "S468C6", ABISELECT(6240,4076));

#else // __cplusplus

extern void _ZN6S468C6C1Ev();
extern void _ZN6S468C6D1Ev();
Name_Map name_map_S468C6[] = {
  NSPAIR(_ZN6S468C6C1Ev),
  NSPAIR(_ZN6S468C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S468C6[];
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY vtc_S468C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S468C6[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
Class_Descriptor cd_S468C6 = {  "S468C6", // class name
  0,0,//no base classes
  &(vtc_S468C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6240,4076), // object size
  NSPAIRA(_ZTI6S468C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S468C6),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  S468C8  {
  char s468c8f0;
  __tsi64 s468c8f1[10];
  long double s468c8f2;
  ::S468C5 s468c8f3;
  void *s468c8f4;
  short s468c8f5;
  void *s468c8f6;
  int s468c8f7;
  virtual void  v4(); // _ZN6S468C82v4Ev
  virtual void  v5(); // _ZN6S468C82v5Ev
  ~S468C8(); // tgen
  S468C8(); // tgen
};
//SIG(-1 S468C8) C1{ v1 v2 Fc FL[10] FD FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fp Fs Fp Fi}


void  S468C8 ::v4(){vfunc_called(this, "_ZN6S468C82v4Ev");}
void  S468C8 ::v5(){vfunc_called(this, "_ZN6S468C82v5Ev");}
S468C8 ::~S468C8(){ note_dtor("S468C8", this);} // tgen
S468C8 ::S468C8(){ note_ctor("S468C8", this);} // tgen

static void Test_S468C8()
{
  extern Class_Descriptor cd_S468C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,80)];
    init_test(&cd_S468C8, buf);
    S468C8 *dp, &lv = *(dp=new (buf) S468C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,316), "sizeof(S468C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C8)");
    check_field_offset(lv, s468c8f0, ABISELECT(8,4), "S468C8.s468c8f0");
    check_field_offset(lv, s468c8f1, ABISELECT(16,8), "S468C8.s468c8f1");
    check_field_offset(lv, s468c8f2, ABISELECT(96,88), "S468C8.s468c8f2");
    check_field_offset(lv, s468c8f3, ABISELECT(112,100), "S468C8.s468c8f3");
    check_field_offset(lv, s468c8f4, ABISELECT(416,300), "S468C8.s468c8f4");
    check_field_offset(lv, s468c8f5, ABISELECT(424,304), "S468C8.s468c8f5");
    check_field_offset(lv, s468c8f6, ABISELECT(432,308), "S468C8.s468c8f6");
    check_field_offset(lv, s468c8f7, ABISELECT(440,312), "S468C8.s468c8f7");
    test_class_info(&lv, &cd_S468C8);
    dp->~S468C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C8(Test_S468C8, "S468C8", ABISELECT(448,316));

#else // __cplusplus

extern void _ZN6S468C8C1Ev();
extern void _ZN6S468C8D1Ev();
Name_Map name_map_S468C8[] = {
  NSPAIR(_ZN6S468C8C1Ev),
  NSPAIR(_ZN6S468C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S468C8[];
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY vtc_S468C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S468C8[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
Class_Descriptor cd_S468C8 = {  "S468C8", // class name
  0,0,//no base classes
  &(vtc_S468C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,316), // object size
  NSPAIRA(_ZTI6S468C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S468C8),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  S468C4  : S468C5 , virtual S468C6 , S468C7 , virtual S468C8 {
  __tsi64 s468c4f0:2;
  long double s468c4f1[7];
  void *s468c4f2;
  ::S468C6 s468c4f3;
  void *s468c4f4;
  int s468c4f5;
  void *s468c4f6[2];
  ::S468C7 s468c4f7;
  ::S468C5 s468c4f8;
  long double s468c4f9[8];
  virtual void  v6(); // _ZN6S468C42v6Ev
  ~S468C4(); // tgen
  S468C4(); // tgen
};
//SIG(-1 S468C4) C1{ BC2{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC3{ v4 FC2[8] FC2[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]} BC4 VBC5{ v5 v6 Fc FL[10] FD FC2 Fp Fs Fp Fi} v1 FL:2 FD[7] Fp FC3 Fp Fi Fp[2] FC4 FC2 FD[8]}


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

static void Test_S468C4()
{
  extern Class_Descriptor cd_S468C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(875,2291)];
    init_test(&cd_S468C4, buf);
    S468C4 *dp, &lv = *(dp=new (buf) S468C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13984,9160), "sizeof(S468C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C4)");
    check_base_class_offset(lv, (S468C5*), 0, "S468C4");
    check_base_class_offset(lv, (S468C6*), ABISELECT(7296,4768), "S468C4");
    check_base_class_offset(lv, (S468C7*), ABISELECT(296,200), "S468C4");
    check_base_class_offset(lv, (S468C8*), ABISELECT(13536,8844), "S468C4");
    set_bf_and_test(lv, s468c4f0, ABISELECT(376,244), 0, 2, 1, "S468C4");
    set_bf_and_test(lv, s468c4f0, ABISELECT(376,244), 0, 2, hide_sll(1LL<<1), "S468C4");
    check_field_offset(lv, s468c4f1, ABISELECT(384,248), "S468C4.s468c4f1");
    check_field_offset(lv, s468c4f2, ABISELECT(496,332), "S468C4.s468c4f2");
    check_field_offset(lv, s468c4f3, ABISELECT(512,336), "S468C4.s468c4f3");
    check_field_offset(lv, s468c4f4, ABISELECT(6752,4412), "S468C4.s468c4f4");
    check_field_offset(lv, s468c4f5, ABISELECT(6760,4416), "S468C4.s468c4f5");
    check_field_offset(lv, s468c4f6, ABISELECT(6768,4420), "S468C4.s468c4f6");
    check_field_offset(lv, s468c4f7, ABISELECT(6784,4428), "S468C4.s468c4f7");
    check_field_offset(lv, s468c4f8, ABISELECT(6864,4472), "S468C4.s468c4f8");
    check_field_offset(lv, s468c4f9, ABISELECT(7168,4672), "S468C4.s468c4f9");
    test_class_info(&lv, &cd_S468C4);
    dp->~S468C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C4(Test_S468C4, "S468C4", ABISELECT(13984,9160));

#else // __cplusplus

extern void _ZN6S468C4C1Ev();
extern void _ZN6S468C4D1Ev();
Name_Map name_map_S468C4[] = {
  NSPAIR(_ZN6S468C4C1Ev),
  NSPAIR(_ZN6S468C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
static Base_Class bases_S468C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S468C6,    ABISELECT(7296,4768), //bcp->offset
    13, //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_S468C7,    ABISELECT(296,200), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C8,    ABISELECT(13536,8844), //bcp->offset
    17, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S468C4[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
extern void ABISELECT(_ZThn296_N6S468C4D1Ev,_ZThn200_N6S468C4D1Ev)();
extern void ABISELECT(_ZThn296_N6S468C4D0Ev,_ZThn200_N6S468C4D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY vtc_S468C4[] = {
  ABISELECT(13536,8844),
  ABISELECT(7296,4768),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S468C4D1Ev,_ZThn200_N6S468C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S468C4D0Ev,_ZThn200_N6S468C4D0Ev),
  0,
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-13536,-8844),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern VTBL_ENTRY _ZTV6S468C4[];
static  VTT_ENTRY vtt_S468C4[] = {
  {&(_ZTV6S468C4[4]),  4,23},
  {&(_ZTV6S468C4[16]),  16,23},
  {&(_ZTV6S468C4[21]),  21,23},
};
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
Class_Descriptor cd_S468C4 = {  "S468C4", // class name
  bases_S468C4, 4,
  &(vtc_S468C4[0]), // expected_vtbl_contents
  &(vtt_S468C4[0]), // expected_vtt_contents
  ABISELECT(13984,9160), // object size
  NSPAIRA(_ZTI6S468C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV6S468C4),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S468C4),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C3  : S468C4 , S468C8 , S468C7 , S468C6 , virtual S468C5 {
  ::S468C7 s468c3f0;
  int s468c3f1;
  void *s468c3f2[2];
  __tsi64 s468c3f3[2];
  int s468c3f4[2];
  void *s468c3f5;
  int s468c3f6;
  ::S468C8 s468c3f7;
  int s468c3f8;
  virtual  ~S468C3(); // _ZN6S468C3D2Ev
  virtual void  v7(); // _ZN6S468C32v7Ev
  virtual void  v8(); // _ZN6S468C32v8Ev
  S468C3(); // tgen
};
//SIG(-1 S468C3) C1{ BC2{ BC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC4{ v5 FC3[8] FC3[2] Fp Fi FC5{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC5 VBC6{ v6 v7 Fc FL[10] FD FC3 Fp Fs Fp Fi} v8 FL:2 FD[7] Fp FC4 Fp Fi Fp[2] FC5 FC3 FD[8]} BC6 BC5 BC4 VBC3 vd v1 v2 FC5 Fi Fp[2] FL[2] Fi[2] Fp Fi FC6 Fi}


 S468C3 ::~S468C3(){ note_dtor("S468C3", this);}
void  S468C3 ::v7(){vfunc_called(this, "_ZN6S468C32v7Ev");}
void  S468C3 ::v8(){vfunc_called(this, "_ZN6S468C32v8Ev");}
S468C3 ::S468C3(){ note_ctor("S468C3", this);} // tgen

static void Test_S468C3()
{
  extern Class_Descriptor cd_S468C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1355,3552)];
    init_test(&cd_S468C3, buf);
    S468C3 *dp, &lv = *(dp=new (buf) S468C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(21664,14204), "sizeof(S468C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C3)");
    check_base_class_offset(lv, (S468C5*)(S468C4*), 0, "S468C3");
    check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(14672,9612), "S468C3");
    check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(296,200), "S468C3");
    check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(20912,13688), "S468C3");
    check_base_class_offset(lv, (S468C4*), 0, "S468C3");
    /*is_ambiguous_... S468C3::S468C8 */ AMB_check_base_class_offset(lv, (S468C8*), ABISELECT(7296,4768), "S468C3");
    /*is_ambiguous_... S468C3::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), ABISELECT(7744,5084), "S468C3");
    /*is_ambiguous_... S468C3::S468C6 */ AMB_check_base_class_offset(lv, (S468C6*), ABISELECT(7824,5128), "S468C3");
    /*is_ambiguous_... S468C3::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*), ABISELECT(21360,14004), "S468C3");
    check_field_offset(lv, s468c3f0, ABISELECT(14064,9204), "S468C3.s468c3f0");
    check_field_offset(lv, s468c3f1, ABISELECT(14144,9248), "S468C3.s468c3f1");
    check_field_offset(lv, s468c3f2, ABISELECT(14152,9252), "S468C3.s468c3f2");
    check_field_offset(lv, s468c3f3, ABISELECT(14168,9260), "S468C3.s468c3f3");
    check_field_offset(lv, s468c3f4, ABISELECT(14184,9276), "S468C3.s468c3f4");
    check_field_offset(lv, s468c3f5, ABISELECT(14192,9284), "S468C3.s468c3f5");
    check_field_offset(lv, s468c3f6, ABISELECT(14200,9288), "S468C3.s468c3f6");
    check_field_offset(lv, s468c3f7, ABISELECT(14208,9292), "S468C3.s468c3f7");
    check_field_offset(lv, s468c3f8, ABISELECT(14656,9608), "S468C3.s468c3f8");
    test_class_info(&lv, &cd_S468C3);
    dp->~S468C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C3(Test_S468C3, "S468C3", ABISELECT(21664,14204));

#else // __cplusplus

extern void _ZN6S468C3C1Ev();
extern void _ZN6S468C3D2Ev();
Name_Map name_map_S468C3[] = {
  NSPAIR(_ZN6S468C3C1Ev),
  NSPAIR(_ZN6S468C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
static Base_Class bases_S468C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C6,    ABISELECT(14672,9612), //bcp->offset
    27, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(296,200), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S468C8,    ABISELECT(20912,13688), //bcp->offset
    31, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C4,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C8,    ABISELECT(7296,4768), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C7,    ABISELECT(7744,5084), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C6,    ABISELECT(7824,5128), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C5,    ABISELECT(21360,14004), //bcp->offset
    37, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S468C3[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C3D1Ev();
extern void _ZN6S468C3D0Ev();
extern void _ZN6S468C32v7Ev();
extern void _ZN6S468C32v8Ev();
extern void ABISELECT(_ZThn296_N6S468C3D1Ev,_ZThn200_N6S468C3D1Ev)();
extern void ABISELECT(_ZThn296_N6S468C3D0Ev,_ZThn200_N6S468C3D0Ev)();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void ABISELECT(_ZThn7744_N6S468C3D1Ev,_ZThn5084_N6S468C3D1Ev)();
extern void ABISELECT(_ZThn7744_N6S468C3D0Ev,_ZThn5084_N6S468C3D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY vtc_S468C3[] = {
  ABISELECT(21360,14004),
  ABISELECT(20912,13688),
  ABISELECT(14672,9612),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C3D1Ev,
  (VTBL_ENTRY)&_ZN6S468C3D0Ev,
  (VTBL_ENTRY)&_ZN6S468C32v7Ev,
  (VTBL_ENTRY)&_ZN6S468C32v8Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S468C3D1Ev,_ZThn200_N6S468C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S468C3D0Ev,_ZThn200_N6S468C3D0Ev),
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-7744,-5084),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S468C3D1Ev,_ZThn5084_N6S468C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S468C3D0Ev,_ZThn5084_N6S468C3D0Ev),
  ABISELECT(-7824,-5128),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-20912,-13688),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  0,
  0,
  ABISELECT(-21360,-14004),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern VTBL_ENTRY _ZTV6S468C3[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__6S468C3[] = {
  ABISELECT(20912,13688),
  ABISELECT(14672,9612),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__6S468C3[] = {
  0,
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__6S468C3[] = {
  0,
  0,
  ABISELECT(-20912,-13688),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C3[] = {
  {&(_ZTV6S468C3[5]),  5,43},
  {&(_tg__ZTV6S468C4__6S468C3[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__6S468C3[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__6S468C3[4]),  4,6},
  {&(_ZTV6S468C3[30]),  30,43},
  {&(_ZTV6S468C3[35]),  35,43},
  {&(_ZTV6S468C3[41]),  41,43},
};
extern VTBL_ENTRY _ZTI6S468C3[];
extern  VTBL_ENTRY _ZTV6S468C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C3[];
Class_Descriptor cd_S468C3 = {  "S468C3", // class name
  bases_S468C3, 9,
  &(vtc_S468C3[0]), // expected_vtbl_contents
  &(vtt_S468C3[0]), // expected_vtt_contents
  ABISELECT(21664,14204), // object size
  NSPAIRA(_ZTI6S468C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV6S468C3),43, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S468C3),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S468C10  {
  __tsi64 s468c10f0;
  long double s468c10f1[10];
  long double s468c10f2;
  short  :0;
  void  mf468c10(); // _ZN7S468C108mf468c10Ev
};
//SIG(1 S468C10) U1{ m FL FD[10] FD Fs:0}

#endif // __cplusplus
#ifdef __cplusplus

struct  S468C9  {
  int s468c9f0;
  ::S468C5 s468c9f1;
  int s468c9f2[2];
  ::S468C10 s468c9f3;
  long double s468c9f4;
  int s468c9f5;
  int s468c9f6;
  ::S468C8 s468c9f7;
  __tsi64 s468c9f8;
  int s468c9f9;
  ::S468C8 s468c9f10;
  virtual  ~S468C9(); // _ZN6S468C9D1Ev
  virtual void  v9(); // _ZN6S468C92v9Ev
  virtual void  v10(); // _ZN6S468C93v10Ev
  S468C9(); // tgen
};
//SIG(-1 S468C9) C1{ vd v1 v2 Fi FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fi[2] FU3{ m FL FD[10] FD Fs:0} FD Fi Fi FC4{ v5 v6 Fc FL[10] FD FC2 Fp Fs Fp Fi} FL Fi FC4}


 S468C9 ::~S468C9(){ note_dtor("S468C9", this);}
void  S468C9 ::v9(){vfunc_called(this, "_ZN6S468C92v9Ev");}
void  S468C9 ::v10(){vfunc_called(this, "_ZN6S468C93v10Ev");}
S468C9 ::S468C9(){ note_ctor("S468C9", this);} // tgen

static void Test_S468C9()
{
  extern Class_Descriptor cd_S468C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(91,251)];
    init_test(&cd_S468C9, buf);
    S468C9 *dp, &lv = *(dp=new (buf) S468C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1440,1000), "sizeof(S468C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C9)");
    check_field_offset(lv, s468c9f0, ABISELECT(8,4), "S468C9.s468c9f0");
    check_field_offset(lv, s468c9f1, ABISELECT(16,8), "S468C9.s468c9f1");
    check_field_offset(lv, s468c9f2, ABISELECT(320,208), "S468C9.s468c9f2");
    check_field_offset(lv, s468c9f3, ABISELECT(336,216), "S468C9.s468c9f3");
    check_field_offset(lv, s468c9f4, ABISELECT(496,336), "S468C9.s468c9f4");
    check_field_offset(lv, s468c9f5, ABISELECT(512,348), "S468C9.s468c9f5");
    check_field_offset(lv, s468c9f6, ABISELECT(516,352), "S468C9.s468c9f6");
    check_field_offset(lv, s468c9f7, ABISELECT(528,356), "S468C9.s468c9f7");
    check_field_offset(lv, s468c9f8, ABISELECT(976,672), "S468C9.s468c9f8");
    check_field_offset(lv, s468c9f9, ABISELECT(984,680), "S468C9.s468c9f9");
    check_field_offset(lv, s468c9f10, ABISELECT(992,684), "S468C9.s468c9f10");
    test_class_info(&lv, &cd_S468C9);
    dp->~S468C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C9(Test_S468C9, "S468C9", ABISELECT(1440,1000));

#else // __cplusplus

extern void _ZN6S468C9C1Ev();
extern void _ZN6S468C9D1Ev();
Name_Map name_map_S468C9[] = {
  NSPAIR(_ZN6S468C9C1Ev),
  NSPAIR(_ZN6S468C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S468C9[];
extern void _ZN6S468C9D1Ev();
extern void _ZN6S468C9D0Ev();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
static  VTBL_ENTRY vtc_S468C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S468C9[0]),
  (VTBL_ENTRY)&_ZN6S468C9D1Ev,
  (VTBL_ENTRY)&_ZN6S468C9D0Ev,
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
};
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
Class_Descriptor cd_S468C9 = {  "S468C9", // class name
  0,0,//no base classes
  &(vtc_S468C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1440,1000), // object size
  NSPAIRA(_ZTI6S468C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S468C9),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  S468C13  : virtual S468C6 , virtual S468C8 , virtual S468C4 , S468C7 {
  void *s468c13f0;
  ::S468C7 s468c13f1;
  ::S468C5 s468c13f2;
  short s468c13f3;
  ~S468C13(); // tgen
  S468C13(); // tgen
};
//SIG(-1 S468C13) C1{ VBC2{ v1 FC3{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} VBC5{ v2 v3 Fc FL[10] FD FC3 Fp Fs Fp Fi} VBC6{ BC3 VBC2 BC4 VBC5 v6 FL:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} BC4 Fp FC4 FC3 Fs}


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

static void Test_S468C13()
{
  extern Class_Descriptor cd_S468C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(906,2365)];
    init_test(&cd_S468C13, buf);
    S468C13 *dp, &lv = *(dp=new (buf) S468C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14480,9456), "sizeof(S468C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C13)");
    check_base_class_offset(lv, (S468C6*), ABISELECT(496,296), "S468C13");
    check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(496,296), "S468C13");
    check_base_class_offset(lv, (S468C8*), ABISELECT(6736,4372), "S468C13");
    check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(6736,4372), "S468C13");
    check_base_class_offset(lv, (S468C5*)(S468C4*), ABISELECT(7184,4688), "S468C13");
    check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(7480,4888), "S468C13");
    check_base_class_offset(lv, (S468C4*), ABISELECT(7184,4688), "S468C13");
    /*is_ambiguous_... S468C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), 0, "S468C13");
    check_field_offset(lv, s468c13f0, ABISELECT(80,44), "S468C13.s468c13f0");
    check_field_offset(lv, s468c13f1, ABISELECT(88,48), "S468C13.s468c13f1");
    check_field_offset(lv, s468c13f2, ABISELECT(176,92), "S468C13.s468c13f2");
    check_field_offset(lv, s468c13f3, ABISELECT(480,292), "S468C13.s468c13f3");
    test_class_info(&lv, &cd_S468C13);
    dp->~S468C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C13(Test_S468C13, "S468C13", ABISELECT(14480,9456));

#else // __cplusplus

extern void _ZN7S468C13C1Ev();
extern void _ZN7S468C13D1Ev();
Name_Map name_map_S468C13[] = {
  NSPAIR(_ZN7S468C13C1Ev),
  NSPAIR(_ZN7S468C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
static Base_Class bases_S468C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C6,    ABISELECT(496,296), //bcp->offset
    7, //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_S468C8,    ABISELECT(6736,4372), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C5,    ABISELECT(7184,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(7480,4888), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(7184,4688), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S468C13[];
extern void _ZN7S468C13D1Ev();
extern void _ZN7S468C13D0Ev();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZThn7184_N7S468C13D1Ev,_ZThn4688_N7S468C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev)();
extern void ABISELECT(_ZThn7184_N7S468C13D0Ev,_ZThn4688_N7S468C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY vtc_S468C13[] = {
  ABISELECT(7184,4688),
  ABISELECT(6736,4372),
  ABISELECT(496,296),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN7S468C13D1Ev,
  (VTBL_ENTRY)&_ZN7S468C13D0Ev,
  0,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-6736,-4372),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-7184,-4688),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-7184,-4688),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev),
  ABISELECT(-7480,-4888),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev),
};
extern VTBL_ENTRY _ZTV7S468C13[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C13[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__7S468C13[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__7S468C13[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C13[] = {
  {&(_ZTV7S468C13[5]),  5,34},
  {&(_ZTV7S468C13[10]),  10,34},
  {&(_ZTV7S468C13[15]),  15,34},
  {&(_ZTV7S468C13[25]),  25,34},
  {&(_ZTV7S468C13[32]),  32,34},
  {&(_tg__ZTV6S468C4__7S468C13[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__7S468C13[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__7S468C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S468C13[];
extern  VTBL_ENTRY _ZTV7S468C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C13[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7184_N7S468C13D0Ev,_ZThn4688_N7S468C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7184_N7S468C13D1Ev,_ZThn4688_N7S468C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S468C13 = {  "S468C13", // class name
  bases_S468C13, 6,
  &(vtc_S468C13[0]), // expected_vtbl_contents
  &(vtt_S468C13[0]), // expected_vtt_contents
  ABISELECT(14480,9456), // object size
  NSPAIRA(_ZTI7S468C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S468C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S468C13),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C12  : S468C13 , S468C5 , S468C9 {
  ::S468C3 s468c12f0;
  ~S468C12(); // tgen
  S468C12(); // tgen
};
//SIG(-1 S468C12) C1{ BC2{ VBC3{ v1 FC4{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC4[2] Fp Fi FC5{ vd m Fp FL Fp[7]} FC4[5] Fp[5] FC4[5]} VBC6{ v2 v3 Fc FL[10] FD FC4 Fp Fs Fp Fi} VBC7{ BC4 VBC3 BC5 VBC6 v6 FL:2 FD[7] Fp FC3 Fp Fi Fp[2] FC5 FC4 FD[8]} BC5 Fp FC5 FC4 Fs} BC4 BC8{ vd v7 v8 Fi FC4 Fi[2] FU9{ m FL FD[10] FD Fs:0} FD Fi Fi FC6 FL Fi FC6} FC10{ BC7 BC6 BC5 BC3 VBC4 vd v9 v10 FC5 Fi Fp[2] FL[2] Fi[2] Fp Fi FC6 Fi}}


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

static void Test_S468C12()
{
  extern Class_Descriptor cd_S468C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2369,6216)];
    init_test(&cd_S468C12, buf);
    S468C12 *dp, &lv = *(dp=new (buf) S468C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(37888,24860), "sizeof(S468C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C12)");
    check_base_class_offset(lv, (S468C6*)(S468C13*), ABISELECT(23904,15700), "S468C12");
    check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(23904,15700), "S468C12");
    check_base_class_offset(lv, (S468C8*)(S468C13*), ABISELECT(30144,19776), "S468C12");
    check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(30144,19776), "S468C12");
    check_base_class_offset(lv, (S468C5*)(S468C4*), ABISELECT(30592,20092), "S468C12");
    check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(30888,20292), "S468C12");
    check_base_class_offset(lv, (S468C4*)(S468C13*), ABISELECT(30592,20092), "S468C12");
    /*is_ambiguous_... S468C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C13*), 0, "S468C12");
    check_base_class_offset(lv, (S468C13*), 0, "S468C12");
    /*is_ambiguous_... S468C12::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*), ABISELECT(496,296), "S468C12");
    check_base_class_offset(lv, (S468C9*), ABISELECT(800,496), "S468C12");
    check_field_offset(lv, s468c12f0, ABISELECT(2240,1496), "S468C12.s468c12f0");
    test_class_info(&lv, &cd_S468C12);
    dp->~S468C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C12(Test_S468C12, "S468C12", ABISELECT(37888,24860));

#else // __cplusplus

extern void _ZN7S468C12C1Ev();
extern void _ZN7S468C12D1Ev();
Name_Map name_map_S468C12[] = {
  NSPAIR(_ZN7S468C12C1Ev),
  NSPAIR(_ZN7S468C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C13;
extern VTBL_ENTRY _ZTI7S468C13[];
extern  VTBL_ENTRY _ZTV7S468C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C13[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
static Base_Class bases_S468C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C6,    ABISELECT(23904,15700), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C8,    ABISELECT(30144,19776), //bcp->offset
    21, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S468C5,    ABISELECT(30592,20092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(30888,20292), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(30592,20092), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C13,    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_S468C5,    ABISELECT(496,296), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C9,    ABISELECT(800,496), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S468C12[];
extern void _ZN7S468C12D1Ev();
extern void _ZN7S468C12D0Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZThn800_N7S468C12D1Ev,_ZThn496_N7S468C12D1Ev)();
extern void ABISELECT(_ZThn800_N7S468C12D0Ev,_ZThn496_N7S468C12D0Ev)();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZThn30592_N7S468C12D1Ev,_ZThn20092_N7S468C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev)();
extern void ABISELECT(_ZThn30592_N7S468C12D0Ev,_ZThn20092_N7S468C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev)();
static  VTBL_ENTRY vtc_S468C12[] = {
  ABISELECT(30592,20092),
  ABISELECT(30144,19776),
  ABISELECT(23904,15700),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN7S468C12D1Ev,
  (VTBL_ENTRY)&_ZN7S468C12D0Ev,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  ABISELECT(-800,-496),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N7S468C12D1Ev,_ZThn496_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N7S468C12D0Ev,_ZThn496_N7S468C12D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
  0,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-30144,-19776),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-30592,-20092),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-30592,-20092),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev),
  ABISELECT(-30888,-20292),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev),
};
extern VTBL_ENTRY _ZTV7S468C12[];
extern void _ZN7S468C13D1Ev();
extern void _ZN7S468C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C13__7S468C12[] = {
  ABISELECT(30592,20092),
  ABISELECT(30144,19776),
  ABISELECT(23904,15700),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN7S468C13D1Ev,
  (VTBL_ENTRY)&_ZN7S468C13D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C13__7S468C12[] = {
  0,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C13__7S468C12[] = {
  0,
  0,
  ABISELECT(-30144,-19776),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZThn30592_N7S468C13D1Ev,_ZThn20092_N7S468C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev)();
extern void ABISELECT(_ZThn30592_N7S468C13D0Ev,_ZThn20092_N7S468C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C13__7S468C12[] = {
  ABISELECT(-30592,-20092),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-30592,-20092),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C13__7S468C12[] = {
  ABISELECT(-30888,-20292),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev),
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C12[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__7S468C12[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__7S468C12[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C12[] = {
  {&(_ZTV7S468C12[5]),  5,44},
  {&(_tg__ZTV7S468C13__7S468C12[5]),  5,7},
  {&(_tg__ZTV6S468C6__7S468C13__7S468C12[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C13__7S468C12[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C13__7S468C12[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C13__7S468C12[2]),  2,4},
  {&(_ZTV7S468C12[20]),  20,44},
  {&(_ZTV7S468C12[25]),  25,44},
  {&(_ZTV7S468C12[35]),  35,44},
  {&(_ZTV7S468C12[42]),  42,44},
  {&(_tg__ZTV6S468C4__7S468C12[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__7S468C12[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__7S468C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S468C12[];
extern  VTBL_ENTRY _ZTV7S468C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C12[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N7S468C13D0Ev,_ZThn20092_N7S468C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N7S468C13D1Ev,_ZThn20092_N7S468C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N7S468C12D0Ev,_ZThn20092_N7S468C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N7S468C12D1Ev,_ZThn20092_N7S468C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S468C12 = {  "S468C12", // class name
  bases_S468C12, 9,
  &(vtc_S468C12[0]), // expected_vtbl_contents
  &(vtt_S468C12[0]), // expected_vtt_contents
  ABISELECT(37888,24860), // object size
  NSPAIRA(_ZTI7S468C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S468C12),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S468C12),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C14_nt  {
  char s468c14f0;
  void  mf468c14(); // _ZN10S468C14_nt8mf468c14Ev
};
//SIG(-1 S468C14_nt) C1{ m Fc}


void  S468C14_nt ::mf468c14(){}

//skip512 S468C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C11  : S468C12 , virtual S468C5 , S468C7 , S468C9 {
  ::S468C14_nt s468c11f0;
  int s468c11f1;
  int s468c11f2;
  int s468c11f3:6;
  ::S468C14_nt s468c11f4;
  int s468c11f5;
  ~S468C11(); // tgen
  S468C11(); // tgen
};
//SIG(-1 S468C11) C1{ BC2{ BC3{ VBC4{ v1 FC5{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC5[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC5[5] Fp[5] FC5[5]} VBC7{ v2 v3 Fc FL[10] FD FC5 Fp Fs Fp Fi} VBC8{ BC5 VBC4 BC6 VBC7 v6 FL:2 FD[7] Fp FC4 Fp Fi Fp[2] FC6 FC5 FD[8]} BC6 Fp FC6 FC5 Fs} BC5 BC9{ vd v7 v8 Fi FC5 Fi[2] FU10{ m FL FD[10] FD Fs:0} FD Fi Fi FC7 FL Fi FC7} FC11{ BC8 BC7 BC6 BC4 VBC5 vd v9 v10 FC6 Fi Fp[2] FL[2] Fi[2] Fp Fi FC7 Fi}} VBC5 BC6 BC9 FC12{ m Fc} Fi Fi Fi:6 FC12 Fi}


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

static void Test_S468C11()
{
  extern Class_Descriptor cd_S468C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2485,6532)];
    init_test(&cd_S468C11, buf);
    S468C11 *dp, &lv = *(dp=new (buf) S468C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(39744,26124), "sizeof(S468C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C11)");
    check_base_class_offset(lv, (S468C6*)(S468C13*)(S468C12*), ABISELECT(25456,16764), "S468C11");
    check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(25456,16764), "S468C11");
    check_base_class_offset(lv, (S468C8*)(S468C13*)(S468C12*), ABISELECT(31696,20840), "S468C11");
    check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(31696,20840), "S468C11");
    check_base_class_offset(lv, (S468C5*)(S468C4*), ABISELECT(32144,21156), "S468C11");
    check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(32440,21356), "S468C11");
    check_base_class_offset(lv, (S468C4*)(S468C13*)(S468C12*), ABISELECT(32144,21156), "S468C11");
    /*is_ambiguous_... S468C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C13*)(S468C12*), 0, "S468C11");
    check_base_class_offset(lv, (S468C13*)(S468C12*), 0, "S468C11");
    /*is_ambiguous_... S468C12::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C12*), ABISELECT(496,296), "S468C11");
    check_base_class_offset(lv, (S468C9*)(S468C12*), ABISELECT(800,496), "S468C11");
    check_base_class_offset(lv, (S468C12*), 0, "S468C11");
    /*is_ambiguous_... S468C11::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*), ABISELECT(39440,25924), "S468C11");
    /*is_ambiguous_... S468C11::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), ABISELECT(23904,15700), "S468C11");
    /*is_ambiguous_... S468C11::S468C9 */ AMB_check_base_class_offset(lv, (S468C9*), ABISELECT(23984,15744), "S468C11");
    check_field_offset(lv, s468c11f0, ABISELECT(25424,16744), "S468C11.s468c11f0");
    check_field_offset(lv, s468c11f1, ABISELECT(25428,16748), "S468C11.s468c11f1");
    check_field_offset(lv, s468c11f2, ABISELECT(25432,16752), "S468C11.s468c11f2");
    set_bf_and_test(lv, s468c11f3, ABISELECT(25436,16756), 0, 6, 1, "S468C11");
    set_bf_and_test(lv, s468c11f3, ABISELECT(25436,16756), 0, 6, hide_sll(1LL<<5), "S468C11");
    check_field_offset(lv, s468c11f4, ABISELECT(25437,16757), "S468C11.s468c11f4");
    check_field_offset(lv, s468c11f5, ABISELECT(25440,16760), "S468C11.s468c11f5");
    test_class_info(&lv, &cd_S468C11);
    dp->~S468C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C11(Test_S468C11, "S468C11", ABISELECT(39744,26124));

#else // __cplusplus

extern void _ZN7S468C11C1Ev();
extern void _ZN7S468C11D1Ev();
Name_Map name_map_S468C11[] = {
  NSPAIR(_ZN7S468C11C1Ev),
  NSPAIR(_ZN7S468C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C13;
extern VTBL_ENTRY _ZTI7S468C13[];
extern  VTBL_ENTRY _ZTV7S468C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C13[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
extern Class_Descriptor cd_S468C12;
extern VTBL_ENTRY _ZTI7S468C12[];
extern  VTBL_ENTRY _ZTV7S468C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C12[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
static Base_Class bases_S468C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C6,    ABISELECT(25456,16764), //bcp->offset
    28, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C8,    ABISELECT(31696,20840), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S468C5,    ABISELECT(32144,21156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(32440,21356), //bcp->offset
    51, //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
    4, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(32144,21156), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C13,    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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(496,296), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C9,    ABISELECT(800,496), //bcp->offset
    12, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S468C12,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C5,    ABISELECT(39440,25924), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    ABISELECT(23904,15700), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C9,    ABISELECT(23984,15744), //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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S468C11[];
extern void _ZN7S468C11D1Ev();
extern void _ZN7S468C11D0Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZThn800_N7S468C11D1Ev,_ZThn496_N7S468C11D1Ev)();
extern void ABISELECT(_ZThn800_N7S468C11D0Ev,_ZThn496_N7S468C11D0Ev)();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
extern void ABISELECT(_ZThn23904_N7S468C11D1Ev,_ZThn15700_N7S468C11D1Ev)();
extern void ABISELECT(_ZThn23904_N7S468C11D0Ev,_ZThn15700_N7S468C11D0Ev)();
extern void ABISELECT(_ZThn23984_N7S468C11D1Ev,_ZThn15744_N7S468C11D1Ev)();
extern void ABISELECT(_ZThn23984_N7S468C11D0Ev,_ZThn15744_N7S468C11D0Ev)();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C11D1Ev,_ZTv0_n32_N7S468C11D1Ev)();
extern void ABISELECT(_ZThn32144_N7S468C11D1Ev,_ZThn21156_N7S468C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C11D0Ev,_ZTv0_n32_N7S468C11D0Ev)();
extern void ABISELECT(_ZThn32144_N7S468C11D0Ev,_ZThn21156_N7S468C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S468C11D1Ev,_ZTvn200_n32_N7S468C11D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C11D0Ev,_ZTvn200_n32_N7S468C11D0Ev)();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY vtc_S468C11[] = {
  ABISELECT(39440,25924),
  ABISELECT(32144,21156),
  ABISELECT(31696,20840),
  ABISELECT(25456,16764),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN7S468C11D1Ev,
  (VTBL_ENTRY)&_ZN7S468C11D0Ev,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  ABISELECT(-800,-496),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N7S468C11D1Ev,_ZThn496_N7S468C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N7S468C11D0Ev,_ZThn496_N7S468C11D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn23904_N7S468C11D1Ev,_ZThn15700_N7S468C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn23904_N7S468C11D0Ev,_ZThn15700_N7S468C11D0Ev),
  ABISELECT(-23984,-15744),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn23984_N7S468C11D1Ev,_ZThn15744_N7S468C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn23984_N7S468C11D0Ev,_ZThn15744_N7S468C11D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
  0,
  ABISELECT(-25456,-16764),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-31696,-20840),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-32144,-21156),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-32144,-21156),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C11D1Ev,_ZTv0_n32_N7S468C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C11D0Ev,_ZTv0_n32_N7S468C11D0Ev),
  ABISELECT(-32440,-21356),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C11D1Ev,_ZTvn200_n32_N7S468C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C11D0Ev,_ZTvn200_n32_N7S468C11D0Ev),
  0,
  0,
  ABISELECT(-39440,-25924),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S468C11[];
extern void _ZN7S468C12D1Ev();
extern void _ZN7S468C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C12__7S468C11[] = {
  ABISELECT(32144,21156),
  ABISELECT(31696,20840),
  ABISELECT(25456,16764),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN7S468C12D1Ev,
  (VTBL_ENTRY)&_ZN7S468C12D0Ev,
};
extern void _ZN7S468C13D1Ev();
extern void _ZN7S468C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C137S468C12__7S468C11[] = {
  ABISELECT(32144,21156),
  ABISELECT(31696,20840),
  ABISELECT(25456,16764),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN7S468C13D1Ev,
  (VTBL_ENTRY)&_ZN7S468C13D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C137S468C12__7S468C11[] = {
  0,
  ABISELECT(-25456,-16764),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C137S468C12__7S468C11[] = {
  0,
  0,
  ABISELECT(-31696,-20840),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZThn32144_N7S468C13D1Ev,_ZThn21156_N7S468C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev)();
extern void ABISELECT(_ZThn32144_N7S468C13D0Ev,_ZThn21156_N7S468C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C137S468C12__7S468C11[] = {
  ABISELECT(-32144,-21156),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-32144,-21156),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C137S468C12__7S468C11[] = {
  ABISELECT(-32440,-21356),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C12__7S468C11[] = {
  0,
  ABISELECT(-25456,-16764),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C12__7S468C11[] = {
  0,
  0,
  ABISELECT(-31696,-20840),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZThn32144_N7S468C12D1Ev,_ZThn21156_N7S468C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev)();
extern void ABISELECT(_ZThn32144_N7S468C12D0Ev,_ZThn21156_N7S468C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C12__7S468C11[] = {
  ABISELECT(-32144,-21156),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-32144,-21156),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C12__7S468C11[] = {
  ABISELECT(-32440,-21356),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev),
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C11[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__7S468C11[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__7S468C11[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C11[] = {
  {&(_ZTV7S468C11[6]),  6,61},
  {&(_tg__ZTV7S468C12__7S468C11[5]),  5,7},
  {&(_tg__ZTV7S468C137S468C12__7S468C11[5]),  5,7},
  {&(_tg__ZTV6S468C6__7S468C137S468C12__7S468C11[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C137S468C12__7S468C11[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C137S468C12__7S468C11[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C137S468C12__7S468C11[2]),  2,4},
  {&(_tg__ZTV6S468C6__7S468C12__7S468C11[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C12__7S468C11[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C12__7S468C11[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C12__7S468C11[2]),  2,4},
  {&(_ZTV7S468C11[31]),  31,61},
  {&(_ZTV7S468C11[36]),  36,61},
  {&(_ZTV7S468C11[46]),  46,61},
  {&(_ZTV7S468C11[53]),  53,61},
  {&(_ZTV7S468C11[59]),  59,61},
  {&(_tg__ZTV6S468C4__7S468C11[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__7S468C11[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__7S468C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S468C11[];
extern  VTBL_ENTRY _ZTV7S468C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C11[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S468C12D0Ev,_ZThn21156_N7S468C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S468C12D1Ev,_ZThn21156_N7S468C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S468C13D0Ev,_ZThn21156_N7S468C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S468C13D1Ev,_ZThn21156_N7S468C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C11D0Ev,_ZTv0_n32_N7S468C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S468C11D0Ev,_ZThn21156_N7S468C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C11D1Ev,_ZTv0_n32_N7S468C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S468C11D1Ev,_ZThn21156_N7S468C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S468C11 = {  "S468C11", // class name
  bases_S468C11, 13,
  &(vtc_S468C11[0]), // expected_vtbl_contents
  &(vtt_S468C11[0]), // expected_vtt_contents
  ABISELECT(39744,26124), // object size
  NSPAIRA(_ZTI7S468C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S468C11),61, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S468C11),19, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C2  : S468C3 , S468C4 , virtual S468C9 {
  void *s468c2f0;
  long double s468c2f1;
  long double s468c2f2;
  ::S468C11 s468c2f3;
  virtual  ~S468C2(); // _ZN6S468C2D2Ev
  virtual void  v11(); // _ZN6S468C23v11Ev
  S468C2(); // tgen
};
//SIG(-1 S468C2) C1{ BC2{ BC3{ BC4{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC5{ v4 FC4[8] FC4[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC4[5] Fp[5] FC4[5]} BC6 VBC7{ v5 v6 Fc FL[10] FD FC4 Fp Fs Fp Fi} v7 FL:2 FD[7] Fp FC5 Fp Fi Fp[2] FC6 FC4 FD[8]} BC7 BC6 BC5 VBC4 vd v8 v9 FC6 Fi Fp[2] FL[2] Fi[2] Fp Fi FC7 Fi} BC3 VBC8{ vd v10 v11 Fi FC4 Fi[2] FU9{ m FL FD[10] FD Fs:0} FD Fi Fi FC7 FL Fi FC7} vd v1 Fp FD FD FC10{ BC11{ BC12{ VBC5 VBC7 VBC3 BC6 Fp FC6 FC4 Fs} BC4 BC8 FC2} VBC4 BC6 BC8 FC13{ m Fc} Fi Fi Fi:6 FC13 Fi}}


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

static void Test_S468C2()
{
  extern Class_Descriptor cd_S468C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4388,11532)];
    init_test(&cd_S468C2, buf);
    S468C2 *dp, &lv = *(dp=new (buf) S468C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(70192,46124), "sizeof(S468C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C2)");
    check_base_class_offset(lv, (S468C5*)(S468C4*)(S468C3*), 0, "S468C2");
    check_base_class_offset(lv, (S468C6*)(S468C4*)(S468C3*), ABISELECT(61760,40532), "S468C2");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(61760,40532), "S468C2");
    check_base_class_offset(lv, (S468C7*)(S468C4*)(S468C3*), ABISELECT(296,200), "S468C2");
    check_base_class_offset(lv, (S468C8*)(S468C4*)(S468C3*), ABISELECT(68000,44608), "S468C2");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(68000,44608), "S468C2");
    check_base_class_offset(lv, (S468C4*)(S468C3*), 0, "S468C2");
    /*is_ambiguous_... S468C3::S468C8 */ AMB_check_base_class_offset(lv, (S468C8*)(S468C3*), ABISELECT(7296,4768), "S468C2");
    /*is_ambiguous_... S468C3::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C3*), ABISELECT(7744,5084), "S468C2");
    /*is_ambiguous_... S468C3::S468C6 */ AMB_check_base_class_offset(lv, (S468C6*)(S468C3*), ABISELECT(7824,5128), "S468C2");
    /*is_ambiguous_... S468C3::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C3*), ABISELECT(68448,44924), "S468C2");
    check_base_class_offset(lv, (S468C3*), 0, "S468C2");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C4*), ABISELECT(14672,9612), "S468C2");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(14968,9812), "S468C2");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C4*), ABISELECT(14672,9612), "S468C2");
    check_base_class_offset(lv, (S468C9*), ABISELECT(68752,45124), "S468C2");
    check_field_offset(lv, s468c2f0, ABISELECT(21968,14380), "S468C2.s468c2f0");
    check_field_offset(lv, s468c2f1, ABISELECT(21984,14384), "S468C2.s468c2f1");
    check_field_offset(lv, s468c2f2, ABISELECT(22000,14396), "S468C2.s468c2f2");
    check_field_offset(lv, s468c2f3, ABISELECT(22016,14408), "S468C2.s468c2f3");
    test_class_info(&lv, &cd_S468C2);
    dp->~S468C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C2(Test_S468C2, "S468C2", ABISELECT(70192,46124));

#else // __cplusplus

extern void _ZN6S468C2C1Ev();
extern void _ZN6S468C2D2Ev();
Name_Map name_map_S468C2[] = {
  NSPAIR(_ZN6S468C2C1Ev),
  NSPAIR(_ZN6S468C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C3;
extern VTBL_ENTRY _ZTI6S468C3[];
extern  VTBL_ENTRY _ZTV6S468C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C3[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
static Base_Class bases_S468C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S468C6,    ABISELECT(61760,40532), //bcp->offset
    42, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(296,200), //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_S468C8,    ABISELECT(68000,44608), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S468C4,    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
    9, //immediately_derived
  0, 0},
  {&cd_S468C8,    ABISELECT(7296,4768), //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(7744,5084), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C6,    ABISELECT(7824,5128), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(68448,44924), //bcp->offset
    52, //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
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S468C3,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C5,    ABISELECT(14672,9612), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C7,    ABISELECT(14968,9812), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(14672,9612), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C9,    ABISELECT(68752,45124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //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 _ZTI6S468C2[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C2D1Ev();
extern void _ZN6S468C2D0Ev();
extern void _ZN6S468C32v7Ev();
extern void _ZN6S468C32v8Ev();
extern void _ZN6S468C23v11Ev();
extern void ABISELECT(_ZThn296_N6S468C2D1Ev,_ZThn200_N6S468C2D1Ev)();
extern void ABISELECT(_ZThn296_N6S468C2D0Ev,_ZThn200_N6S468C2D0Ev)();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void ABISELECT(_ZThn7744_N6S468C2D1Ev,_ZThn5084_N6S468C2D1Ev)();
extern void ABISELECT(_ZThn7744_N6S468C2D0Ev,_ZThn5084_N6S468C2D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZThn14672_N6S468C2D1Ev,_ZThn9612_N6S468C2D1Ev)();
extern void ABISELECT(_ZThn14672_N6S468C2D0Ev,_ZThn9612_N6S468C2D0Ev)();
extern void ABISELECT(_ZThn14968_N6S468C2D1Ev,_ZThn9812_N6S468C2D1Ev)();
extern void ABISELECT(_ZThn14968_N6S468C2D0Ev,_ZThn9812_N6S468C2D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N6S468C2D1Ev,_ZTv0_n12_N6S468C2D1Ev)();
extern void ABISELECT(_ZThn68752_N6S468C2D1Ev,_ZThn45124_N6S468C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S468C2D0Ev,_ZTv0_n12_N6S468C2D0Ev)();
extern void ABISELECT(_ZThn68752_N6S468C2D0Ev,_ZThn45124_N6S468C2D0Ev)() __attribute__((weak));
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
static  VTBL_ENTRY vtc_S468C2[] = {
  ABISELECT(68752,45124),
  ABISELECT(68448,44924),
  ABISELECT(68000,44608),
  ABISELECT(61760,40532),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C2D1Ev,
  (VTBL_ENTRY)&_ZN6S468C2D0Ev,
  (VTBL_ENTRY)&_ZN6S468C32v7Ev,
  (VTBL_ENTRY)&_ZN6S468C32v8Ev,
  (VTBL_ENTRY)&_ZN6S468C23v11Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S468C2D1Ev,_ZThn200_N6S468C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S468C2D0Ev,_ZThn200_N6S468C2D0Ev),
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-7744,-5084),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S468C2D1Ev,_ZThn5084_N6S468C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S468C2D0Ev,_ZThn5084_N6S468C2D0Ev),
  ABISELECT(-7824,-5128),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  ABISELECT(53328,34996),
  ABISELECT(47088,30920),
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S468C2D1Ev,_ZThn9612_N6S468C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S468C2D0Ev,_ZThn9612_N6S468C2D0Ev),
  ABISELECT(-14968,-9812),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn14968_N6S468C2D1Ev,_ZThn9812_N6S468C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14968_N6S468C2D0Ev,_ZThn9812_N6S468C2D0Ev),
  0,
  ABISELECT(-61760,-40532),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-68000,-44608),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  0,
  0,
  ABISELECT(-68448,-44924),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  0,
  0,
  ABISELECT(-68752,-45124),
  ABISELECT(-68752,-45124),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S468C2D1Ev,_ZTv0_n12_N6S468C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S468C2D0Ev,_ZTv0_n12_N6S468C2D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
};
extern VTBL_ENTRY _ZTV6S468C2[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C3D1Ev();
extern void _ZN6S468C3D0Ev();
extern void _ZN6S468C32v7Ev();
extern void _ZN6S468C32v8Ev();
static  VTBL_ENTRY _tg__ZTV6S468C3__6S468C2[] = {
  ABISELECT(68448,44924),
  ABISELECT(68000,44608),
  ABISELECT(61760,40532),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C3D1Ev,
  (VTBL_ENTRY)&_ZN6S468C3D0Ev,
  (VTBL_ENTRY)&_ZN6S468C32v7Ev,
  (VTBL_ENTRY)&_ZN6S468C32v8Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C46S468C3__6S468C2[] = {
  ABISELECT(68000,44608),
  ABISELECT(61760,40532),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C46S468C3__6S468C2[] = {
  0,
  ABISELECT(-61760,-40532),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C46S468C3__6S468C2[] = {
  0,
  0,
  ABISELECT(-68000,-44608),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C3__6S468C2[] = {
  0,
  ABISELECT(-61760,-40532),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C3__6S468C2[] = {
  0,
  0,
  ABISELECT(-68000,-44608),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S468C5__A1__6S468C3__6S468C2[] = {
  0,
  0,
  ABISELECT(-68448,-44924),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__A1__6S468C2[] = {
  ABISELECT(53328,34996),
  ABISELECT(47088,30920),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__A1__6S468C2[] = {
  0,
  ABISELECT(-47088,-30920),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__A1__6S468C2[] = {
  0,
  0,
  ABISELECT(-53328,-34996),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C2[] = {
  {&(_ZTV6S468C2[6]),  6,67},
  {&(_tg__ZTV6S468C3__6S468C2[5]),  5,12},
  {&(_tg__ZTV6S468C46S468C3__6S468C2[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C46S468C3__6S468C2[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C46S468C3__6S468C2[4]),  4,6},
  {&(_tg__ZTV6S468C6__6S468C3__6S468C2[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C3__6S468C2[4]),  4,6},
  {&(_tg__ZTV6S468C5__A1__6S468C3__6S468C2[4]),  4,6},
  {&(_tg__ZTV6S468C4__A1__6S468C2[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__A1__6S468C2[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__A1__6S468C2[4]),  4,6},
  {&(_ZTV6S468C2[45]),  45,67},
  {&(_ZTV6S468C2[50]),  50,67},
  {&(_ZTV6S468C2[56]),  56,67},
  {&(_ZTV6S468C2[33]),  33,67},
  {&(_ZTV6S468C2[63]),  63,67},
};
extern VTBL_ENTRY _ZTI6S468C2[];
extern  VTBL_ENTRY _ZTV6S468C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C2[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S468C2D0Ev,_ZTv0_n12_N6S468C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn68752_N6S468C2D0Ev,_ZThn45124_N6S468C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S468C2D1Ev,_ZTv0_n12_N6S468C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn68752_N6S468C2D1Ev,_ZThn45124_N6S468C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S468C2 = {  "S468C2", // class name
  bases_S468C2, 14,
  &(vtc_S468C2[0]), // expected_vtbl_contents
  &(vtt_S468C2[0]), // expected_vtt_contents
  ABISELECT(70192,46124), // object size
  NSPAIRA(_ZTI6S468C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S468C2),67, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S468C2),16, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C15  : S468C7 , S468C8 , S468C4 {
  void *s468c15f0;
  ::S468C4 s468c15f1;
  char s468c15f2[7];
  ::S468C9 s468c15f3;
  int s468c15f4;
  char s468c15f5[4];
  void *s468c15f6;
  ::S468C4 s468c15f7;
  int s468c15f8;
  int s468c15f9[7];
  int s468c15f10;
  ~S468C15(); // tgen
  S468C15(); // tgen
};
//SIG(-1 S468C15) C1{ BC2{ vd m Fp FL Fp[7]} BC3{ v1 v2 Fc FL[10] FD FC4{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fp Fs Fp Fi} BC5{ BC4 VBC6{ v5 FC4[8] FC4[2] Fp Fi FC2 FC4[5] Fp[5] FC4[5]} BC2 VBC3 v6 FL:2 FD[7] Fp FC6 Fp Fi Fp[2] FC2 FC4 FD[8]} Fp FC5 Fc[7] FC7{ vd v7 v8 Fi FC4 Fi[2] FU8{ m FL FD[10] FD Fs:0} FD Fi Fi FC3 FL Fi FC3} Fi Fc[4] Fp FC5 Fi Fi[7] Fi}


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

static void Test_S468C15()
{
  extern Class_Descriptor cd_S468C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2752,7226)];
    init_test(&cd_S468C15, buf);
    S468C15 *dp, &lv = *(dp=new (buf) S468C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(44016,28900), "sizeof(S468C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C15)");
    /*is_ambiguous_... S468C15::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), 0, "S468C15");
    /*is_ambiguous_... S468C15::S468C8 */ AMB_check_base_class_offset(lv, (S468C8*), ABISELECT(80,44), "S468C15");
    check_base_class_offset(lv, (S468C5*)(S468C4*), ABISELECT(528,360), "S468C15");
    check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(37328,24508), "S468C15");
    check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(824,560), "S468C15");
    check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(43568,28584), "S468C15");
    check_base_class_offset(lv, (S468C4*), ABISELECT(528,360), "S468C15");
    check_field_offset(lv, s468c15f0, ABISELECT(7824,5128), "S468C15.s468c15f0");
    check_field_offset(lv, s468c15f1, ABISELECT(7840,5132), "S468C15.s468c15f1");
    check_field_offset(lv, s468c15f2, ABISELECT(21824,14292), "S468C15.s468c15f2");
    check_field_offset(lv, s468c15f3, ABISELECT(21840,14300), "S468C15.s468c15f3");
    check_field_offset(lv, s468c15f4, ABISELECT(23280,15300), "S468C15.s468c15f4");
    check_field_offset(lv, s468c15f5, ABISELECT(23284,15304), "S468C15.s468c15f5");
    check_field_offset(lv, s468c15f6, ABISELECT(23288,15308), "S468C15.s468c15f6");
    check_field_offset(lv, s468c15f7, ABISELECT(23296,15312), "S468C15.s468c15f7");
    check_field_offset(lv, s468c15f8, ABISELECT(37280,24472), "S468C15.s468c15f8");
    check_field_offset(lv, s468c15f9, ABISELECT(37284,24476), "S468C15.s468c15f9");
    check_field_offset(lv, s468c15f10, ABISELECT(37312,24504), "S468C15.s468c15f10");
    test_class_info(&lv, &cd_S468C15);
    dp->~S468C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C15(Test_S468C15, "S468C15", ABISELECT(44016,28900));

#else // __cplusplus

extern void _ZN7S468C15C1Ev();
extern void _ZN7S468C15D1Ev();
Name_Map name_map_S468C15[] = {
  NSPAIR(_ZN7S468C15C1Ev),
  NSPAIR(_ZN7S468C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
static Base_Class bases_S468C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S468C8,    ABISELECT(80,44), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C5,    ABISELECT(528,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S468C6,    ABISELECT(37328,24508), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(824,560), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S468C8,    ABISELECT(43568,28584), //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C4,    ABISELECT(528,360), //bcp->offset
    10, //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S468C15[];
extern void _ZN7S468C15D1Ev();
extern void _ZN7S468C15D0Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZThn528_N7S468C15D1Ev,_ZThn360_N7S468C15D1Ev)();
extern void ABISELECT(_ZThn528_N7S468C15D0Ev,_ZThn360_N7S468C15D0Ev)();
extern void ABISELECT(_ZThn824_N7S468C15D1Ev,_ZThn560_N7S468C15D1Ev)();
extern void ABISELECT(_ZThn824_N7S468C15D0Ev,_ZThn560_N7S468C15D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY vtc_S468C15[] = {
  ABISELECT(43568,28584),
  ABISELECT(37328,24508),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN7S468C15D1Ev,
  (VTBL_ENTRY)&_ZN7S468C15D0Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(43040,28224),
  ABISELECT(36800,24148),
  ABISELECT(-528,-360),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S468C15D1Ev,_ZThn360_N7S468C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S468C15D0Ev,_ZThn360_N7S468C15D0Ev),
  ABISELECT(-824,-560),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn824_N7S468C15D1Ev,_ZThn560_N7S468C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn824_N7S468C15D0Ev,_ZThn560_N7S468C15D0Ev),
  0,
  ABISELECT(-37328,-24508),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-43568,-28584),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern VTBL_ENTRY _ZTV7S468C15[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C15[] = {
  ABISELECT(43040,28224),
  ABISELECT(36800,24148),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__7S468C15[] = {
  0,
  ABISELECT(-36800,-24148),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__7S468C15[] = {
  0,
  0,
  ABISELECT(-43040,-28224),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C15[] = {
  {&(_ZTV7S468C15[4]),  4,33},
  {&(_tg__ZTV6S468C4__7S468C15[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__7S468C15[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__7S468C15[4]),  4,6},
  {&(_ZTV7S468C15[14]),  14,33},
  {&(_ZTV7S468C15[26]),  26,33},
  {&(_ZTV7S468C15[31]),  31,33},
};
extern VTBL_ENTRY _ZTI7S468C15[];
extern  VTBL_ENTRY _ZTV7S468C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C15[];
Class_Descriptor cd_S468C15 = {  "S468C15", // class name
  bases_S468C15, 7,
  &(vtc_S468C15[0]), // expected_vtbl_contents
  &(vtt_S468C15[0]), // expected_vtt_contents
  ABISELECT(44016,28900), // object size
  NSPAIRA(_ZTI7S468C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S468C15),33, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S468C15),7, //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  S468C19  : S468C6 , S468C7 , virtual S468C5 {
  int s468c19f0;
  short s468c19f1;
  unsigned short s468c19f2:1;
  void *s468c19f3;
  long s468c19f4;
  ::S468C6 s468c19f5;
  int s468c19f6[2];
  char s468c19f7[3];
  int s468c19f8;
  virtual  ~S468C19(); // _ZN7S468C19D2Ev
  virtual void  v12(); // _ZN7S468C193v12Ev
  S468C19(); // tgen
};
//SIG(-1 S468C19) C1{ BC2{ v2 FC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC4 VBC3 vd v1 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi}


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

static void Test_S468C19()
{
  extern Class_Descriptor cd_S468C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(808,2108)];
    init_test(&cd_S468C19, buf);
    S468C19 *dp, &lv = *(dp=new (buf) S468C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12912,8428), "sizeof(S468C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C19)");
    check_base_class_offset(lv, (S468C6*), 0, "S468C19");
    check_base_class_offset(lv, (S468C7*), ABISELECT(6240,4076), "S468C19");
    check_base_class_offset(lv, (S468C5*), ABISELECT(12608,8228), "S468C19");
    check_field_offset(lv, s468c19f0, ABISELECT(6320,4120), "S468C19.s468c19f0");
    check_field_offset(lv, s468c19f1, ABISELECT(6324,4124), "S468C19.s468c19f1");
    set_bf_and_test(lv, s468c19f2, ABISELECT(6326,4126), 0, 1, 1, "S468C19");
    check_field_offset(lv, s468c19f3, ABISELECT(6328,4128), "S468C19.s468c19f3");
    check_field_offset(lv, s468c19f4, ABISELECT(6336,4132), "S468C19.s468c19f4");
    check_field_offset(lv, s468c19f5, ABISELECT(6352,4136), "S468C19.s468c19f5");
    check_field_offset(lv, s468c19f6, ABISELECT(12592,8212), "S468C19.s468c19f6");
    check_field_offset(lv, s468c19f7, ABISELECT(12600,8220), "S468C19.s468c19f7");
    check_field_offset(lv, s468c19f8, ABISELECT(12604,8224), "S468C19.s468c19f8");
    test_class_info(&lv, &cd_S468C19);
    dp->~S468C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C19(Test_S468C19, "S468C19", ABISELECT(12912,8428));

#else // __cplusplus

extern void _ZN7S468C19C1Ev();
extern void _ZN7S468C19D2Ev();
Name_Map name_map_S468C19[] = {
  NSPAIR(_ZN7S468C19C1Ev),
  NSPAIR(_ZN7S468C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
static Base_Class bases_S468C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S468C7,    ABISELECT(6240,4076), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C5,    ABISELECT(12608,8228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S468C19[];
extern void _ZN6S468C62v3Ev();
extern void _ZN7S468C19D1Ev();
extern void _ZN7S468C19D0Ev();
extern void _ZN7S468C193v12Ev();
extern void ABISELECT(_ZThn6240_N7S468C19D1Ev,_ZThn4076_N7S468C19D1Ev)();
extern void ABISELECT(_ZThn6240_N7S468C19D0Ev,_ZThn4076_N7S468C19D0Ev)();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY vtc_S468C19[] = {
  ABISELECT(12608,8228),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C19[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&_ZN7S468C19D1Ev,
  (VTBL_ENTRY)&_ZN7S468C19D0Ev,
  (VTBL_ENTRY)&_ZN7S468C193v12Ev,
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI7S468C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S468C19D1Ev,_ZThn4076_N7S468C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S468C19D0Ev,_ZThn4076_N7S468C19D0Ev),
  0,
  0,
  ABISELECT(-12608,-8228),
  (VTBL_ENTRY)&(_ZTI7S468C19[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S468C19[];
static  VTT_ENTRY vtt_S468C19[] = {
  {&(_ZTV7S468C19[3]),  3,17},
  {&(_ZTV7S468C19[15]),  15,17},
};
extern VTBL_ENTRY _ZTI7S468C19[];
extern  VTBL_ENTRY _ZTV7S468C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C19[];
Class_Descriptor cd_S468C19 = {  "S468C19", // class name
  bases_S468C19, 3,
  &(vtc_S468C19[0]), // expected_vtbl_contents
  &(vtt_S468C19[0]), // expected_vtt_contents
  ABISELECT(12912,8428), // object size
  NSPAIRA(_ZTI7S468C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S468C19),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S468C19),2, //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  S468C18  : S468C6 , virtual S468C5 , virtual S468C19 , S468C12 {
  void *s468c18f0;
  virtual  ~S468C18(); // _ZN7S468C18D2Ev
  S468C18(); // tgen
};
//SIG(-1 S468C18) C1{ BC2{ v1 FC3{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} VBC3 VBC5{ BC2 BC4 VBC3 vd v4 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi} BC6{ BC7{ VBC2 VBC8{ v5 v6 Fc FL[10] FD FC3 Fp Fs Fp Fi} VBC9{ BC3 VBC2 BC4 VBC8 v7 FL:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} BC4 Fp FC4 FC3 Fs} BC3 BC10{ vd v8 v9 Fi FC3 Fi[2] FU11{ m FL FD[10] FD Fs:0} FD Fi Fi FC8 FL Fi FC8} FC12{ BC9 BC8 BC4 BC2 VBC3 vd v10 v11 FC4 Fi Fp[2] FL[2] Fi[2] Fp Fi FC8 Fi}} vd Fp}


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

static void Test_S468C18()
{
  extern Class_Descriptor cd_S468C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3567,9343)];
    init_test(&cd_S468C18, buf);
    S468C18 *dp, &lv = *(dp=new (buf) S468C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(57056,37368), "sizeof(S468C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C18)");
    /*is_ambiguous_... S468C18::S468C6 */ AMB_check_base_class_offset(lv, (S468C6*), 0, "S468C18");
    /*is_ambiguous_... S468C18::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*), ABISELECT(30160,19780), "S468C18");
    check_base_class_offset(lv, (S468C5*)(S468C19*), ABISELECT(30160,19780), "S468C18");
    check_base_class_offset(lv, (S468C6*)(S468C19*), ABISELECT(30464,19980), "S468C18");
    check_base_class_offset(lv, (S468C7*)(S468C19*), ABISELECT(36704,24056), "S468C18");
    check_base_class_offset(lv, (S468C19*), ABISELECT(30464,19980), "S468C18");
    check_base_class_offset(lv, (S468C6*)(S468C13*)(S468C12*), ABISELECT(43072,28208), "S468C18");
    check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(43072,28208), "S468C18");
    check_base_class_offset(lv, (S468C8*)(S468C13*)(S468C12*), ABISELECT(49312,32284), "S468C18");
    check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(49312,32284), "S468C18");
    check_base_class_offset(lv, (S468C5*)(S468C4*), ABISELECT(49760,32600), "S468C18");
    check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(50056,32800), "S468C18");
    check_base_class_offset(lv, (S468C4*)(S468C13*)(S468C12*), ABISELECT(49760,32600), "S468C18");
    /*is_ambiguous_... S468C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C13*)(S468C12*), ABISELECT(6240,4076), "S468C18");
    check_base_class_offset(lv, (S468C13*)(S468C12*), ABISELECT(6240,4076), "S468C18");
    /*is_ambiguous_... S468C12::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C12*), ABISELECT(6736,4372), "S468C18");
    check_base_class_offset(lv, (S468C9*)(S468C12*), ABISELECT(7040,4572), "S468C18");
    check_base_class_offset(lv, (S468C12*), ABISELECT(6240,4076), "S468C18");
    check_field_offset(lv, s468c18f0, ABISELECT(30144,19776), "S468C18.s468c18f0");
    test_class_info(&lv, &cd_S468C18);
    dp->~S468C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C18(Test_S468C18, "S468C18", ABISELECT(57056,37368));

#else // __cplusplus

extern void _ZN7S468C18C1Ev();
extern void _ZN7S468C18D2Ev();
Name_Map name_map_S468C18[] = {
  NSPAIR(_ZN7S468C18C1Ev),
  NSPAIR(_ZN7S468C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C19;
extern VTBL_ENTRY _ZTI7S468C19[];
extern  VTBL_ENTRY _ZTV7S468C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C19[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C13;
extern VTBL_ENTRY _ZTI7S468C13[];
extern  VTBL_ENTRY _ZTV7S468C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C13[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
extern Class_Descriptor cd_S468C12;
extern VTBL_ENTRY _ZTI7S468C12[];
extern  VTBL_ENTRY _ZTV7S468C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C12[];
static Base_Class bases_S468C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C5,    ABISELECT(30160,19780), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C6,    ABISELECT(30464,19980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(36704,24056), //bcp->offset
    43, //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C19,    ABISELECT(30464,19980), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C6,    ABISELECT(43072,28208), //bcp->offset
    47, //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
    9, //immediately_derived
  0, 1},
  {&cd_S468C8,    ABISELECT(49312,32284), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 1},
  {&cd_S468C5,    ABISELECT(49760,32600), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C7,    ABISELECT(50056,32800), //bcp->offset
    70, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(49760,32600), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(6240,4076), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S468C13,    ABISELECT(6240,4076), //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(6736,4372), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S468C9,    ABISELECT(7040,4572), //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
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S468C12,    ABISELECT(6240,4076), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S468C18[];
extern void _ZN6S468C62v3Ev();
extern void _ZN7S468C18D1Ev();
extern void _ZN7S468C18D0Ev();
extern void ABISELECT(_ZThn6240_N7S468C18D1Ev,_ZThn4076_N7S468C18D1Ev)();
extern void ABISELECT(_ZThn6240_N7S468C18D0Ev,_ZThn4076_N7S468C18D0Ev)();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZThn7040_N7S468C18D1Ev,_ZThn4572_N7S468C18D1Ev)();
extern void ABISELECT(_ZThn7040_N7S468C18D0Ev,_ZThn4572_N7S468C18D0Ev)();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S468C18D1Ev,_ZTv0_n20_N7S468C18D1Ev)();
extern void ABISELECT(_ZThn30464_N7S468C18D1Ev,_ZThn19980_N7S468C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S468C18D0Ev,_ZTv0_n20_N7S468C18D0Ev)();
extern void ABISELECT(_ZThn30464_N7S468C18D0Ev,_ZThn19980_N7S468C18D0Ev)() __attribute__((weak));
extern void _ZN7S468C193v12Ev();
extern void ABISELECT(_ZTvn6240_n40_N7S468C18D1Ev,_ZTvn4076_n20_N7S468C18D1Ev)();
extern void ABISELECT(_ZTvn6240_n40_N7S468C18D0Ev,_ZTvn4076_n20_N7S468C18D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C18D1Ev,_ZTv0_n32_N7S468C18D1Ev)();
extern void ABISELECT(_ZThn49760_N7S468C18D1Ev,_ZThn32600_N7S468C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C18D0Ev,_ZTv0_n32_N7S468C18D0Ev)();
extern void ABISELECT(_ZThn49760_N7S468C18D0Ev,_ZThn32600_N7S468C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S468C18D1Ev,_ZTvn200_n32_N7S468C18D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C18D0Ev,_ZTvn200_n32_N7S468C18D0Ev)();
static  VTBL_ENTRY vtc_S468C18[] = {
  ABISELECT(49760,32600),
  ABISELECT(49312,32284),
  ABISELECT(43072,28208),
  ABISELECT(30464,19980),
  ABISELECT(30160,19780),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&_ZN7S468C18D1Ev,
  (VTBL_ENTRY)&_ZN7S468C18D0Ev,
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S468C18D1Ev,_ZThn4076_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S468C18D0Ev,_ZThn4076_N7S468C18D0Ev),
  ABISELECT(-6736,-4372),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  ABISELECT(-7040,-4572),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7040_N7S468C18D1Ev,_ZThn4572_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7040_N7S468C18D0Ev,_ZThn4572_N7S468C18D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
  0,
  0,
  ABISELECT(-30160,-19780),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  0,
  ABISELECT(-30464,-19980),
  0,
  ABISELECT(-304,-200),
  ABISELECT(-30464,-19980),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S468C18D1Ev,_ZTv0_n20_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S468C18D0Ev,_ZTv0_n20_N7S468C18D0Ev),
  (VTBL_ENTRY)&_ZN7S468C193v12Ev,
  ABISELECT(-36704,-24056),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S468C18D1Ev,_ZTvn4076_n20_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S468C18D0Ev,_ZTvn4076_n20_N7S468C18D0Ev),
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-49312,-32284),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-49760,-32600),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-49760,-32600),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C18D1Ev,_ZTv0_n32_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C18D0Ev,_ZTv0_n32_N7S468C18D0Ev),
  ABISELECT(-50056,-32800),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C18D1Ev,_ZTvn200_n32_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C18D0Ev,_ZTvn200_n32_N7S468C18D0Ev),
};
extern VTBL_ENTRY _ZTV7S468C18[];
extern void _ZN7S468C12D1Ev();
extern void _ZN7S468C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C12__7S468C18[] = {
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN7S468C12D1Ev,
  (VTBL_ENTRY)&_ZN7S468C12D0Ev,
};
extern void _ZN7S468C13D1Ev();
extern void _ZN7S468C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C137S468C12__7S468C18[] = {
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN7S468C13D1Ev,
  (VTBL_ENTRY)&_ZN7S468C13D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C137S468C12__7S468C18[] = {
  0,
  ABISELECT(-36832,-24132),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C137S468C12__7S468C18[] = {
  0,
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZThn43520_N7S468C13D1Ev,_ZThn28524_N7S468C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev)();
extern void ABISELECT(_ZThn43520_N7S468C13D0Ev,_ZThn28524_N7S468C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C137S468C12__7S468C18[] = {
  ABISELECT(-43520,-28524),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-43520,-28524),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C137S468C12__7S468C18[] = {
  ABISELECT(-43816,-28724),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C12__7S468C18[] = {
  0,
  ABISELECT(-36832,-24132),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C12__7S468C18[] = {
  0,
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZThn43520_N7S468C12D1Ev,_ZThn28524_N7S468C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev)();
extern void ABISELECT(_ZThn43520_N7S468C12D0Ev,_ZThn28524_N7S468C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C12__7S468C18[] = {
  ABISELECT(-43520,-28524),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-43520,-28524),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C12__7S468C18[] = {
  ABISELECT(-43816,-28724),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev),
};
extern void _ZN6S468C62v3Ev();
extern void _ZN7S468C19D1Ev();
extern void _ZN7S468C19D0Ev();
extern void _ZN7S468C193v12Ev();
static  VTBL_ENTRY _tg__ZTV7S468C19__7S468C18[] = {
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C19[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&_ZN7S468C19D1Ev,
  (VTBL_ENTRY)&_ZN7S468C19D0Ev,
  (VTBL_ENTRY)&_ZN7S468C193v12Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S468C5__7S468C19__7S468C18[] = {
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S468C19[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C18[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__7S468C18[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__7S468C18[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C18[] = {
  {&(_ZTV7S468C18[7]),  7,74},
  {&(_tg__ZTV7S468C12__7S468C18[5]),  5,7},
  {&(_tg__ZTV7S468C137S468C12__7S468C18[5]),  5,7},
  {&(_tg__ZTV6S468C6__7S468C137S468C12__7S468C18[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C137S468C12__7S468C18[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C137S468C12__7S468C18[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C137S468C12__7S468C18[2]),  2,4},
  {&(_tg__ZTV6S468C6__7S468C12__7S468C18[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C12__7S468C18[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C12__7S468C18[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C12__7S468C18[2]),  2,4},
  {&(_ZTV7S468C18[31]),  31,74},
  {&(_ZTV7S468C18[39]),  39,74},
  {&(_ZTV7S468C18[45]),  45,74},
  {&(_ZTV7S468C18[15]),  15,74},
  {&(_ZTV7S468C18[50]),  50,74},
  {&(_ZTV7S468C18[55]),  55,74},
  {&(_ZTV7S468C18[65]),  65,74},
  {&(_ZTV7S468C18[72]),  72,74},
  {&(_tg__ZTV7S468C19__7S468C18[3]),  3,7},
  {&(_tg__ZTV6S468C5__7S468C19__7S468C18[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C18[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__7S468C18[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__7S468C18[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S468C18[];
extern  VTBL_ENTRY _ZTV7S468C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C18[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N7S468C12D0Ev,_ZThn28524_N7S468C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N7S468C12D1Ev,_ZThn28524_N7S468C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N7S468C13D0Ev,_ZThn28524_N7S468C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N7S468C13D1Ev,_ZThn28524_N7S468C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C18D0Ev,_ZTv0_n32_N7S468C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49760_N7S468C18D0Ev,_ZThn32600_N7S468C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C18D1Ev,_ZTv0_n32_N7S468C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49760_N7S468C18D1Ev,_ZThn32600_N7S468C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S468C18D0Ev,_ZTv0_n20_N7S468C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N7S468C18D0Ev,_ZThn19980_N7S468C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S468C18D1Ev,_ZTv0_n20_N7S468C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N7S468C18D1Ev,_ZThn19980_N7S468C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S468C18 = {  "S468C18", // class name
  bases_S468C18, 15,
  &(vtc_S468C18[0]), // expected_vtbl_contents
  &(vtt_S468C18[0]), // expected_vtt_contents
  ABISELECT(57056,37368), // object size
  NSPAIRA(_ZTI7S468C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S468C18),74, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S468C18),24, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S468C20_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S468C17  : virtual S468C6 , S468C15 , S468C18 {
  void *s468c17f0;
  int s468c17f1[4];
  ::S468C20_nt s468c17f2;
  ::S468C12 s468c17f3;
  ::S468C14_nt s468c17f4;
  int s468c17f5;
  int s468c17f6:24;
  ::S468C14_nt s468c17f7;
  int s468c17f8;
  ::S468C20_nt s468c17f9;
  ~S468C17(); // tgen
  S468C17(); // tgen
};
//SIG(-1 S468C17) C1{ VBC2{ v1 FC3{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC5{ BC4 BC6{ v2 v3 Fc FL[10] FD FC3 Fp Fs Fp Fi} BC7{ BC3 VBC2 BC4 VBC6 v6 FL:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} Fp FC7 Fc[7] FC8{ vd v8 v9 Fi FC3 Fi[2] FU9{ m FL FD[10] FD Fs:0} FD Fi Fi FC6 FL Fi FC6} Fi Fc[4] Fp FC7 Fi Fi[7] Fi} BC10{ BC2 VBC3 VBC11{ BC2 BC4 VBC3 vd v7 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi} BC12{ BC13{ VBC2 VBC6 VBC7 BC4 Fp FC4 FC3 Fs} BC3 BC8 FC14{ BC7 BC6 BC4 BC2 VBC3 vd v10 v11 FC4 Fi Fp[2] FL[2] Fi[2] Fp Fi FC6 Fi}} vd Fp} Fp Fi[4] FC15{} FC12 FC16{ m Fc} Fi Fi:24 FC16 Fi FC15}


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

static void Test_S468C17()
{
  extern Class_Descriptor cd_S468C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8272,21696)];
    init_test(&cd_S468C17, buf);
    S468C17 *dp, &lv = *(dp=new (buf) S468C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(132336,86780), "sizeof(S468C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C17)");
    /*is_ambiguous_... S468C17::S468C6 */ AMB_check_base_class_offset(lv, (S468C6*), ABISELECT(105440,69192), "S468C17");
    check_base_class_offset(lv, (S468C6*)(S468C4*)(S468C15*), ABISELECT(105440,69192), "S468C17");
    check_base_class_offset(lv, (S468C6*)(S468C13*)(S468C12*)(S468C18*), ABISELECT(105440,69192), "S468C17");
    /*is_ambiguous_... S468C17::S468C4 */ AMB_check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(105440,69192), "S468C17");
    /*is_ambiguous_... S468C15::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C15*), 0, "S468C17");
    /*is_ambiguous_... S468C15::S468C8 */ AMB_check_base_class_offset(lv, (S468C8*)(S468C15*), ABISELECT(80,44), "S468C17");
    check_base_class_offset(lv, (S468C5*)(S468C4*)(S468C15*), ABISELECT(528,360), "S468C17");
    check_base_class_offset(lv, (S468C7*)(S468C4*)(S468C15*), ABISELECT(824,560), "S468C17");
    check_base_class_offset(lv, (S468C8*)(S468C4*)(S468C15*), ABISELECT(111680,73268), "S468C17");
    check_base_class_offset(lv, (S468C8*)(S468C13*)(S468C12*)(S468C18*), ABISELECT(111680,73268), "S468C17");
    /*is_ambiguous_... S468C17::S468C4 */ AMB_check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(111680,73268), "S468C17");
    check_base_class_offset(lv, (S468C4*)(S468C15*), ABISELECT(528,360), "S468C17");
    check_base_class_offset(lv, (S468C15*), 0, "S468C17");
    /*is_ambiguous_... S468C18::S468C6 */ AMB_check_base_class_offset(lv, (S468C6*)(S468C18*), ABISELECT(37328,24508), "S468C17");
    /*is_ambiguous_... S468C18::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C18*), ABISELECT(112128,73584), "S468C17");
    check_base_class_offset(lv, (S468C5*)(S468C19*), ABISELECT(112128,73584), "S468C17");
    check_base_class_offset(lv, (S468C6*)(S468C19*), ABISELECT(112432,73784), "S468C17");
    check_base_class_offset(lv, (S468C7*)(S468C19*), ABISELECT(118672,77860), "S468C17");
    check_base_class_offset(lv, (S468C19*)(S468C18*), ABISELECT(112432,73784), "S468C17");
    /*is_ambiguous_... S468C17::S468C4 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C4*), ABISELECT(125040,82012), "S468C17");
    /*is_ambiguous_... S468C17::S468C4 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(125336,82212), "S468C17");
    check_base_class_offset(lv, (S468C4*)(S468C13*)(S468C12*)(S468C18*), ABISELECT(125040,82012), "S468C17");
    /*is_ambiguous_... S468C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C13*)(S468C12*)(S468C18*), ABISELECT(43568,28584), "S468C17");
    check_base_class_offset(lv, (S468C13*)(S468C12*)(S468C18*), ABISELECT(43568,28584), "S468C17");
    /*is_ambiguous_... S468C12::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C12*)(S468C18*), ABISELECT(44064,28880), "S468C17");
    check_base_class_offset(lv, (S468C9*)(S468C12*)(S468C18*), ABISELECT(44368,29080), "S468C17");
    check_base_class_offset(lv, (S468C12*)(S468C18*), ABISELECT(43568,28584), "S468C17");
    check_base_class_offset(lv, (S468C18*), ABISELECT(37328,24508), "S468C17");
    check_field_offset(lv, s468c17f0, ABISELECT(67480,44288), "S468C17.s468c17f0");
    check_field_offset(lv, s468c17f1, ABISELECT(67488,44292), "S468C17.s468c17f1");
    check_field_offset(lv, s468c17f2, ABISELECT(67504,44308), "S468C17.s468c17f2");
    check_field_offset(lv, s468c17f3, ABISELECT(67520,44312), "S468C17.s468c17f3");
    check_field_offset(lv, s468c17f4, ABISELECT(105408,69172), "S468C17.s468c17f4");
    check_field_offset(lv, s468c17f5, ABISELECT(105412,69176), "S468C17.s468c17f5");
    set_bf_and_test(lv, s468c17f6, ABISELECT(105416,69180), 0, 24, 1, "S468C17");
    set_bf_and_test(lv, s468c17f6, ABISELECT(105416,69180), 0, 24, hide_sll(1LL<<23), "S468C17");
    check_field_offset(lv, s468c17f7, ABISELECT(105419,69183), "S468C17.s468c17f7");
    check_field_offset(lv, s468c17f8, ABISELECT(105420,69184), "S468C17.s468c17f8");
    check_field_offset(lv, s468c17f9, ABISELECT(105424,69188), "S468C17.s468c17f9");
    test_class_info(&lv, &cd_S468C17);
    dp->~S468C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C17(Test_S468C17, "S468C17", ABISELECT(132336,86780));

#else // __cplusplus

extern void _ZN7S468C17C1Ev();
extern void _ZN7S468C17D1Ev();
Name_Map name_map_S468C17[] = {
  NSPAIR(_ZN7S468C17C1Ev),
  NSPAIR(_ZN7S468C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C15;
extern VTBL_ENTRY _ZTI7S468C15[];
extern  VTBL_ENTRY _ZTV7S468C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C15[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C19;
extern VTBL_ENTRY _ZTI7S468C19[];
extern  VTBL_ENTRY _ZTV7S468C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C19[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C13;
extern VTBL_ENTRY _ZTI7S468C13[];
extern  VTBL_ENTRY _ZTV7S468C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C13[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
extern Class_Descriptor cd_S468C12;
extern VTBL_ENTRY _ZTI7S468C12[];
extern  VTBL_ENTRY _ZTV7S468C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C12[];
extern Class_Descriptor cd_S468C18;
extern VTBL_ENTRY _ZTI7S468C18[];
extern  VTBL_ENTRY _ZTV7S468C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C18[];
static Base_Class bases_S468C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C6,    ABISELECT(105440,69192), //bcp->offset
    53, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S468C8,    ABISELECT(80,44), //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
    11, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(528,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(824,560), //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
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S468C8,    ABISELECT(111680,73268), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C4,    ABISELECT(528,360), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S468C15,    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_S468C6,    ABISELECT(37328,24508), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(112128,73584), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S468C6,    ABISELECT(112432,73784), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C7,    ABISELECT(118672,77860), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S468C19,    ABISELECT(112432,73784), //bcp->offset
    69, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S468C5,    ABISELECT(125040,82012), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(125336,82212), //bcp->offset
    96, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(125040,82012), //bcp->offset
    83, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(43568,28584), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C13,    ABISELECT(43568,28584), //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
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(44064,28880), //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
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S468C9,    ABISELECT(44368,29080), //bcp->offset
    47, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S468C12,    ABISELECT(43568,28584), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S468C18,    ABISELECT(37328,24508), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S468C17[];
extern void _ZN7S468C17D1Ev();
extern void _ZN7S468C17D0Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZThn528_N7S468C17D1Ev,_ZThn360_N7S468C17D1Ev)();
extern void ABISELECT(_ZThn528_N7S468C17D0Ev,_ZThn360_N7S468C17D0Ev)();
extern void ABISELECT(_ZThn824_N7S468C17D1Ev,_ZThn560_N7S468C17D1Ev)();
extern void ABISELECT(_ZThn824_N7S468C17D0Ev,_ZThn560_N7S468C17D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void ABISELECT(_ZThn37328_N7S468C17D1Ev,_ZThn24508_N7S468C17D1Ev)();
extern void ABISELECT(_ZThn37328_N7S468C17D0Ev,_ZThn24508_N7S468C17D0Ev)();
extern void ABISELECT(_ZThn43568_N7S468C17D1Ev,_ZThn28584_N7S468C17D1Ev)();
extern void ABISELECT(_ZThn43568_N7S468C17D0Ev,_ZThn28584_N7S468C17D0Ev)();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZThn44368_N7S468C17D1Ev,_ZThn29080_N7S468C17D1Ev)();
extern void ABISELECT(_ZThn44368_N7S468C17D0Ev,_ZThn29080_N7S468C17D0Ev)();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S468C17D1Ev,_ZTv0_n20_N7S468C17D1Ev)();
extern void ABISELECT(_ZThn112432_N7S468C17D1Ev,_ZThn73784_N7S468C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S468C17D0Ev,_ZTv0_n20_N7S468C17D0Ev)();
extern void ABISELECT(_ZThn112432_N7S468C17D0Ev,_ZThn73784_N7S468C17D0Ev)() __attribute__((weak));
extern void _ZN7S468C193v12Ev();
extern void ABISELECT(_ZTvn6240_n40_N7S468C17D1Ev,_ZTvn4076_n20_N7S468C17D1Ev)();
extern void ABISELECT(_ZTvn6240_n40_N7S468C17D0Ev,_ZTvn4076_n20_N7S468C17D0Ev)();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C17D1Ev,_ZTv0_n32_N7S468C17D1Ev)();
extern void ABISELECT(_ZThn125040_N7S468C17D1Ev,_ZThn82012_N7S468C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C17D0Ev,_ZTv0_n32_N7S468C17D0Ev)();
extern void ABISELECT(_ZThn125040_N7S468C17D0Ev,_ZThn82012_N7S468C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S468C17D1Ev,_ZTvn200_n32_N7S468C17D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C17D0Ev,_ZTvn200_n32_N7S468C17D0Ev)();
static  VTBL_ENTRY vtc_S468C17[] = {
  ABISELECT(125040,82012),
  ABISELECT(112432,73784),
  ABISELECT(112128,73584),
  ABISELECT(111680,73268),
  ABISELECT(105440,69192),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN7S468C17D1Ev,
  (VTBL_ENTRY)&_ZN7S468C17D0Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(111152,72908),
  ABISELECT(104912,68832),
  ABISELECT(-528,-360),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S468C17D1Ev,_ZThn360_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S468C17D0Ev,_ZThn360_N7S468C17D0Ev),
  ABISELECT(-824,-560),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn824_N7S468C17D1Ev,_ZThn560_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn824_N7S468C17D0Ev,_ZThn560_N7S468C17D0Ev),
  ABISELECT(87712,57504),
  ABISELECT(74352,48760),
  ABISELECT(68112,44684),
  ABISELECT(75104,49276),
  ABISELECT(74800,49076),
  ABISELECT(-37328,-24508),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn37328_N7S468C17D1Ev,_ZThn24508_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn37328_N7S468C17D0Ev,_ZThn24508_N7S468C17D0Ev),
  ABISELECT(81472,53428),
  ABISELECT(68112,44684),
  ABISELECT(61872,40608),
  ABISELECT(-43568,-28584),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn43568_N7S468C17D1Ev,_ZThn28584_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn43568_N7S468C17D0Ev,_ZThn28584_N7S468C17D0Ev),
  ABISELECT(-44064,-28880),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  ABISELECT(-44368,-29080),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn44368_N7S468C17D1Ev,_ZThn29080_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn44368_N7S468C17D0Ev,_ZThn29080_N7S468C17D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
  0,
  ABISELECT(-105440,-69192),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-111680,-73268),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  0,
  0,
  ABISELECT(-112128,-73584),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  0,
  ABISELECT(-112432,-73784),
  0,
  ABISELECT(-304,-200),
  ABISELECT(-112432,-73784),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S468C17D1Ev,_ZTv0_n20_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S468C17D0Ev,_ZTv0_n20_N7S468C17D0Ev),
  (VTBL_ENTRY)&_ZN7S468C193v12Ev,
  ABISELECT(-118672,-77860),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S468C17D1Ev,_ZTvn4076_n20_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S468C17D0Ev,_ZTvn4076_n20_N7S468C17D0Ev),
  ABISELECT(-125040,-82012),
  0,
  0,
  0,
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  ABISELECT(-125040,-82012),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C17D1Ev,_ZTv0_n32_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C17D0Ev,_ZTv0_n32_N7S468C17D0Ev),
  ABISELECT(-125336,-82212),
  (VTBL_ENTRY)&(_ZTI7S468C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C17D1Ev,_ZTvn200_n32_N7S468C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C17D0Ev,_ZTvn200_n32_N7S468C17D0Ev),
};
extern VTBL_ENTRY _ZTV7S468C17[];
extern void _ZN7S468C15D1Ev();
extern void _ZN7S468C15D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C15__7S468C17[] = {
  ABISELECT(111680,73268),
  ABISELECT(105440,69192),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN7S468C15D1Ev,
  (VTBL_ENTRY)&_ZN7S468C15D0Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C47S468C15__7S468C17[] = {
  ABISELECT(111152,72908),
  ABISELECT(104912,68832),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C47S468C15__7S468C17[] = {
  0,
  ABISELECT(-104912,-68832),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C47S468C15__7S468C17[] = {
  0,
  0,
  ABISELECT(-111152,-72908),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZThn528_N7S468C15D1Ev,_ZThn360_N7S468C15D1Ev)();
extern void ABISELECT(_ZThn528_N7S468C15D0Ev,_ZThn360_N7S468C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C15__7S468C17[] = {
  ABISELECT(111152,72908),
  ABISELECT(104912,68832),
  ABISELECT(-528,-360),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S468C15D1Ev,_ZThn360_N7S468C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S468C15D0Ev,_ZThn360_N7S468C15D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C15__7S468C17[] = {
  0,
  ABISELECT(-105440,-69192),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__A1__7S468C15__7S468C17[] = {
  0,
  0,
  ABISELECT(-111680,-73268),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C62v3Ev();
extern void _ZN7S468C18D1Ev();
extern void _ZN7S468C18D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C18__7S468C17[] = {
  ABISELECT(87712,57504),
  ABISELECT(74352,48760),
  ABISELECT(68112,44684),
  ABISELECT(75104,49276),
  ABISELECT(74800,49076),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&_ZN7S468C18D1Ev,
  (VTBL_ENTRY)&_ZN7S468C18D0Ev,
};
extern void _ZN7S468C12D1Ev();
extern void _ZN7S468C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C127S468C18__7S468C17[] = {
  ABISELECT(81472,53428),
  ABISELECT(68112,44684),
  ABISELECT(61872,40608),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN7S468C12D1Ev,
  (VTBL_ENTRY)&_ZN7S468C12D0Ev,
};
extern void _ZN7S468C13D1Ev();
extern void _ZN7S468C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C137S468C127S468C18__7S468C17[] = {
  ABISELECT(81472,53428),
  ABISELECT(68112,44684),
  ABISELECT(61872,40608),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN7S468C13D1Ev,
  (VTBL_ENTRY)&_ZN7S468C13D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C137S468C127S468C18__7S468C17[] = {
  0,
  ABISELECT(-61872,-40608),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C137S468C127S468C18__7S468C17[] = {
  0,
  0,
  ABISELECT(-68112,-44684),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZThn81472_N7S468C13D1Ev,_ZThn53428_N7S468C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev)();
extern void ABISELECT(_ZThn81472_N7S468C13D0Ev,_ZThn53428_N7S468C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C137S468C127S468C18__7S468C17[] = {
  ABISELECT(-81472,-53428),
  0,
  0,
  0,
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  ABISELECT(-81472,-53428),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C137S468C127S468C18__7S468C17[] = {
  ABISELECT(-81768,-53628),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C127S468C18__7S468C17[] = {
  0,
  ABISELECT(-61872,-40608),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C127S468C18__7S468C17[] = {
  0,
  0,
  ABISELECT(-68112,-44684),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZThn81472_N7S468C12D1Ev,_ZThn53428_N7S468C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev)();
extern void ABISELECT(_ZThn81472_N7S468C12D0Ev,_ZThn53428_N7S468C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C127S468C18__7S468C17[] = {
  ABISELECT(-81472,-53428),
  0,
  0,
  0,
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  ABISELECT(-81472,-53428),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C127S468C18__7S468C17[] = {
  ABISELECT(-81768,-53628),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev),
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S468C5__7S468C18__7S468C17[] = {
  0,
  0,
  ABISELECT(-74800,-49076),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern void _ZN6S468C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S468C18D1Ev,_ZTv0_n20_N7S468C18D1Ev)();
extern void ABISELECT(_ZThn75104_N7S468C18D1Ev,_ZThn49276_N7S468C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S468C18D0Ev,_ZTv0_n20_N7S468C18D0Ev)();
extern void ABISELECT(_ZThn75104_N7S468C18D0Ev,_ZThn49276_N7S468C18D0Ev)() __attribute__((weak));
extern void _ZN7S468C193v12Ev();
static  VTBL_ENTRY _tg__ZTV7S468C19__7S468C18__7S468C17[] = {
  0,
  ABISELECT(-75104,-49276),
  0,
  ABISELECT(-304,-200),
  ABISELECT(-75104,-49276),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S468C18D1Ev,_ZTv0_n20_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S468C18D0Ev,_ZTv0_n20_N7S468C18D0Ev),
  (VTBL_ENTRY)&_ZN7S468C193v12Ev,
};
extern void ABISELECT(_ZTvn6240_n40_N7S468C18D1Ev,_ZTvn4076_n20_N7S468C18D1Ev)();
extern void ABISELECT(_ZTvn6240_n40_N7S468C18D0Ev,_ZTvn4076_n20_N7S468C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C77S468C19__7S468C18__7S468C17[] = {
  ABISELECT(-81344,-53352),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S468C18D1Ev,_ZTvn4076_n20_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S468C18D0Ev,_ZTvn4076_n20_N7S468C18D0Ev),
};
extern void ABISELECT(_ZThn6240_N7S468C18D1Ev,_ZThn4076_N7S468C18D1Ev)();
extern void ABISELECT(_ZThn6240_N7S468C18D0Ev,_ZThn4076_N7S468C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S468C12__7S468C18__7S468C17[] = {
  ABISELECT(81472,53428),
  ABISELECT(68112,44684),
  ABISELECT(61872,40608),
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S468C18D1Ev,_ZThn4076_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S468C18D0Ev,_ZThn4076_N7S468C18D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__A2__7S468C18__7S468C17[] = {
  0,
  ABISELECT(-68112,-44684),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C18__7S468C17[] = {
  0,
  0,
  ABISELECT(-74352,-48760),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C18D1Ev,_ZTv0_n32_N7S468C18D1Ev)();
extern void ABISELECT(_ZThn87712_N7S468C18D1Ev,_ZThn57504_N7S468C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C18D0Ev,_ZTv0_n32_N7S468C18D0Ev)();
extern void ABISELECT(_ZThn87712_N7S468C18D0Ev,_ZThn57504_N7S468C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C18__7S468C17[] = {
  ABISELECT(-87712,-57504),
  0,
  0,
  0,
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  ABISELECT(-87712,-57504),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C18D1Ev,_ZTv0_n32_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C18D0Ev,_ZTv0_n32_N7S468C18D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C18D1Ev,_ZTvn200_n32_N7S468C18D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C18D0Ev,_ZTvn200_n32_N7S468C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__A1__7S468C18__7S468C17[] = {
  ABISELECT(-88008,-57704),
  (VTBL_ENTRY)&(_ZTI7S468C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C18D1Ev,_ZTvn200_n32_N7S468C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C18D0Ev,_ZTvn200_n32_N7S468C18D0Ev),
};
extern void _ZN6S468C62v3Ev();
extern void _ZN7S468C19D1Ev();
extern void _ZN7S468C19D0Ev();
extern void _ZN7S468C193v12Ev();
static  VTBL_ENTRY _tg__ZTV7S468C19__7S468C17[] = {
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C19[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  (VTBL_ENTRY)&_ZN7S468C19D1Ev,
  (VTBL_ENTRY)&_ZN7S468C19D0Ev,
  (VTBL_ENTRY)&_ZN7S468C193v12Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S468C5__7S468C19__7S468C17[] = {
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S468C19[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__A1__7S468C17[] = {
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__A1__7S468C17[] = {
  0,
  ABISELECT(19600,12820),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__A1__7S468C17[] = {
  0,
  0,
  ABISELECT(13360,8744),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C17[] = {
  {&(_ZTV7S468C17[7]),  7,100},
  {&(_tg__ZTV7S468C15__7S468C17[4]),  4,6},
  {&(_tg__ZTV6S468C47S468C15__7S468C17[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C47S468C15__7S468C17[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C47S468C15__7S468C17[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C15__7S468C17[4]),  4,9},
  {&(_tg__ZTV6S468C6__7S468C15__7S468C17[3]),  3,4},
  {&(_tg__ZTV6S468C8__A1__7S468C15__7S468C17[4]),  4,6},
  {&(_tg__ZTV7S468C18__7S468C17[7]),  7,10},
  {&(_tg__ZTV7S468C127S468C18__7S468C17[5]),  5,7},
  {&(_tg__ZTV7S468C137S468C127S468C18__7S468C17[5]),  5,7},
  {&(_tg__ZTV6S468C6__7S468C137S468C127S468C18__7S468C17[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C137S468C127S468C18__7S468C17[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C137S468C127S468C18__7S468C17[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C137S468C127S468C18__7S468C17[2]),  2,4},
  {&(_tg__ZTV6S468C6__7S468C127S468C18__7S468C17[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C127S468C18__7S468C17[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C127S468C18__7S468C17[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C127S468C18__7S468C17[2]),  2,4},
  {&(_tg__ZTV6S468C5__7S468C18__7S468C17[4]),  4,6},
  {&(_tg__ZTV7S468C19__7S468C18__7S468C17[6]),  6,10},
  {&(_tg__ZTV6S468C77S468C19__7S468C18__7S468C17[2]),  2,4},
  {&(_tg__ZTV7S468C12__7S468C18__7S468C17[5]),  5,7},
  {&(_tg__ZTV6S468C6__A2__7S468C18__7S468C17[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C18__7S468C17[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C18__7S468C17[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__A1__7S468C18__7S468C17[2]),  2,4},
  {&(_ZTV7S468C17[56]),  56,100},
  {&(_ZTV7S468C17[17]),  17,100},
  {&(_ZTV7S468C17[61]),  61,100},
  {&(_ZTV7S468C17[33]),  33,100},
  {&(_ZTV7S468C17[67]),  67,100},
  {&(_ZTV7S468C17[75]),  75,100},
  {&(_ZTV7S468C17[81]),  81,100},
  {&(_ZTV7S468C17[41]),  41,100},
  {&(_ZTV7S468C17[91]),  91,100},
  {&(_ZTV7S468C17[98]),  98,100},
  {&(_tg__ZTV7S468C19__7S468C17[3]),  3,7},
  {&(_tg__ZTV6S468C5__7S468C19__7S468C17[4]),  4,6},
  {&(_tg__ZTV6S468C4__A1__7S468C17[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__A1__7S468C17[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__A1__7S468C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S468C17[];
extern  VTBL_ENTRY _ZTV7S468C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C17[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C18D0Ev,_ZTv0_n32_N7S468C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87712_N7S468C18D0Ev,_ZThn57504_N7S468C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C18D1Ev,_ZTv0_n32_N7S468C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87712_N7S468C18D1Ev,_ZThn57504_N7S468C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S468C18D0Ev,_ZTv0_n20_N7S468C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn75104_N7S468C18D0Ev,_ZThn49276_N7S468C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S468C18D1Ev,_ZTv0_n20_N7S468C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn75104_N7S468C18D1Ev,_ZThn49276_N7S468C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn81472_N7S468C12D0Ev,_ZThn53428_N7S468C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn81472_N7S468C12D1Ev,_ZThn53428_N7S468C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn81472_N7S468C13D0Ev,_ZThn53428_N7S468C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn81472_N7S468C13D1Ev,_ZThn53428_N7S468C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C17D0Ev,_ZTv0_n32_N7S468C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125040_N7S468C17D0Ev,_ZThn82012_N7S468C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C17D1Ev,_ZTv0_n32_N7S468C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125040_N7S468C17D1Ev,_ZThn82012_N7S468C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S468C17D0Ev,_ZTv0_n20_N7S468C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112432_N7S468C17D0Ev,_ZThn73784_N7S468C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S468C17D1Ev,_ZTv0_n20_N7S468C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112432_N7S468C17D1Ev,_ZThn73784_N7S468C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S468C17 = {  "S468C17", // class name
  bases_S468C17, 22,
  &(vtc_S468C17[0]), // expected_vtbl_contents
  &(vtt_S468C17[0]), // expected_vtt_contents
  ABISELECT(132336,86780), // object size
  NSPAIRA(_ZTI7S468C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S468C17),100, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S468C17),42, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C16  {
  ::S468C12 s468c16f0;
  ::S468C17 s468c16f1;
  int s468c16f2;
  ::S468C5 s468c16f3;
  ::S468C14_nt s468c16f4;
  void *s468c16f5;
  int s468c16f6:15;
  int s468c16f7;
  int s468c16f8;
  void  mf468c16(); // _ZN7S468C168mf468c16Ev
};
//SIG(-1 S468C16) C1{ m FC2{ BC3{ VBC4{ v1 FC5{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC5[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC5[5] Fp[5] FC5[5]} VBC7{ v2 v3 Fc FL[10] FD FC5 Fp Fs Fp Fi} VBC8{ BC5 VBC4 BC6 VBC7 v6 FL:2 FD[7] Fp FC4 Fp Fi Fp[2] FC6 FC5 FD[8]} BC6 Fp FC6 FC5 Fs} BC5 BC9{ vd v7 v8 Fi FC5 Fi[2] FU10{ m FL FD[10] FD Fs:0} FD Fi Fi FC7 FL Fi FC7} FC11{ BC8 BC7 BC6 BC4 VBC5 vd v9 v10 FC6 Fi Fp[2] FL[2] Fi[2] Fp Fi FC7 Fi}} FC12{ VBC4 BC13{ BC6 BC7 BC8 Fp FC8 Fc[7] FC9 Fi Fc[4] Fp FC8 Fi Fi[7] Fi} BC14{ BC4 VBC5 VBC15{ BC4 BC6 VBC5 vd v11 Fi Fs Fs:1 Fp Fl FC4 Fi[2] Fc[3] Fi} BC2 vd Fp} Fp Fi[4] FC16{} FC2 FC17{ m Fc} Fi Fi:24 FC17 Fi FC16} Fi FC5 FC17 Fp Fi:15 Fi Fi}


void  S468C16 ::mf468c16(){}

static void Test_S468C16()
{
  {
    init_simple_test("S468C16");
    static S468C16 lv;
    check2(sizeof(lv), ABISELECT(170576,111864), "sizeof(S468C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C16)");
    check_field_offset(lv, s468c16f0, 0, "S468C16.s468c16f0");
    check_field_offset(lv, s468c16f1, ABISELECT(37888,24860), "S468C16.s468c16f1");
    check_field_offset(lv, s468c16f2, ABISELECT(170224,111640), "S468C16.s468c16f2");
    check_field_offset(lv, s468c16f3, ABISELECT(170240,111644), "S468C16.s468c16f3");
    check_field_offset(lv, s468c16f4, ABISELECT(170544,111844), "S468C16.s468c16f4");
    check_field_offset(lv, s468c16f5, ABISELECT(170552,111848), "S468C16.s468c16f5");
    set_bf_and_test(lv, s468c16f6, ABISELECT(170560,111852), 0, 15, 1, "S468C16");
    set_bf_and_test(lv, s468c16f6, ABISELECT(170560,111852), 0, 15, hide_sll(1LL<<14), "S468C16");
    check_field_offset(lv, s468c16f7, ABISELECT(170564,111856), "S468C16.s468c16f7");
    check_field_offset(lv, s468c16f8, ABISELECT(170568,111860), "S468C16.s468c16f8");
  }
}
static Arrange_To_Call_Me vS468C16(Test_S468C16, "S468C16", ABISELECT(170576,111864));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S468C16[];
VTBL_ENTRY *P__ZTI7S468C16 = _ZTI7S468C16; 
Class_Descriptor cd_S468C16 = {  "S468C16", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(170576,111864), // object size
  NSPAIRA(_ZTI7S468C16),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  S468C21  : virtual S468C8 , virtual S468C4 , virtual S468C5 , virtual S468C11 , virtual S468C12 {
  void *s468c21f0;
  ::S468C5 s468c21f1;
  void *s468c21f2;
  void *s468c21f3;
  int s468c21f4;
  ::S468C5 s468c21f5;
  short s468c21f6;
  int s468c21f7;
  char s468c21f8[10];
  void *s468c21f9;
  int s468c21f10;
  long s468c21f11[4];
  void *s468c21f12;
  virtual  ~S468C21(); // _ZN7S468C21D2Ev
  S468C21(); // tgen
};
//SIG(-1 S468C21) C1{ VBC2{ v1 v2 Fc FL[10] FD FC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fp Fs Fp Fi} VBC4{ BC3 VBC5{ v5 FC3[8] FC3[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC6 VBC2 v6 FL:2 FD[7] Fp FC5 Fp Fi Fp[2] FC6 FC3 FD[8]} VBC3 VBC7{ BC8{ BC9{ VBC5 VBC2 VBC4 BC6 Fp FC6 FC3 Fs} BC3 BC10{ vd v7 v8 Fi FC3 Fi[2] FU11{ m FL FD[10] FD Fs:0} FD Fi Fi FC2 FL Fi FC2} FC12{ BC4 BC2 BC6 BC5 VBC3 vd v9 v10 FC6 Fi Fp[2] FL[2] Fi[2] Fp Fi FC2 Fi}} VBC3 BC6 BC10 FC13{ m Fc} Fi Fi Fi:6 FC13 Fi} VBC8 vd Fp FC3 Fp Fp Fi FC3 Fs Fi Fc[10] Fp Fi Fl[4] Fp}


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

static void Test_S468C21()
{
  extern Class_Descriptor cd_S468C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4025,10574)];
    init_test(&cd_S468C21, buf);
    S468C21 *dp, &lv = *(dp=new (buf) S468C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64384,42292), "sizeof(S468C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C21)");
    check_base_class_offset(lv, (S468C8*), ABISELECT(736,468), "S468C21");
    check_base_class_offset(lv, (S468C8*)(S468C4*), ABISELECT(736,468), "S468C21");
    check_base_class_offset(lv, (S468C8*)(S468C13*)(S468C12*)(S468C11*), ABISELECT(736,468), "S468C21");
    /*is_ambiguous_... S468C21::S468C12 */ AMB_check_base_class_offset(lv, (S468C8*)(S468C13*)(S468C12*), ABISELECT(736,468), "S468C21");
    check_base_class_offset(lv, (S468C5*)(S468C4*), ABISELECT(1184,784), "S468C21");
    check_base_class_offset(lv, (S468C6*)(S468C4*), ABISELECT(8480,5552), "S468C21");
    check_base_class_offset(lv, (S468C6*)(S468C13*)(S468C12*)(S468C11*), ABISELECT(8480,5552), "S468C21");
    /*is_ambiguous_... S468C21::S468C12 */ AMB_check_base_class_offset(lv, (S468C6*)(S468C13*)(S468C12*), ABISELECT(8480,5552), "S468C21");
    check_base_class_offset(lv, (S468C7*)(S468C4*), ABISELECT(1480,984), "S468C21");
    check_base_class_offset(lv, (S468C4*), ABISELECT(1184,784), "S468C21");
    check_base_class_offset(lv, (S468C4*)(S468C13*)(S468C12*)(S468C11*), ABISELECT(1184,784), "S468C21");
    /*is_ambiguous_... S468C21::S468C12 */ AMB_check_base_class_offset(lv, (S468C4*)(S468C13*)(S468C12*), ABISELECT(1184,784), "S468C21");
    /*is_ambiguous_... S468C21::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*), ABISELECT(14720,9628), "S468C21");
    /*is_ambiguous_... S468C11::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C11*), ABISELECT(14720,9628), "S468C21");
    /*is_ambiguous_... S468C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C13*)(S468C12*)(S468C11*), ABISELECT(15024,9828), "S468C21");
    check_base_class_offset(lv, (S468C13*)(S468C12*)(S468C11*), ABISELECT(15024,9828), "S468C21");
    /*is_ambiguous_... S468C12::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C12*)(S468C11*), ABISELECT(15520,10124), "S468C21");
    check_base_class_offset(lv, (S468C9*)(S468C12*)(S468C11*), ABISELECT(15824,10324), "S468C21");
    check_base_class_offset(lv, (S468C12*)(S468C11*), ABISELECT(15024,9828), "S468C21");
    /*is_ambiguous_... S468C11::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C11*), ABISELECT(38928,25528), "S468C21");
    /*is_ambiguous_... S468C11::S468C9 */ AMB_check_base_class_offset(lv, (S468C9*)(S468C11*), ABISELECT(39008,25572), "S468C21");
    check_base_class_offset(lv, (S468C11*), ABISELECT(15024,9828), "S468C21");
    /*is_ambiguous_... S468C21::S468C12 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C13*)(S468C12*), ABISELECT(40480,26592), "S468C21");
    /*is_ambiguous_... S468C21::S468C12 */ AMB_check_base_class_offset(lv, (S468C13*)(S468C12*), ABISELECT(40480,26592), "S468C21");
    /*is_ambiguous_... S468C21::S468C12 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C12*), ABISELECT(40976,26888), "S468C21");
    /*is_ambiguous_... S468C21::S468C12 */ AMB_check_base_class_offset(lv, (S468C9*)(S468C12*), ABISELECT(41280,27088), "S468C21");
    /*is_ambiguous_... S468C21::S468C12 */ AMB_check_base_class_offset(lv, (S468C12*), ABISELECT(40480,26592), "S468C21");
    check_field_offset(lv, s468c21f0, ABISELECT(8,4), "S468C21.s468c21f0");
    check_field_offset(lv, s468c21f1, ABISELECT(16,8), "S468C21.s468c21f1");
    check_field_offset(lv, s468c21f2, ABISELECT(320,208), "S468C21.s468c21f2");
    check_field_offset(lv, s468c21f3, ABISELECT(328,212), "S468C21.s468c21f3");
    check_field_offset(lv, s468c21f4, ABISELECT(336,216), "S468C21.s468c21f4");
    check_field_offset(lv, s468c21f5, ABISELECT(352,220), "S468C21.s468c21f5");
    check_field_offset(lv, s468c21f6, ABISELECT(656,420), "S468C21.s468c21f6");
    check_field_offset(lv, s468c21f7, ABISELECT(660,424), "S468C21.s468c21f7");
    check_field_offset(lv, s468c21f8, ABISELECT(664,428), "S468C21.s468c21f8");
    check_field_offset(lv, s468c21f9, ABISELECT(680,440), "S468C21.s468c21f9");
    check_field_offset(lv, s468c21f10, ABISELECT(688,444), "S468C21.s468c21f10");
    check_field_offset(lv, s468c21f11, ABISELECT(696,448), "S468C21.s468c21f11");
    check_field_offset(lv, s468c21f12, ABISELECT(728,464), "S468C21.s468c21f12");
    test_class_info(&lv, &cd_S468C21);
    dp->~S468C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C21(Test_S468C21, "S468C21", ABISELECT(64384,42292));

#else // __cplusplus

extern void _ZN7S468C21C1Ev();
extern void _ZN7S468C21D2Ev();
Name_Map name_map_S468C21[] = {
  NSPAIR(_ZN7S468C21C1Ev),
  NSPAIR(_ZN7S468C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C13;
extern VTBL_ENTRY _ZTI7S468C13[];
extern  VTBL_ENTRY _ZTV7S468C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C13[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
extern Class_Descriptor cd_S468C12;
extern VTBL_ENTRY _ZTI7S468C12[];
extern  VTBL_ENTRY _ZTV7S468C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C12[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
extern Class_Descriptor cd_S468C11;
extern VTBL_ENTRY _ZTI7S468C11[];
extern  VTBL_ENTRY _ZTV7S468C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C11[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C13;
extern VTBL_ENTRY _ZTI7S468C13[];
extern  VTBL_ENTRY _ZTV7S468C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C13[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
extern Class_Descriptor cd_S468C12;
extern VTBL_ENTRY _ZTI7S468C12[];
extern  VTBL_ENTRY _ZTV7S468C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C12[];
static Base_Class bases_S468C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C8,    ABISELECT(736,468), //bcp->offset
    10, //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_S468C5,    ABISELECT(1184,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C6,    ABISELECT(8480,5552), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(1480,984), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(1184,784), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C5,    ABISELECT(14720,9628), //bcp->offset
    37, //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
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    ABISELECT(15024,9828), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C13,    ABISELECT(15024,9828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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_S468C5,    ABISELECT(15520,10124), //bcp->offset
    56, //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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S468C9,    ABISELECT(15824,10324), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S468C12,    ABISELECT(15024,9828), //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
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(38928,25528), //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
    13, //immediately_derived
  0, 0},
  {&cd_S468C9,    ABISELECT(39008,25572), //bcp->offset
    70, //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
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S468C11,    ABISELECT(15024,9828), //bcp->offset
    43, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    ABISELECT(40480,26592), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C13,    ABISELECT(40480,26592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(40976,26888), //bcp->offset
    88, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S468C9,    ABISELECT(41280,27088), //bcp->offset
    92, //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
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S468C12,    ABISELECT(40480,26592), //bcp->offset
    76, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S468C21[];
extern void _ZN7S468C21D1Ev();
extern void _ZN7S468C21D0Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C21D1Ev,_ZTv0_n32_N7S468C21D1Ev)();
extern void ABISELECT(_ZThn1184_N7S468C21D1Ev,_ZThn784_N7S468C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S468C21D0Ev,_ZTv0_n32_N7S468C21D0Ev)();
extern void ABISELECT(_ZThn1184_N7S468C21D0Ev,_ZThn784_N7S468C21D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S468C21D1Ev,_ZTvn200_n32_N7S468C21D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C21D0Ev,_ZTvn200_n32_N7S468C21D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZTv0_n56_N7S468C21D1Ev,_ZTv0_n28_N7S468C21D1Ev)();
extern void ABISELECT(_ZThn15024_N7S468C21D1Ev,_ZThn9828_N7S468C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S468C21D0Ev,_ZTv0_n28_N7S468C21D0Ev)();
extern void ABISELECT(_ZThn15024_N7S468C21D0Ev,_ZThn9828_N7S468C21D0Ev)() __attribute__((weak));
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZTvn800_n56_N7S468C21D1Ev,_ZTvn496_n28_N7S468C21D1Ev)();
extern void ABISELECT(_ZTvn800_n56_N7S468C21D0Ev,_ZTvn496_n28_N7S468C21D0Ev)();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
extern void ABISELECT(_ZTvn23904_n56_N7S468C21D1Ev,_ZTvn15700_n28_N7S468C21D1Ev)();
extern void ABISELECT(_ZTvn23904_n56_N7S468C21D0Ev,_ZTvn15700_n28_N7S468C21D0Ev)();
extern void ABISELECT(_ZTvn23984_n56_N7S468C21D1Ev,_ZTvn15744_n28_N7S468C21D1Ev)();
extern void ABISELECT(_ZTvn23984_n56_N7S468C21D0Ev,_ZTvn15744_n28_N7S468C21D0Ev)();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
extern void ABISELECT(_ZTv0_n48_N7S468C21D1Ev,_ZTv0_n24_N7S468C21D1Ev)();
extern void ABISELECT(_ZThn40480_N7S468C21D1Ev,_ZThn26592_N7S468C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S468C21D0Ev,_ZTv0_n24_N7S468C21D0Ev)();
extern void ABISELECT(_ZThn40480_N7S468C21D0Ev,_ZThn26592_N7S468C21D0Ev)() __attribute__((weak));
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZTvn800_n48_N7S468C21D1Ev,_ZTvn496_n24_N7S468C21D1Ev)();
extern void ABISELECT(_ZTvn800_n48_N7S468C21D0Ev,_ZTvn496_n24_N7S468C21D0Ev)();
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
static  VTBL_ENTRY vtc_S468C21[] = {
  ABISELECT(40480,26592),
  ABISELECT(15024,9828),
  ABISELECT(14720,9628),
  ABISELECT(8480,5552),
  ABISELECT(1184,784),
  ABISELECT(736,468),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&_ZN7S468C21D1Ev,
  (VTBL_ENTRY)&_ZN7S468C21D0Ev,
  0,
  0,
  ABISELECT(-736,-468),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-1184,-784),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(-1184,-784),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C21D1Ev,_ZTv0_n32_N7S468C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C21D0Ev,_ZTv0_n32_N7S468C21D0Ev),
  ABISELECT(-1480,-984),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C21D1Ev,_ZTvn200_n32_N7S468C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C21D0Ev,_ZTvn200_n32_N7S468C21D0Ev),
  0,
  ABISELECT(-8480,-5552),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-14720,-9628),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  ABISELECT(800,496),
  ABISELECT(800,496),
  ABISELECT(496,296),
  ABISELECT(496,296),
  ABISELECT(-15024,-9828),
  ABISELECT(-304,-200),
  ABISELECT(-13840,-9044),
  ABISELECT(-14288,-9360),
  ABISELECT(-6544,-4276),
  ABISELECT(-15024,-9828),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S468C21D1Ev,_ZTv0_n28_N7S468C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S468C21D0Ev,_ZTv0_n28_N7S468C21D0Ev),
  ABISELECT(-15520,-10124),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  ABISELECT(-15824,-10324),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn800_n56_N7S468C21D1Ev,_ZTvn496_n28_N7S468C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn800_n56_N7S468C21D0Ev,_ZTvn496_n28_N7S468C21D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
  ABISELECT(-38928,-25528),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn23904_n56_N7S468C21D1Ev,_ZTvn15700_n28_N7S468C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn23904_n56_N7S468C21D0Ev,_ZTvn15700_n28_N7S468C21D0Ev),
  ABISELECT(-39008,-25572),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn23984_n56_N7S468C21D1Ev,_ZTvn15744_n28_N7S468C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn23984_n56_N7S468C21D0Ev,_ZTvn15744_n28_N7S468C21D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
  ABISELECT(800,496),
  ABISELECT(800,496),
  ABISELECT(496,296),
  ABISELECT(496,296),
  ABISELECT(-40480,-26592),
  ABISELECT(-39296,-25808),
  ABISELECT(-39744,-26124),
  ABISELECT(-32000,-21040),
  ABISELECT(-40480,-26592),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S468C21D1Ev,_ZTv0_n24_N7S468C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S468C21D0Ev,_ZTv0_n24_N7S468C21D0Ev),
  ABISELECT(-40976,-26888),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  ABISELECT(-41280,-27088),
  (VTBL_ENTRY)&(_ZTI7S468C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn800_n48_N7S468C21D1Ev,_ZTvn496_n24_N7S468C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn800_n48_N7S468C21D0Ev,_ZTvn496_n24_N7S468C21D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
};
extern VTBL_ENTRY _ZTV7S468C21[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C21[] = {
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C4__7S468C21[] = {
  0,
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C4__7S468C21[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN7S468C11D1Ev();
extern void _ZN7S468C11D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C11__7S468C21[] = {
  ABISELECT(-304,-200),
  ABISELECT(-13840,-9044),
  ABISELECT(-14288,-9360),
  ABISELECT(-6544,-4276),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN7S468C11D1Ev,
  (VTBL_ENTRY)&_ZN7S468C11D0Ev,
};
extern void _ZN7S468C12D1Ev();
extern void _ZN7S468C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C127S468C11__7S468C21[] = {
  ABISELECT(-13840,-9044),
  ABISELECT(-14288,-9360),
  ABISELECT(-6544,-4276),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN7S468C12D1Ev,
  (VTBL_ENTRY)&_ZN7S468C12D0Ev,
};
extern void _ZN7S468C13D1Ev();
extern void _ZN7S468C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C137S468C127S468C11__7S468C21[] = {
  ABISELECT(-13840,-9044),
  ABISELECT(-14288,-9360),
  ABISELECT(-6544,-4276),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN7S468C13D1Ev,
  (VTBL_ENTRY)&_ZN7S468C13D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C137S468C127S468C11__7S468C21[] = {
  0,
  ABISELECT(6544,4276),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C137S468C127S468C11__7S468C21[] = {
  0,
  0,
  ABISELECT(14288,9360),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C137S468C127S468C11__7S468C21[] = {
  ABISELECT(13840,9044),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(13840,9044),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C137S468C127S468C11__7S468C21[] = {
  ABISELECT(13544,8844),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C127S468C11__7S468C21[] = {
  0,
  ABISELECT(6544,4276),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C127S468C11__7S468C21[] = {
  0,
  0,
  ABISELECT(14288,9360),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C127S468C11__7S468C21[] = {
  ABISELECT(13840,9044),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(13840,9044),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C127S468C11__7S468C21[] = {
  ABISELECT(13544,8844),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C11__7S468C21[] = {
  0,
  ABISELECT(6544,4276),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C11__7S468C21[] = {
  0,
  0,
  ABISELECT(14288,9360),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C11D1Ev,_ZTv0_n32_N7S468C11D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S468C11D0Ev,_ZTv0_n32_N7S468C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C11__7S468C21[] = {
  ABISELECT(13840,9044),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(13840,9044),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C11D1Ev,_ZTv0_n32_N7S468C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C11D0Ev,_ZTv0_n32_N7S468C11D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C11D1Ev,_ZTvn200_n32_N7S468C11D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C11D0Ev,_ZTvn200_n32_N7S468C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C11__7S468C21[] = {
  ABISELECT(13544,8844),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C11D1Ev,_ZTvn200_n32_N7S468C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C11D0Ev,_ZTvn200_n32_N7S468C11D0Ev),
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S468C5__A2__7S468C11__7S468C21[] = {
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S468C11[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern void _ZN7S468C12D1Ev();
extern void _ZN7S468C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C12__A1__7S468C21[] = {
  ABISELECT(-39296,-25808),
  ABISELECT(-39744,-26124),
  ABISELECT(-32000,-21040),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN7S468C12D1Ev,
  (VTBL_ENTRY)&_ZN7S468C12D0Ev,
};
extern void _ZN7S468C13D1Ev();
extern void _ZN7S468C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C137S468C12__A1__7S468C21[] = {
  ABISELECT(-39296,-25808),
  ABISELECT(-39744,-26124),
  ABISELECT(-32000,-21040),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN7S468C13D1Ev,
  (VTBL_ENTRY)&_ZN7S468C13D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C137S468C12__A1__7S468C21[] = {
  0,
  ABISELECT(32000,21040),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C137S468C12__A1__7S468C21[] = {
  0,
  0,
  ABISELECT(39744,26124),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C137S468C12__A1__7S468C21[] = {
  ABISELECT(39296,25808),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(39296,25808),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D1Ev,_ZTv0_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C13D0Ev,_ZTv0_n32_N7S468C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C137S468C12__A1__7S468C21[] = {
  ABISELECT(39000,25608),
  (VTBL_ENTRY)&(_ZTI7S468C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D1Ev,_ZTvn200_n32_N7S468C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C13D0Ev,_ZTvn200_n32_N7S468C13D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C12__A1__7S468C21[] = {
  0,
  ABISELECT(32000,21040),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__7S468C12__A1__7S468C21[] = {
  0,
  0,
  ABISELECT(39744,26124),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C12__A1__7S468C21[] = {
  ABISELECT(39296,25808),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(39296,25808),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D1Ev,_ZTv0_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S468C12D0Ev,_ZTv0_n32_N7S468C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S468C4__7S468C12__A1__7S468C21[] = {
  ABISELECT(39000,25608),
  (VTBL_ENTRY)&(_ZTI7S468C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D1Ev,_ZTvn200_n32_N7S468C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S468C12D0Ev,_ZTvn200_n32_N7S468C12D0Ev),
};
static  VTT_ENTRY vtt_S468C21[] = {
  {&(_ZTV7S468C21[8]),  8,98},
  {&(_ZTV7S468C21[14]),  14,98},
  {&(_ZTV7S468C21[24]),  24,98},
  {&(_ZTV7S468C21[36]),  36,98},
  {&(_ZTV7S468C21[31]),  31,98},
  {&(_ZTV7S468C21[41]),  41,98},
  {&(_ZTV7S468C21[54]),  54,98},
  {&(_ZTV7S468C21[58]),  58,98},
  {&(_ZTV7S468C21[62]),  62,98},
  {&(_ZTV7S468C21[68]),  68,98},
  {&(_ZTV7S468C21[72]),  72,98},
  {&(_ZTV7S468C21[86]),  86,98},
  {&(_ZTV7S468C21[90]),  90,98},
  {&(_ZTV7S468C21[94]),  94,98},
  {&(_tg__ZTV6S468C4__7S468C21[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C4__7S468C21[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C4__7S468C21[4]),  4,6},
  {&(_tg__ZTV7S468C11__7S468C21[6]),  6,8},
  {&(_tg__ZTV7S468C127S468C11__7S468C21[5]),  5,7},
  {&(_tg__ZTV7S468C137S468C127S468C11__7S468C21[5]),  5,7},
  {&(_tg__ZTV6S468C6__7S468C137S468C127S468C11__7S468C21[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C137S468C127S468C11__7S468C21[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C137S468C127S468C11__7S468C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C137S468C127S468C11__7S468C21[2]),  2,4},
  {&(_tg__ZTV6S468C6__7S468C127S468C11__7S468C21[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C127S468C11__7S468C21[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C127S468C11__7S468C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C127S468C11__7S468C21[2]),  2,4},
  {&(_tg__ZTV6S468C6__7S468C11__7S468C21[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C11__7S468C21[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C11__7S468C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C11__7S468C21[2]),  2,4},
  {&(_tg__ZTV6S468C5__A2__7S468C11__7S468C21[4]),  4,6},
  {&(_tg__ZTV7S468C12__A1__7S468C21[5]),  5,7},
  {&(_tg__ZTV7S468C137S468C12__A1__7S468C21[5]),  5,7},
  {&(_tg__ZTV6S468C6__7S468C137S468C12__A1__7S468C21[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C137S468C12__A1__7S468C21[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C137S468C12__A1__7S468C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C137S468C12__A1__7S468C21[2]),  2,4},
  {&(_tg__ZTV6S468C6__7S468C12__A1__7S468C21[3]),  3,4},
  {&(_tg__ZTV6S468C8__7S468C12__A1__7S468C21[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C12__A1__7S468C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S468C4__7S468C12__A1__7S468C21[2]),  2,4},
};
extern VTBL_ENTRY _ZTI7S468C21[];
extern  VTBL_ENTRY _ZTV7S468C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C21[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S468C21D0Ev,_ZTv0_n24_N7S468C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40480_N7S468C21D0Ev,_ZThn26592_N7S468C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S468C21D1Ev,_ZTv0_n24_N7S468C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40480_N7S468C21D1Ev,_ZThn26592_N7S468C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S468C21D0Ev,_ZTv0_n28_N7S468C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15024_N7S468C21D0Ev,_ZThn9828_N7S468C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S468C21D1Ev,_ZTv0_n28_N7S468C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15024_N7S468C21D1Ev,_ZThn9828_N7S468C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C21D0Ev,_ZTv0_n32_N7S468C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S468C21D0Ev,_ZThn784_N7S468C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S468C21D1Ev,_ZTv0_n32_N7S468C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S468C21D1Ev,_ZThn784_N7S468C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S468C21 = {  "S468C21", // class name
  bases_S468C21, 19,
  &(vtc_S468C21[0]), // expected_vtbl_contents
  &(vtt_S468C21[0]), // expected_vtt_contents
  ABISELECT(64384,42292), // object size
  NSPAIRA(_ZTI7S468C21),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S468C21),98, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S468C21),43, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S468C1  : S468C2 , virtual S468C15 , S468C16 {
  __tsi64 s468c1f0;
  void *s468c1f1;
  long double s468c1f2;
  long double s468c1f3[6];
  int s468c1f4;
  int s468c1f5;
  long double s468c1f6;
  ::S468C21 s468c1f7;
  ::S468C14_nt s468c1f8[5];
  ::S468C12 s468c1f9;
  ::S468C12 s468c1f10;
  int s468c1f11;
  ::S468C14_nt s468c1f12;
  ~S468C1(); // tgen
  S468C1(); // tgen
};
//SIG(1 S468C1) C1{ BC2{ BC3{ BC4{ BC5{ v1 v2 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC6{ v3 FC5[8] FC5[2] Fp Fi FC7{ vd m Fp FL Fp[7]} FC5[5] Fp[5] FC5[5]} BC7 VBC8{ v4 v5 Fc FL[10] FD FC5 Fp Fs Fp Fi} v6 FL:2 FD[7] Fp FC6 Fp Fi Fp[2] FC7 FC5 FD[8]} BC8 BC7 BC6 VBC5 vd v7 v8 FC7 Fi Fp[2] FL[2] Fi[2] Fp Fi FC8 Fi} BC4 VBC9{ vd v9 v10 Fi FC5 Fi[2] FU10{ m FL FD[10] FD Fs:0} FD Fi Fi FC8 FL Fi FC8} vd v11 Fp FD FD FC11{ BC12{ BC13{ VBC6 VBC8 VBC4 BC7 Fp FC7 FC5 Fs} BC5 BC9 FC3} VBC5 BC7 BC9 FC14{ m Fc} Fi Fi Fi:6 FC14 Fi}} VBC15{ BC7 BC8 BC4 Fp FC4 Fc[7] FC9 Fi Fc[4] Fp FC4 Fi Fi[7] Fi} BC16{ m FC12 FC17{ VBC6 BC15 BC18{ BC6 VBC5 VBC19{ BC6 BC7 VBC5 vd v12 Fi Fs Fs:1 Fp Fl FC6 Fi[2] Fc[3] Fi} BC12 vd Fp} Fp Fi[4] FC20{} FC12 FC14 Fi Fi:24 FC14 Fi FC20} Fi FC5 FC14 Fp Fi:15 Fi Fi} FL Fp FD FD[6] Fi Fi FD FC21{ VBC8 VBC4 VBC5 VBC11 VBC12 vd Fp FC5 Fp Fp Fi FC5 Fs Fi Fc[10] Fp Fi Fl[4] Fp} FC14[5] FC12 FC12 Fi FC14}


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

static void Test_S468C1()
{
  extern Class_Descriptor cd_S468C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26154,68661)];
    init_test(&cd_S468C1, buf);
    S468C1 *dp, &lv = *(dp=new (buf) S468C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(418448,274640), "sizeof(S468C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S468C1)");
    check_base_class_offset(lv, (S468C5*)(S468C4*)(S468C3*)(S468C2*), 0, "S468C1");
    check_base_class_offset(lv, (S468C6*)(S468C4*)(S468C3*)(S468C2*), ABISELECT(372688,244540), "S468C1");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C6*)(S468C4*)(S468C2*), ABISELECT(372688,244540), "S468C1");
    check_base_class_offset(lv, (S468C6*)(S468C4*)(S468C15*), ABISELECT(372688,244540), "S468C1");
    check_base_class_offset(lv, (S468C7*)(S468C4*)(S468C3*)(S468C2*), ABISELECT(296,200), "S468C1");
    check_base_class_offset(lv, (S468C8*)(S468C4*)(S468C3*)(S468C2*), ABISELECT(378928,248616), "S468C1");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C8*)(S468C4*)(S468C2*), ABISELECT(378928,248616), "S468C1");
    check_base_class_offset(lv, (S468C8*)(S468C4*)(S468C15*), ABISELECT(378928,248616), "S468C1");
    check_base_class_offset(lv, (S468C4*)(S468C3*)(S468C2*), 0, "S468C1");
    /*is_ambiguous_... S468C3::S468C8 */ AMB_check_base_class_offset(lv, (S468C8*)(S468C3*)(S468C2*), ABISELECT(7296,4768), "S468C1");
    /*is_ambiguous_... S468C3::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C3*)(S468C2*), ABISELECT(7744,5084), "S468C1");
    /*is_ambiguous_... S468C3::S468C6 */ AMB_check_base_class_offset(lv, (S468C6*)(S468C3*)(S468C2*), ABISELECT(7824,5128), "S468C1");
    /*is_ambiguous_... S468C3::S468C5 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C3*)(S468C2*), ABISELECT(379376,248932), "S468C1");
    check_base_class_offset(lv, (S468C3*)(S468C2*), 0, "S468C1");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C5*)(S468C4*)(S468C2*), ABISELECT(14672,9612), "S468C1");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C4*)(S468C2*), ABISELECT(14968,9812), "S468C1");
    /*is_ambiguous_... S468C2::S468C4 */ AMB_check_base_class_offset(lv, (S468C4*)(S468C2*), ABISELECT(14672,9612), "S468C1");
    check_base_class_offset(lv, (S468C9*)(S468C2*), ABISELECT(379680,249132), "S468C1");
    check_base_class_offset(lv, (S468C2*), 0, "S468C1");
    /*is_ambiguous_... S468C15::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S468C15*), ABISELECT(381120,250132), "S468C1");
    /*is_ambiguous_... S468C15::S468C8 */ AMB_check_base_class_offset(lv, (S468C8*)(S468C15*), ABISELECT(381200,250176), "S468C1");
    check_base_class_offset(lv, (S468C5*)(S468C4*)(S468C15*), ABISELECT(381648,250492), "S468C1");
    check_base_class_offset(lv, (S468C7*)(S468C4*)(S468C15*), ABISELECT(381944,250692), "S468C1");
    check_base_class_offset(lv, (S468C4*)(S468C15*), ABISELECT(381648,250492), "S468C1");
    check_base_class_offset(lv, (S468C15*), ABISELECT(381120,250132), "S468C1");
    check_base_class_offset(lv, (S468C16*), ABISELECT(61760,40532), "S468C1");
    check_field_offset(lv, s468c1f0, ABISELECT(232336,152396), "S468C1.s468c1f0");
    check_field_offset(lv, s468c1f1, ABISELECT(232344,152404), "S468C1.s468c1f1");
    check_field_offset(lv, s468c1f2, ABISELECT(232352,152408), "S468C1.s468c1f2");
    check_field_offset(lv, s468c1f3, ABISELECT(232368,152420), "S468C1.s468c1f3");
    check_field_offset(lv, s468c1f4, ABISELECT(232464,152492), "S468C1.s468c1f4");
    check_field_offset(lv, s468c1f5, ABISELECT(232468,152496), "S468C1.s468c1f5");
    check_field_offset(lv, s468c1f6, ABISELECT(232480,152500), "S468C1.s468c1f6");
    check_field_offset(lv, s468c1f7, ABISELECT(232496,152512), "S468C1.s468c1f7");
    check_field_offset(lv, s468c1f8, ABISELECT(296880,194804), "S468C1.s468c1f8");
    check_field_offset(lv, s468c1f9, ABISELECT(296896,194812), "S468C1.s468c1f9");
    check_field_offset(lv, s468c1f10, ABISELECT(334784,219672), "S468C1.s468c1f10");
    check_field_offset(lv, s468c1f11, ABISELECT(372672,244532), "S468C1.s468c1f11");
    check_field_offset(lv, s468c1f12, ABISELECT(372676,244536), "S468C1.s468c1f12");
    test_class_info(&lv, &cd_S468C1);
    dp->~S468C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS468C1(Test_S468C1, "S468C1", ABISELECT(418448,274640));

#else // __cplusplus

extern void _ZN6S468C1C1Ev();
extern void _ZN6S468C1D1Ev();
Name_Map name_map_S468C1[] = {
  NSPAIR(_ZN6S468C1C1Ev),
  NSPAIR(_ZN6S468C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C6;
extern VTBL_ENTRY _ZTI6S468C6[];
extern  VTBL_ENTRY _ZTV6S468C6[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C3;
extern VTBL_ENTRY _ZTI6S468C3[];
extern  VTBL_ENTRY _ZTV6S468C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C3[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C9;
extern VTBL_ENTRY _ZTI6S468C9[];
extern  VTBL_ENTRY _ZTV6S468C9[];
extern Class_Descriptor cd_S468C2;
extern VTBL_ENTRY _ZTI6S468C2[];
extern  VTBL_ENTRY _ZTV6S468C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C2[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C8;
extern VTBL_ENTRY _ZTI6S468C8[];
extern  VTBL_ENTRY _ZTV6S468C8[];
extern Class_Descriptor cd_S468C5;
extern VTBL_ENTRY _ZTI6S468C5[];
extern  VTBL_ENTRY _ZTV6S468C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S468C4;
extern VTBL_ENTRY _ZTI6S468C4[];
extern  VTBL_ENTRY _ZTV6S468C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C4[];
extern Class_Descriptor cd_S468C15;
extern VTBL_ENTRY _ZTI7S468C15[];
extern  VTBL_ENTRY _ZTV7S468C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S468C15[];
extern Class_Descriptor cd_S468C16;
extern VTBL_ENTRY _ZTI7S468C16[];
static Base_Class bases_S468C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S468C6,    ABISELECT(372688,244540), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(296,200), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C8,    ABISELECT(378928,248616), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S468C4,    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
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C8,    ABISELECT(7296,4768), //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
    14, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(7744,5084), //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
    15, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C6,    ABISELECT(7824,5128), //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
    16, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(379376,248932), //bcp->offset
    53, //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
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S468C3,    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
    17, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(14672,9612), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(14968,9812), //bcp->offset
    39, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(14672,9612), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S468C9,    ABISELECT(379680,249132), //bcp->offset
    59, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S468C2,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C7,    ABISELECT(381120,250132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S468C8,    ABISELECT(381200,250176), //bcp->offset
    80, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S468C5,    ABISELECT(381648,250492), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(381944,250692), //bcp->offset
    93, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S468C4,    ABISELECT(381648,250492), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S468C15,    ABISELECT(381120,250132), //bcp->offset
    68, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C16,    ABISELECT(61760,40532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S468C1[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C1D1Ev();
extern void _ZN6S468C1D0Ev();
extern void _ZN6S468C32v7Ev();
extern void _ZN6S468C32v8Ev();
extern void _ZN6S468C23v11Ev();
extern void ABISELECT(_ZThn296_N6S468C1D1Ev,_ZThn200_N6S468C1D1Ev)();
extern void ABISELECT(_ZThn296_N6S468C1D0Ev,_ZThn200_N6S468C1D0Ev)();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void ABISELECT(_ZThn7744_N6S468C1D1Ev,_ZThn5084_N6S468C1D1Ev)();
extern void ABISELECT(_ZThn7744_N6S468C1D0Ev,_ZThn5084_N6S468C1D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZThn14672_N6S468C1D1Ev,_ZThn9612_N6S468C1D1Ev)();
extern void ABISELECT(_ZThn14672_N6S468C1D0Ev,_ZThn9612_N6S468C1D0Ev)();
extern void ABISELECT(_ZThn14968_N6S468C1D1Ev,_ZThn9812_N6S468C1D1Ev)();
extern void ABISELECT(_ZThn14968_N6S468C1D0Ev,_ZThn9812_N6S468C1D0Ev)();
extern void _ZN6S468C62v3Ev();
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N6S468C1D1Ev,_ZTv0_n12_N6S468C1D1Ev)();
extern void ABISELECT(_ZThn379680_N6S468C1D1Ev,_ZThn249132_N6S468C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S468C1D0Ev,_ZTv0_n12_N6S468C1D0Ev)();
extern void ABISELECT(_ZThn379680_N6S468C1D0Ev,_ZThn249132_N6S468C1D0Ev)() __attribute__((weak));
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
extern void ABISELECT(_ZTv0_n40_N6S468C1D1Ev,_ZTv0_n20_N6S468C1D1Ev)();
extern void ABISELECT(_ZThn381120_N6S468C1D1Ev,_ZThn250132_N6S468C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S468C1D0Ev,_ZTv0_n20_N6S468C1D0Ev)();
extern void ABISELECT(_ZThn381120_N6S468C1D0Ev,_ZThn250132_N6S468C1D0Ev)() __attribute__((weak));
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZTvn528_n40_N6S468C1D1Ev,_ZTvn360_n20_N6S468C1D1Ev)();
extern void ABISELECT(_ZTvn528_n40_N6S468C1D0Ev,_ZTvn360_n20_N6S468C1D0Ev)();
extern void ABISELECT(_ZTvn824_n40_N6S468C1D1Ev,_ZTvn560_n20_N6S468C1D1Ev)();
extern void ABISELECT(_ZTvn824_n40_N6S468C1D0Ev,_ZTvn560_n20_N6S468C1D0Ev)();
static  VTBL_ENTRY vtc_S468C1[] = {
  ABISELECT(381120,250132),
  ABISELECT(379680,249132),
  ABISELECT(379376,248932),
  ABISELECT(378928,248616),
  ABISELECT(372688,244540),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C1D1Ev,
  (VTBL_ENTRY)&_ZN6S468C1D0Ev,
  (VTBL_ENTRY)&_ZN6S468C32v7Ev,
  (VTBL_ENTRY)&_ZN6S468C32v8Ev,
  (VTBL_ENTRY)&_ZN6S468C23v11Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S468C1D1Ev,_ZThn200_N6S468C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S468C1D0Ev,_ZThn200_N6S468C1D0Ev),
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-7744,-5084),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S468C1D1Ev,_ZThn5084_N6S468C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S468C1D0Ev,_ZThn5084_N6S468C1D0Ev),
  ABISELECT(-7824,-5128),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  ABISELECT(364256,239004),
  ABISELECT(358016,234928),
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S468C1D1Ev,_ZThn9612_N6S468C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S468C1D0Ev,_ZThn9612_N6S468C1D0Ev),
  ABISELECT(-14968,-9812),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn14968_N6S468C1D1Ev,_ZThn9812_N6S468C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14968_N6S468C1D0Ev,_ZThn9812_N6S468C1D0Ev),
  0,
  ABISELECT(-372688,-244540),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
  0,
  0,
  ABISELECT(-378928,-248616),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  0,
  0,
  ABISELECT(-379376,-248932),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  0,
  0,
  ABISELECT(-379680,-249132),
  ABISELECT(-379680,-249132),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S468C1D1Ev,_ZTv0_n12_N6S468C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S468C1D0Ev,_ZTv0_n12_N6S468C1D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
  ABISELECT(528,360),
  ABISELECT(528,360),
  ABISELECT(528,360),
  ABISELECT(80,44),
  ABISELECT(80,44),
  ABISELECT(-381120,-250132),
  ABISELECT(-2192,-1516),
  ABISELECT(-8432,-5592),
  ABISELECT(-381120,-250132),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S468C1D1Ev,_ZTv0_n20_N6S468C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S468C1D0Ev,_ZTv0_n20_N6S468C1D0Ev),
  ABISELECT(-381200,-250176),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
  ABISELECT(-2720,-1876),
  ABISELECT(-8960,-5952),
  ABISELECT(-381648,-250492),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn528_n40_N6S468C1D1Ev,_ZTvn360_n20_N6S468C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn528_n40_N6S468C1D0Ev,_ZTvn360_n20_N6S468C1D0Ev),
  ABISELECT(-381944,-250692),
  (VTBL_ENTRY)&(_ZTI6S468C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn824_n40_N6S468C1D1Ev,_ZTvn560_n20_N6S468C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn824_n40_N6S468C1D0Ev,_ZTvn560_n20_N6S468C1D0Ev),
};
extern VTBL_ENTRY _ZTV6S468C1[];
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C2D1Ev();
extern void _ZN6S468C2D0Ev();
extern void _ZN6S468C32v7Ev();
extern void _ZN6S468C32v8Ev();
extern void _ZN6S468C23v11Ev();
static  VTBL_ENTRY _tg__ZTV6S468C2__6S468C1[] = {
  ABISELECT(379680,249132),
  ABISELECT(379376,248932),
  ABISELECT(378928,248616),
  ABISELECT(372688,244540),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C2D1Ev,
  (VTBL_ENTRY)&_ZN6S468C2D0Ev,
  (VTBL_ENTRY)&_ZN6S468C32v7Ev,
  (VTBL_ENTRY)&_ZN6S468C32v8Ev,
  (VTBL_ENTRY)&_ZN6S468C23v11Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C3D1Ev();
extern void _ZN6S468C3D0Ev();
extern void _ZN6S468C32v7Ev();
extern void _ZN6S468C32v8Ev();
static  VTBL_ENTRY _tg__ZTV6S468C36S468C2__6S468C1[] = {
  ABISELECT(379376,248932),
  ABISELECT(378928,248616),
  ABISELECT(372688,244540),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C3D1Ev,
  (VTBL_ENTRY)&_ZN6S468C3D0Ev,
  (VTBL_ENTRY)&_ZN6S468C32v7Ev,
  (VTBL_ENTRY)&_ZN6S468C32v8Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C46S468C36S468C2__6S468C1[] = {
  ABISELECT(378928,248616),
  ABISELECT(372688,244540),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C46S468C36S468C2__6S468C1[] = {
  0,
  ABISELECT(-372688,-244540),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C46S468C36S468C2__6S468C1[] = {
  0,
  0,
  ABISELECT(-378928,-248616),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C36S468C2__6S468C1[] = {
  0,
  ABISELECT(-372688,-244540),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C36S468C2__6S468C1[] = {
  0,
  0,
  ABISELECT(-378928,-248616),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S468C5__A1__6S468C36S468C2__6S468C1[] = {
  0,
  0,
  ABISELECT(-379376,-248932),
  (VTBL_ENTRY)&(_ZTI6S468C3[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C46S468C2__A1__6S468C1[] = {
  ABISELECT(364256,239004),
  ABISELECT(358016,234928),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C46S468C2__A1__6S468C1[] = {
  0,
  ABISELECT(-358016,-234928),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C46S468C2__A1__6S468C1[] = {
  0,
  0,
  ABISELECT(-364256,-239004),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C2__6S468C1[] = {
  0,
  ABISELECT(-372688,-244540),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C2__6S468C1[] = {
  0,
  0,
  ABISELECT(-378928,-248616),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S468C5__A1__6S468C2__6S468C1[] = {
  0,
  0,
  ABISELECT(-379376,-248932),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZThn14672_N6S468C2D1Ev,_ZThn9612_N6S468C2D1Ev)();
extern void ABISELECT(_ZThn14672_N6S468C2D0Ev,_ZThn9612_N6S468C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C4__A1__6S468C2__6S468C1[] = {
  ABISELECT(364256,239004),
  ABISELECT(358016,234928),
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S468C2D1Ev,_ZThn9612_N6S468C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S468C2D0Ev,_ZThn9612_N6S468C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N6S468C2D1Ev,_ZTv0_n12_N6S468C2D1Ev)();
extern void ABISELECT(_ZThn379680_N6S468C2D1Ev,_ZThn249132_N6S468C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S468C2D0Ev,_ZTv0_n12_N6S468C2D0Ev)();
extern void ABISELECT(_ZThn379680_N6S468C2D0Ev,_ZThn249132_N6S468C2D0Ev)() __attribute__((weak));
extern void _ZN6S468C92v9Ev();
extern void _ZN6S468C93v10Ev();
static  VTBL_ENTRY _tg__ZTV6S468C9__6S468C2__6S468C1[] = {
  0,
  0,
  ABISELECT(-379680,-249132),
  ABISELECT(-379680,-249132),
  (VTBL_ENTRY)&(_ZTI6S468C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S468C2D1Ev,_ZTv0_n12_N6S468C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S468C2D0Ev,_ZTv0_n12_N6S468C2D0Ev),
  (VTBL_ENTRY)&_ZN6S468C92v9Ev,
  (VTBL_ENTRY)&_ZN6S468C93v10Ev,
};
extern void _ZN7S468C15D1Ev();
extern void _ZN7S468C15D0Ev();
static  VTBL_ENTRY _tg__ZTV7S468C15__6S468C1[] = {
  ABISELECT(-2192,-1516),
  ABISELECT(-8432,-5592),
  0,
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN7S468C15D1Ev,
  (VTBL_ENTRY)&_ZN7S468C15D0Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void _ZN6S468C4D1Ev();
extern void _ZN6S468C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S468C47S468C15__A2__6S468C1[] = {
  ABISELECT(-2720,-1876),
  ABISELECT(-8960,-5952),
  0,
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&_ZN6S468C4D1Ev,
  (VTBL_ENTRY)&_ZN6S468C4D0Ev,
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__6S468C47S468C15__A2__6S468C1[] = {
  0,
  ABISELECT(8960,5952),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__6S468C47S468C15__A2__6S468C1[] = {
  0,
  0,
  ABISELECT(2720,1876),
  (VTBL_ENTRY)&(_ZTI6S468C4[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
extern void _ZN6S468C52v1Ev();
extern void _ZN6S468C52v2Ev();
extern void _ZN6S468C42v6Ev();
extern void ABISELECT(_ZThn528_N7S468C15D1Ev,_ZThn360_N7S468C15D1Ev)();
extern void ABISELECT(_ZThn528_N7S468C15D0Ev,_ZThn360_N7S468C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C4__7S468C15__6S468C1[] = {
  ABISELECT(-2720,-1876),
  ABISELECT(-8960,-5952),
  ABISELECT(-528,-360),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C52v1Ev,
  (VTBL_ENTRY)&_ZN6S468C52v2Ev,
  (VTBL_ENTRY)&_ZN6S468C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S468C15D1Ev,_ZThn360_N7S468C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S468C15D0Ev,_ZThn360_N7S468C15D0Ev),
};
extern void _ZN6S468C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S468C6__7S468C15__6S468C1[] = {
  0,
  ABISELECT(8432,5592),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C62v3Ev,
};
extern void _ZN6S468C82v4Ev();
extern void _ZN6S468C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S468C8__A1__7S468C15__6S468C1[] = {
  0,
  0,
  ABISELECT(2192,1516),
  (VTBL_ENTRY)&(_ZTI7S468C15[0]),
  (VTBL_ENTRY)&_ZN6S468C82v4Ev,
  (VTBL_ENTRY)&_ZN6S468C82v5Ev,
};
static  VTT_ENTRY vtt_S468C1[] = {
  {&(_ZTV6S468C1[7]),  7,97},
  {&(_tg__ZTV6S468C2__6S468C1[6]),  6,14},
  {&(_tg__ZTV6S468C36S468C2__6S468C1[5]),  5,12},
  {&(_tg__ZTV6S468C46S468C36S468C2__6S468C1[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C46S468C36S468C2__6S468C1[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C46S468C36S468C2__6S468C1[4]),  4,6},
  {&(_tg__ZTV6S468C6__6S468C36S468C2__6S468C1[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C36S468C2__6S468C1[4]),  4,6},
  {&(_tg__ZTV6S468C5__A1__6S468C36S468C2__6S468C1[4]),  4,6},
  {&(_tg__ZTV6S468C46S468C2__A1__6S468C1[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C46S468C2__A1__6S468C1[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C46S468C2__A1__6S468C1[4]),  4,6},
  {&(_tg__ZTV6S468C6__6S468C2__6S468C1[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C2__6S468C1[4]),  4,6},
  {&(_tg__ZTV6S468C5__A1__6S468C2__6S468C1[4]),  4,6},
  {&(_tg__ZTV6S468C4__A1__6S468C2__6S468C1[4]),  4,9},
  {&(_tg__ZTV6S468C9__6S468C2__6S468C1[5]),  5,9},
  {&(_ZTV6S468C1[46]),  46,97},
  {&(_ZTV6S468C1[51]),  51,97},
  {&(_ZTV6S468C1[57]),  57,97},
  {&(_ZTV6S468C1[34]),  34,97},
  {&(_ZTV6S468C1[64]),  64,97},
  {&(_ZTV6S468C1[78]),  78,97},
  {&(_ZTV6S468C1[82]),  82,97},
  {&(_ZTV6S468C1[88]),  88,97},
  {&(_ZTV6S468C1[95]),  95,97},
  {&(_tg__ZTV7S468C15__6S468C1[4]),  4,6},
  {&(_tg__ZTV6S468C47S468C15__A2__6S468C1[4]),  4,9},
  {&(_tg__ZTV6S468C6__6S468C47S468C15__A2__6S468C1[3]),  3,4},
  {&(_tg__ZTV6S468C8__6S468C47S468C15__A2__6S468C1[4]),  4,6},
  {&(_tg__ZTV6S468C4__7S468C15__6S468C1[4]),  4,9},
  {&(_tg__ZTV6S468C6__7S468C15__6S468C1[3]),  3,4},
  {&(_tg__ZTV6S468C8__A1__7S468C15__6S468C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI6S468C1[];
extern  VTBL_ENTRY _ZTV6S468C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S468C1[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S468C2D0Ev,_ZTv0_n12_N6S468C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn379680_N6S468C2D0Ev,_ZThn249132_N6S468C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S468C2D1Ev,_ZTv0_n12_N6S468C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn379680_N6S468C2D1Ev,_ZThn249132_N6S468C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S468C1D0Ev,_ZTv0_n20_N6S468C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn381120_N6S468C1D0Ev,_ZThn250132_N6S468C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S468C1D1Ev,_ZTv0_n20_N6S468C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn381120_N6S468C1D1Ev,_ZThn250132_N6S468C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S468C1D0Ev,_ZTv0_n12_N6S468C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn379680_N6S468C1D0Ev,_ZThn249132_N6S468C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S468C1D1Ev,_ZTv0_n12_N6S468C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn379680_N6S468C1D1Ev,_ZThn249132_N6S468C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S468C1 = {  "S468C1", // class name
  bases_S468C1, 22,
  &(vtc_S468C1[0]), // expected_vtbl_contents
  &(vtt_S468C1[0]), // expected_vtt_contents
  ABISELECT(418448,274640), // object size
  NSPAIRA(_ZTI6S468C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S468C1),97, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S468C1),33, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C5  {
  __tsi64 s467c5f0;
  void *s467c5f1;
  char s467c5f2:6;
  long double s467c5f3;
  char s467c5f4[7];
  __tsi64 s467c5f5;
  char s467c5f6[9];
  long double s467c5f7[8];
  void *s467c5f8;
  short s467c5f9;
  void *s467c5f10[7];
  int s467c5f11;
  void *s467c5f12;
  virtual void  v1(); // _ZN6S467C52v1Ev
  virtual void  v2(); // _ZN6S467C52v2Ev
  ~S467C5(); // tgen
  S467C5(); // tgen
};
//SIG(-1 S467C5) C1{ v1 v2 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}


void  S467C5 ::v1(){vfunc_called(this, "_ZN6S467C52v1Ev");}
void  S467C5 ::v2(){vfunc_called(this, "_ZN6S467C52v2Ev");}
S467C5 ::~S467C5(){ note_dtor("S467C5", this);} // tgen
S467C5 ::S467C5(){ note_ctor("S467C5", this);} // tgen

static void Test_S467C5()
{
  extern Class_Descriptor cd_S467C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,51)];
    init_test(&cd_S467C5, buf);
    S467C5 *dp, &lv = *(dp=new (buf) S467C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S467C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C5)");
    check_field_offset(lv, s467c5f0, ABISELECT(8,4), "S467C5.s467c5f0");
    check_field_offset(lv, s467c5f1, ABISELECT(16,12), "S467C5.s467c5f1");
    set_bf_and_test(lv, s467c5f2, ABISELECT(24,16), 0, 6, 1, "S467C5");
    set_bf_and_test(lv, s467c5f2, ABISELECT(24,16), 0, 6, hide_sll(1LL<<5), "S467C5");
    check_field_offset(lv, s467c5f3, ABISELECT(32,20), "S467C5.s467c5f3");
    check_field_offset(lv, s467c5f4, ABISELECT(48,32), "S467C5.s467c5f4");
    check_field_offset(lv, s467c5f5, ABISELECT(56,40), "S467C5.s467c5f5");
    check_field_offset(lv, s467c5f6, ABISELECT(64,48), "S467C5.s467c5f6");
    check_field_offset(lv, s467c5f7, ABISELECT(80,60), "S467C5.s467c5f7");
    check_field_offset(lv, s467c5f8, ABISELECT(208,156), "S467C5.s467c5f8");
    check_field_offset(lv, s467c5f9, ABISELECT(216,160), "S467C5.s467c5f9");
    check_field_offset(lv, s467c5f10, ABISELECT(224,164), "S467C5.s467c5f10");
    check_field_offset(lv, s467c5f11, ABISELECT(280,192), "S467C5.s467c5f11");
    check_field_offset(lv, s467c5f12, ABISELECT(288,196), "S467C5.s467c5f12");
    test_class_info(&lv, &cd_S467C5);
    dp->~S467C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C5(Test_S467C5, "S467C5", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN6S467C5C1Ev();
extern void _ZN6S467C5D1Ev();
Name_Map name_map_S467C5[] = {
  NSPAIR(_ZN6S467C5C1Ev),
  NSPAIR(_ZN6S467C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S467C5[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY vtc_S467C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S467C5[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
Class_Descriptor cd_S467C5 = {  "S467C5", // class name
  0,0,//no base classes
  &(vtc_S467C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI6S467C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S467C5),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  S467C6  {
  ::S467C5 s467c6f0[8];
  ::S467C5 s467c6f1[2];
  void *s467c6f2;
  int s467c6f3;
  ::S468C7 s467c6f4;
  ::S467C5 s467c6f5[5];
  void *s467c6f6[5];
  ::S467C5 s467c6f7[5];
  virtual void  v3(); // _ZN6S467C62v3Ev
  ~S467C6(); // tgen
  S467C6(); // tgen
};
//SIG(-1 S467C6) C1{ v1 FC2{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC2[2] Fp Fi FC3{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]}


void  S467C6 ::v3(){vfunc_called(this, "_ZN6S467C62v3Ev");}
S467C6 ::~S467C6(){ note_dtor("S467C6", this);} // tgen
S467C6 ::S467C6(){ note_ctor("S467C6", this);} // tgen

static void Test_S467C6()
{
  extern Class_Descriptor cd_S467C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(391,1020)];
    init_test(&cd_S467C6, buf);
    S467C6 *dp, &lv = *(dp=new (buf) S467C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6240,4076), "sizeof(S467C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C6)");
    check_field_offset(lv, s467c6f0, ABISELECT(16,4), "S467C6.s467c6f0");
    check_field_offset(lv, s467c6f1, ABISELECT(2448,1604), "S467C6.s467c6f1");
    check_field_offset(lv, s467c6f2, ABISELECT(3056,2004), "S467C6.s467c6f2");
    check_field_offset(lv, s467c6f3, ABISELECT(3064,2008), "S467C6.s467c6f3");
    check_field_offset(lv, s467c6f4, ABISELECT(3072,2012), "S467C6.s467c6f4");
    check_field_offset(lv, s467c6f5, ABISELECT(3152,2056), "S467C6.s467c6f5");
    check_field_offset(lv, s467c6f6, ABISELECT(4672,3056), "S467C6.s467c6f6");
    check_field_offset(lv, s467c6f7, ABISELECT(4720,3076), "S467C6.s467c6f7");
    test_class_info(&lv, &cd_S467C6);
    dp->~S467C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C6(Test_S467C6, "S467C6", ABISELECT(6240,4076));

#else // __cplusplus

extern void _ZN6S467C6C1Ev();
extern void _ZN6S467C6D1Ev();
Name_Map name_map_S467C6[] = {
  NSPAIR(_ZN6S467C6C1Ev),
  NSPAIR(_ZN6S467C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S467C6[];
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY vtc_S467C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S467C6[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
Class_Descriptor cd_S467C6 = {  "S467C6", // class name
  0,0,//no base classes
  &(vtc_S467C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6240,4076), // object size
  NSPAIRA(_ZTI6S467C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S467C6),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  S467C8  {
  char s467c8f0;
  __tsi64 s467c8f1[10];
  long double s467c8f2;
  ::S467C5 s467c8f3;
  void *s467c8f4;
  short s467c8f5;
  void *s467c8f6;
  int s467c8f7;
  virtual void  v4(); // _ZN6S467C82v4Ev
  virtual void  v5(); // _ZN6S467C82v5Ev
  ~S467C8(); // tgen
  S467C8(); // tgen
};
//SIG(-1 S467C8) C1{ v1 v2 Fc FL[10] FD FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fp Fs Fp Fi}


void  S467C8 ::v4(){vfunc_called(this, "_ZN6S467C82v4Ev");}
void  S467C8 ::v5(){vfunc_called(this, "_ZN6S467C82v5Ev");}
S467C8 ::~S467C8(){ note_dtor("S467C8", this);} // tgen
S467C8 ::S467C8(){ note_ctor("S467C8", this);} // tgen

static void Test_S467C8()
{
  extern Class_Descriptor cd_S467C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,80)];
    init_test(&cd_S467C8, buf);
    S467C8 *dp, &lv = *(dp=new (buf) S467C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,316), "sizeof(S467C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C8)");
    check_field_offset(lv, s467c8f0, ABISELECT(8,4), "S467C8.s467c8f0");
    check_field_offset(lv, s467c8f1, ABISELECT(16,8), "S467C8.s467c8f1");
    check_field_offset(lv, s467c8f2, ABISELECT(96,88), "S467C8.s467c8f2");
    check_field_offset(lv, s467c8f3, ABISELECT(112,100), "S467C8.s467c8f3");
    check_field_offset(lv, s467c8f4, ABISELECT(416,300), "S467C8.s467c8f4");
    check_field_offset(lv, s467c8f5, ABISELECT(424,304), "S467C8.s467c8f5");
    check_field_offset(lv, s467c8f6, ABISELECT(432,308), "S467C8.s467c8f6");
    check_field_offset(lv, s467c8f7, ABISELECT(440,312), "S467C8.s467c8f7");
    test_class_info(&lv, &cd_S467C8);
    dp->~S467C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C8(Test_S467C8, "S467C8", ABISELECT(448,316));

#else // __cplusplus

extern void _ZN6S467C8C1Ev();
extern void _ZN6S467C8D1Ev();
Name_Map name_map_S467C8[] = {
  NSPAIR(_ZN6S467C8C1Ev),
  NSPAIR(_ZN6S467C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S467C8[];
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY vtc_S467C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S467C8[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
Class_Descriptor cd_S467C8 = {  "S467C8", // class name
  0,0,//no base classes
  &(vtc_S467C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,316), // object size
  NSPAIRA(_ZTI6S467C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S467C8),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  S467C4  : S467C5 , virtual S467C6 , S468C7 , virtual S467C8 {
  int s467c4f0:2;
  long double s467c4f1[7];
  void *s467c4f2;
  ::S467C6 s467c4f3;
  void *s467c4f4;
  int s467c4f5;
  void *s467c4f6[2];
  ::S468C7 s467c4f7;
  ::S467C5 s467c4f8;
  long double s467c4f9[8];
  virtual void  v6(); // _ZN6S467C42v6Ev
  ~S467C4(); // tgen
  S467C4(); // tgen
};
//SIG(-1 S467C4) C1{ BC2{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC3{ v4 FC2[8] FC2[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]} BC4 VBC5{ v5 v6 Fc FL[10] FD FC2 Fp Fs Fp Fi} v1 Fi:2 FD[7] Fp FC3 Fp Fi Fp[2] FC4 FC2 FD[8]}


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

static void Test_S467C4()
{
  extern Class_Descriptor cd_S467C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(875,2291)];
    init_test(&cd_S467C4, buf);
    S467C4 *dp, &lv = *(dp=new (buf) S467C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13984,9160), "sizeof(S467C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C4)");
    check_base_class_offset(lv, (S467C5*), 0, "S467C4");
    check_base_class_offset(lv, (S467C6*), ABISELECT(7296,4768), "S467C4");
    check_base_class_offset(lv, (S468C7*), ABISELECT(296,200), "S467C4");
    check_base_class_offset(lv, (S467C8*), ABISELECT(13536,8844), "S467C4");
    set_bf_and_test(lv, s467c4f0, ABISELECT(376,244), 0, 2, 1, "S467C4");
    set_bf_and_test(lv, s467c4f0, ABISELECT(376,244), 0, 2, hide_sll(1LL<<1), "S467C4");
    check_field_offset(lv, s467c4f1, ABISELECT(384,248), "S467C4.s467c4f1");
    check_field_offset(lv, s467c4f2, ABISELECT(496,332), "S467C4.s467c4f2");
    check_field_offset(lv, s467c4f3, ABISELECT(512,336), "S467C4.s467c4f3");
    check_field_offset(lv, s467c4f4, ABISELECT(6752,4412), "S467C4.s467c4f4");
    check_field_offset(lv, s467c4f5, ABISELECT(6760,4416), "S467C4.s467c4f5");
    check_field_offset(lv, s467c4f6, ABISELECT(6768,4420), "S467C4.s467c4f6");
    check_field_offset(lv, s467c4f7, ABISELECT(6784,4428), "S467C4.s467c4f7");
    check_field_offset(lv, s467c4f8, ABISELECT(6864,4472), "S467C4.s467c4f8");
    check_field_offset(lv, s467c4f9, ABISELECT(7168,4672), "S467C4.s467c4f9");
    test_class_info(&lv, &cd_S467C4);
    dp->~S467C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C4(Test_S467C4, "S467C4", ABISELECT(13984,9160));

#else // __cplusplus

extern void _ZN6S467C4C1Ev();
extern void _ZN6S467C4D1Ev();
Name_Map name_map_S467C4[] = {
  NSPAIR(_ZN6S467C4C1Ev),
  NSPAIR(_ZN6S467C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
static Base_Class bases_S467C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S467C6,    ABISELECT(7296,4768), //bcp->offset
    13, //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_S468C7,    ABISELECT(296,200), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C8,    ABISELECT(13536,8844), //bcp->offset
    17, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S467C4[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
extern void ABISELECT(_ZThn296_N6S467C4D1Ev,_ZThn200_N6S467C4D1Ev)();
extern void ABISELECT(_ZThn296_N6S467C4D0Ev,_ZThn200_N6S467C4D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY vtc_S467C4[] = {
  ABISELECT(13536,8844),
  ABISELECT(7296,4768),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S467C4D1Ev,_ZThn200_N6S467C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S467C4D0Ev,_ZThn200_N6S467C4D0Ev),
  0,
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-13536,-8844),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern VTBL_ENTRY _ZTV6S467C4[];
static  VTT_ENTRY vtt_S467C4[] = {
  {&(_ZTV6S467C4[4]),  4,23},
  {&(_ZTV6S467C4[16]),  16,23},
  {&(_ZTV6S467C4[21]),  21,23},
};
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
Class_Descriptor cd_S467C4 = {  "S467C4", // class name
  bases_S467C4, 4,
  &(vtc_S467C4[0]), // expected_vtbl_contents
  &(vtt_S467C4[0]), // expected_vtt_contents
  ABISELECT(13984,9160), // object size
  NSPAIRA(_ZTI6S467C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV6S467C4),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S467C4),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C3  : S467C4 , S467C8 , S468C7 , S467C6 , virtual S467C5 {
  ::S468C7 s467c3f0;
  int s467c3f1;
  void *s467c3f2[2];
  __tsi64 s467c3f3[2];
  int s467c3f4[2];
  void *s467c3f5;
  int s467c3f6;
  ::S467C8 s467c3f7;
  int s467c3f8;
  virtual  ~S467C3(); // _ZN6S467C3D2Ev
  virtual void  v7(); // _ZN6S467C32v7Ev
  virtual void  v8(); // _ZN6S467C32v8Ev
  S467C3(); // tgen
};
//SIG(-1 S467C3) C1{ BC2{ BC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC4{ v5 FC3[8] FC3[2] Fp Fi FC5{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC5 VBC6{ v6 v7 Fc FL[10] FD FC3 Fp Fs Fp Fi} v8 Fi:2 FD[7] Fp FC4 Fp Fi Fp[2] FC5 FC3 FD[8]} BC6 BC5 BC4 VBC3 vd v1 v2 FC5 Fi Fp[2] FL[2] Fi[2] Fp Fi FC6 Fi}


 S467C3 ::~S467C3(){ note_dtor("S467C3", this);}
void  S467C3 ::v7(){vfunc_called(this, "_ZN6S467C32v7Ev");}
void  S467C3 ::v8(){vfunc_called(this, "_ZN6S467C32v8Ev");}
S467C3 ::S467C3(){ note_ctor("S467C3", this);} // tgen

static void Test_S467C3()
{
  extern Class_Descriptor cd_S467C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1355,3552)];
    init_test(&cd_S467C3, buf);
    S467C3 *dp, &lv = *(dp=new (buf) S467C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(21664,14204), "sizeof(S467C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C3)");
    check_base_class_offset(lv, (S467C5*)(S467C4*), 0, "S467C3");
    check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(14672,9612), "S467C3");
    check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(296,200), "S467C3");
    check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(20912,13688), "S467C3");
    check_base_class_offset(lv, (S467C4*), 0, "S467C3");
    /*is_ambiguous_... S467C3::S467C8 */ AMB_check_base_class_offset(lv, (S467C8*), ABISELECT(7296,4768), "S467C3");
    /*is_ambiguous_... S467C3::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), ABISELECT(7744,5084), "S467C3");
    /*is_ambiguous_... S467C3::S467C6 */ AMB_check_base_class_offset(lv, (S467C6*), ABISELECT(7824,5128), "S467C3");
    /*is_ambiguous_... S467C3::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*), ABISELECT(21360,14004), "S467C3");
    check_field_offset(lv, s467c3f0, ABISELECT(14064,9204), "S467C3.s467c3f0");
    check_field_offset(lv, s467c3f1, ABISELECT(14144,9248), "S467C3.s467c3f1");
    check_field_offset(lv, s467c3f2, ABISELECT(14152,9252), "S467C3.s467c3f2");
    check_field_offset(lv, s467c3f3, ABISELECT(14168,9260), "S467C3.s467c3f3");
    check_field_offset(lv, s467c3f4, ABISELECT(14184,9276), "S467C3.s467c3f4");
    check_field_offset(lv, s467c3f5, ABISELECT(14192,9284), "S467C3.s467c3f5");
    check_field_offset(lv, s467c3f6, ABISELECT(14200,9288), "S467C3.s467c3f6");
    check_field_offset(lv, s467c3f7, ABISELECT(14208,9292), "S467C3.s467c3f7");
    check_field_offset(lv, s467c3f8, ABISELECT(14656,9608), "S467C3.s467c3f8");
    test_class_info(&lv, &cd_S467C3);
    dp->~S467C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C3(Test_S467C3, "S467C3", ABISELECT(21664,14204));

#else // __cplusplus

extern void _ZN6S467C3C1Ev();
extern void _ZN6S467C3D2Ev();
Name_Map name_map_S467C3[] = {
  NSPAIR(_ZN6S467C3C1Ev),
  NSPAIR(_ZN6S467C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
static Base_Class bases_S467C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S467C6,    ABISELECT(14672,9612), //bcp->offset
    27, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(296,200), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S467C8,    ABISELECT(20912,13688), //bcp->offset
    31, //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
    4, //immediately_derived
  0, 1},
  {&cd_S467C4,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C8,    ABISELECT(7296,4768), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C7,    ABISELECT(7744,5084), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C6,    ABISELECT(7824,5128), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C5,    ABISELECT(21360,14004), //bcp->offset
    37, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S467C3[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C3D1Ev();
extern void _ZN6S467C3D0Ev();
extern void _ZN6S467C32v7Ev();
extern void _ZN6S467C32v8Ev();
extern void ABISELECT(_ZThn296_N6S467C3D1Ev,_ZThn200_N6S467C3D1Ev)();
extern void ABISELECT(_ZThn296_N6S467C3D0Ev,_ZThn200_N6S467C3D0Ev)();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void ABISELECT(_ZThn7744_N6S467C3D1Ev,_ZThn5084_N6S467C3D1Ev)();
extern void ABISELECT(_ZThn7744_N6S467C3D0Ev,_ZThn5084_N6S467C3D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY vtc_S467C3[] = {
  ABISELECT(21360,14004),
  ABISELECT(20912,13688),
  ABISELECT(14672,9612),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C3D1Ev,
  (VTBL_ENTRY)&_ZN6S467C3D0Ev,
  (VTBL_ENTRY)&_ZN6S467C32v7Ev,
  (VTBL_ENTRY)&_ZN6S467C32v8Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S467C3D1Ev,_ZThn200_N6S467C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S467C3D0Ev,_ZThn200_N6S467C3D0Ev),
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-7744,-5084),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S467C3D1Ev,_ZThn5084_N6S467C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S467C3D0Ev,_ZThn5084_N6S467C3D0Ev),
  ABISELECT(-7824,-5128),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-20912,-13688),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  0,
  0,
  ABISELECT(-21360,-14004),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern VTBL_ENTRY _ZTV6S467C3[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__6S467C3[] = {
  ABISELECT(20912,13688),
  ABISELECT(14672,9612),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__6S467C3[] = {
  0,
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__6S467C3[] = {
  0,
  0,
  ABISELECT(-20912,-13688),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C3[] = {
  {&(_ZTV6S467C3[5]),  5,43},
  {&(_tg__ZTV6S467C4__6S467C3[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__6S467C3[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__6S467C3[4]),  4,6},
  {&(_ZTV6S467C3[30]),  30,43},
  {&(_ZTV6S467C3[35]),  35,43},
  {&(_ZTV6S467C3[41]),  41,43},
};
extern VTBL_ENTRY _ZTI6S467C3[];
extern  VTBL_ENTRY _ZTV6S467C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C3[];
Class_Descriptor cd_S467C3 = {  "S467C3", // class name
  bases_S467C3, 9,
  &(vtc_S467C3[0]), // expected_vtbl_contents
  &(vtt_S467C3[0]), // expected_vtt_contents
  ABISELECT(21664,14204), // object size
  NSPAIRA(_ZTI6S467C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV6S467C3),43, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S467C3),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C9  {
  int s467c9f0;
  ::S467C5 s467c9f1;
  int s467c9f2[2];
  ::S468C10 s467c9f3;
  long double s467c9f4;
  int s467c9f5;
  int s467c9f6;
  ::S467C8 s467c9f7;
  __tsi64 s467c9f8;
  int s467c9f9;
  ::S467C8 s467c9f10;
  virtual  ~S467C9(); // _ZN6S467C9D1Ev
  virtual void  v9(); // _ZN6S467C92v9Ev
  virtual void  v10(); // _ZN6S467C93v10Ev
  S467C9(); // tgen
};
//SIG(-1 S467C9) C1{ vd v1 v2 Fi FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fi[2] FU3{ m FL FD[10] FD Fs:0} FD Fi Fi FC4{ v5 v6 Fc FL[10] FD FC2 Fp Fs Fp Fi} FL Fi FC4}


 S467C9 ::~S467C9(){ note_dtor("S467C9", this);}
void  S467C9 ::v9(){vfunc_called(this, "_ZN6S467C92v9Ev");}
void  S467C9 ::v10(){vfunc_called(this, "_ZN6S467C93v10Ev");}
S467C9 ::S467C9(){ note_ctor("S467C9", this);} // tgen

static void Test_S467C9()
{
  extern Class_Descriptor cd_S467C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(91,251)];
    init_test(&cd_S467C9, buf);
    S467C9 *dp, &lv = *(dp=new (buf) S467C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1440,1000), "sizeof(S467C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C9)");
    check_field_offset(lv, s467c9f0, ABISELECT(8,4), "S467C9.s467c9f0");
    check_field_offset(lv, s467c9f1, ABISELECT(16,8), "S467C9.s467c9f1");
    check_field_offset(lv, s467c9f2, ABISELECT(320,208), "S467C9.s467c9f2");
    check_field_offset(lv, s467c9f3, ABISELECT(336,216), "S467C9.s467c9f3");
    check_field_offset(lv, s467c9f4, ABISELECT(496,336), "S467C9.s467c9f4");
    check_field_offset(lv, s467c9f5, ABISELECT(512,348), "S467C9.s467c9f5");
    check_field_offset(lv, s467c9f6, ABISELECT(516,352), "S467C9.s467c9f6");
    check_field_offset(lv, s467c9f7, ABISELECT(528,356), "S467C9.s467c9f7");
    check_field_offset(lv, s467c9f8, ABISELECT(976,672), "S467C9.s467c9f8");
    check_field_offset(lv, s467c9f9, ABISELECT(984,680), "S467C9.s467c9f9");
    check_field_offset(lv, s467c9f10, ABISELECT(992,684), "S467C9.s467c9f10");
    test_class_info(&lv, &cd_S467C9);
    dp->~S467C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C9(Test_S467C9, "S467C9", ABISELECT(1440,1000));

#else // __cplusplus

extern void _ZN6S467C9C1Ev();
extern void _ZN6S467C9D1Ev();
Name_Map name_map_S467C9[] = {
  NSPAIR(_ZN6S467C9C1Ev),
  NSPAIR(_ZN6S467C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S467C9[];
extern void _ZN6S467C9D1Ev();
extern void _ZN6S467C9D0Ev();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
static  VTBL_ENTRY vtc_S467C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S467C9[0]),
  (VTBL_ENTRY)&_ZN6S467C9D1Ev,
  (VTBL_ENTRY)&_ZN6S467C9D0Ev,
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
};
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
Class_Descriptor cd_S467C9 = {  "S467C9", // class name
  0,0,//no base classes
  &(vtc_S467C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1440,1000), // object size
  NSPAIRA(_ZTI6S467C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S467C9),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  S467C13  : virtual S467C6 , virtual S467C8 , virtual S467C4 , S468C7 {
  void *s467c13f0;
  ::S468C7 s467c13f1;
  ::S467C5 s467c13f2;
  short s467c13f3;
  ~S467C13(); // tgen
  S467C13(); // tgen
};
//SIG(-1 S467C13) C1{ VBC2{ v1 FC3{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} VBC5{ v2 v3 Fc FL[10] FD FC3 Fp Fs Fp Fi} VBC6{ BC3 VBC2 BC4 VBC5 v6 Fi:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} BC4 Fp FC4 FC3 Fs}


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

static void Test_S467C13()
{
  extern Class_Descriptor cd_S467C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(906,2365)];
    init_test(&cd_S467C13, buf);
    S467C13 *dp, &lv = *(dp=new (buf) S467C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14480,9456), "sizeof(S467C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C13)");
    check_base_class_offset(lv, (S467C6*), ABISELECT(496,296), "S467C13");
    check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(496,296), "S467C13");
    check_base_class_offset(lv, (S467C8*), ABISELECT(6736,4372), "S467C13");
    check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(6736,4372), "S467C13");
    check_base_class_offset(lv, (S467C5*)(S467C4*), ABISELECT(7184,4688), "S467C13");
    check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(7480,4888), "S467C13");
    check_base_class_offset(lv, (S467C4*), ABISELECT(7184,4688), "S467C13");
    /*is_ambiguous_... S467C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), 0, "S467C13");
    check_field_offset(lv, s467c13f0, ABISELECT(80,44), "S467C13.s467c13f0");
    check_field_offset(lv, s467c13f1, ABISELECT(88,48), "S467C13.s467c13f1");
    check_field_offset(lv, s467c13f2, ABISELECT(176,92), "S467C13.s467c13f2");
    check_field_offset(lv, s467c13f3, ABISELECT(480,292), "S467C13.s467c13f3");
    test_class_info(&lv, &cd_S467C13);
    dp->~S467C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C13(Test_S467C13, "S467C13", ABISELECT(14480,9456));

#else // __cplusplus

extern void _ZN7S467C13C1Ev();
extern void _ZN7S467C13D1Ev();
Name_Map name_map_S467C13[] = {
  NSPAIR(_ZN7S467C13C1Ev),
  NSPAIR(_ZN7S467C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
static Base_Class bases_S467C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C6,    ABISELECT(496,296), //bcp->offset
    7, //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_S467C8,    ABISELECT(6736,4372), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S467C5,    ABISELECT(7184,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(7480,4888), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(7184,4688), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S467C13[];
extern void _ZN7S467C13D1Ev();
extern void _ZN7S467C13D0Ev();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZThn7184_N7S467C13D1Ev,_ZThn4688_N7S467C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev)();
extern void ABISELECT(_ZThn7184_N7S467C13D0Ev,_ZThn4688_N7S467C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY vtc_S467C13[] = {
  ABISELECT(7184,4688),
  ABISELECT(6736,4372),
  ABISELECT(496,296),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN7S467C13D1Ev,
  (VTBL_ENTRY)&_ZN7S467C13D0Ev,
  0,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-6736,-4372),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-7184,-4688),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-7184,-4688),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev),
  ABISELECT(-7480,-4888),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev),
};
extern VTBL_ENTRY _ZTV7S467C13[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C13[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__7S467C13[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__7S467C13[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C13[] = {
  {&(_ZTV7S467C13[5]),  5,34},
  {&(_ZTV7S467C13[10]),  10,34},
  {&(_ZTV7S467C13[15]),  15,34},
  {&(_ZTV7S467C13[25]),  25,34},
  {&(_ZTV7S467C13[32]),  32,34},
  {&(_tg__ZTV6S467C4__7S467C13[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__7S467C13[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__7S467C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S467C13[];
extern  VTBL_ENTRY _ZTV7S467C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C13[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7184_N7S467C13D0Ev,_ZThn4688_N7S467C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7184_N7S467C13D1Ev,_ZThn4688_N7S467C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S467C13 = {  "S467C13", // class name
  bases_S467C13, 6,
  &(vtc_S467C13[0]), // expected_vtbl_contents
  &(vtt_S467C13[0]), // expected_vtt_contents
  ABISELECT(14480,9456), // object size
  NSPAIRA(_ZTI7S467C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S467C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S467C13),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C12  : S467C13 , S467C5 , S467C9 {
  ::S467C3 s467c12f0;
  ~S467C12(); // tgen
  S467C12(); // tgen
};
//SIG(-1 S467C12) C1{ BC2{ VBC3{ v1 FC4{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC4[2] Fp Fi FC5{ vd m Fp FL Fp[7]} FC4[5] Fp[5] FC4[5]} VBC6{ v2 v3 Fc FL[10] FD FC4 Fp Fs Fp Fi} VBC7{ BC4 VBC3 BC5 VBC6 v6 Fi:2 FD[7] Fp FC3 Fp Fi Fp[2] FC5 FC4 FD[8]} BC5 Fp FC5 FC4 Fs} BC4 BC8{ vd v7 v8 Fi FC4 Fi[2] FU9{ m FL FD[10] FD Fs:0} FD Fi Fi FC6 FL Fi FC6} FC10{ BC7 BC6 BC5 BC3 VBC4 vd v9 v10 FC5 Fi Fp[2] FL[2] Fi[2] Fp Fi FC6 Fi}}


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

static void Test_S467C12()
{
  extern Class_Descriptor cd_S467C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2369,6216)];
    init_test(&cd_S467C12, buf);
    S467C12 *dp, &lv = *(dp=new (buf) S467C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(37888,24860), "sizeof(S467C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C12)");
    check_base_class_offset(lv, (S467C6*)(S467C13*), ABISELECT(23904,15700), "S467C12");
    check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(23904,15700), "S467C12");
    check_base_class_offset(lv, (S467C8*)(S467C13*), ABISELECT(30144,19776), "S467C12");
    check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(30144,19776), "S467C12");
    check_base_class_offset(lv, (S467C5*)(S467C4*), ABISELECT(30592,20092), "S467C12");
    check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(30888,20292), "S467C12");
    check_base_class_offset(lv, (S467C4*)(S467C13*), ABISELECT(30592,20092), "S467C12");
    /*is_ambiguous_... S467C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C13*), 0, "S467C12");
    check_base_class_offset(lv, (S467C13*), 0, "S467C12");
    /*is_ambiguous_... S467C12::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*), ABISELECT(496,296), "S467C12");
    check_base_class_offset(lv, (S467C9*), ABISELECT(800,496), "S467C12");
    check_field_offset(lv, s467c12f0, ABISELECT(2240,1496), "S467C12.s467c12f0");
    test_class_info(&lv, &cd_S467C12);
    dp->~S467C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C12(Test_S467C12, "S467C12", ABISELECT(37888,24860));

#else // __cplusplus

extern void _ZN7S467C12C1Ev();
extern void _ZN7S467C12D1Ev();
Name_Map name_map_S467C12[] = {
  NSPAIR(_ZN7S467C12C1Ev),
  NSPAIR(_ZN7S467C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C13;
extern VTBL_ENTRY _ZTI7S467C13[];
extern  VTBL_ENTRY _ZTV7S467C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C13[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
static Base_Class bases_S467C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C6,    ABISELECT(23904,15700), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S467C8,    ABISELECT(30144,19776), //bcp->offset
    21, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S467C5,    ABISELECT(30592,20092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(30888,20292), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(30592,20092), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S467C13,    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_S467C5,    ABISELECT(496,296), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C9,    ABISELECT(800,496), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S467C12[];
extern void _ZN7S467C12D1Ev();
extern void _ZN7S467C12D0Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZThn800_N7S467C12D1Ev,_ZThn496_N7S467C12D1Ev)();
extern void ABISELECT(_ZThn800_N7S467C12D0Ev,_ZThn496_N7S467C12D0Ev)();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZThn30592_N7S467C12D1Ev,_ZThn20092_N7S467C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev)();
extern void ABISELECT(_ZThn30592_N7S467C12D0Ev,_ZThn20092_N7S467C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev)();
static  VTBL_ENTRY vtc_S467C12[] = {
  ABISELECT(30592,20092),
  ABISELECT(30144,19776),
  ABISELECT(23904,15700),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN7S467C12D1Ev,
  (VTBL_ENTRY)&_ZN7S467C12D0Ev,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  ABISELECT(-800,-496),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N7S467C12D1Ev,_ZThn496_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N7S467C12D0Ev,_ZThn496_N7S467C12D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
  0,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-30144,-19776),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-30592,-20092),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-30592,-20092),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev),
  ABISELECT(-30888,-20292),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev),
};
extern VTBL_ENTRY _ZTV7S467C12[];
extern void _ZN7S467C13D1Ev();
extern void _ZN7S467C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C13__7S467C12[] = {
  ABISELECT(30592,20092),
  ABISELECT(30144,19776),
  ABISELECT(23904,15700),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN7S467C13D1Ev,
  (VTBL_ENTRY)&_ZN7S467C13D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C13__7S467C12[] = {
  0,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C13__7S467C12[] = {
  0,
  0,
  ABISELECT(-30144,-19776),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZThn30592_N7S467C13D1Ev,_ZThn20092_N7S467C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev)();
extern void ABISELECT(_ZThn30592_N7S467C13D0Ev,_ZThn20092_N7S467C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C13__7S467C12[] = {
  ABISELECT(-30592,-20092),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-30592,-20092),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C13__7S467C12[] = {
  ABISELECT(-30888,-20292),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev),
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C12[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__7S467C12[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__7S467C12[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C12[] = {
  {&(_ZTV7S467C12[5]),  5,44},
  {&(_tg__ZTV7S467C13__7S467C12[5]),  5,7},
  {&(_tg__ZTV6S467C6__7S467C13__7S467C12[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C13__7S467C12[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C13__7S467C12[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C13__7S467C12[2]),  2,4},
  {&(_ZTV7S467C12[20]),  20,44},
  {&(_ZTV7S467C12[25]),  25,44},
  {&(_ZTV7S467C12[35]),  35,44},
  {&(_ZTV7S467C12[42]),  42,44},
  {&(_tg__ZTV6S467C4__7S467C12[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__7S467C12[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__7S467C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S467C12[];
extern  VTBL_ENTRY _ZTV7S467C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C12[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N7S467C13D0Ev,_ZThn20092_N7S467C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N7S467C13D1Ev,_ZThn20092_N7S467C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N7S467C12D0Ev,_ZThn20092_N7S467C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N7S467C12D1Ev,_ZThn20092_N7S467C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S467C12 = {  "S467C12", // class name
  bases_S467C12, 9,
  &(vtc_S467C12[0]), // expected_vtbl_contents
  &(vtt_S467C12[0]), // expected_vtt_contents
  ABISELECT(37888,24860), // object size
  NSPAIRA(_ZTI7S467C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S467C12),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S467C12),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C11  : S467C12 , virtual S467C5 , S468C7 , S467C9 {
  ::S468C14_nt s467c11f0;
  int s467c11f1;
  int s467c11f2;
  int s467c11f3:6;
  ::S468C14_nt s467c11f4;
  int s467c11f5;
  ~S467C11(); // tgen
  S467C11(); // tgen
};
//SIG(-1 S467C11) C1{ BC2{ BC3{ VBC4{ v1 FC5{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC5[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC5[5] Fp[5] FC5[5]} VBC7{ v2 v3 Fc FL[10] FD FC5 Fp Fs Fp Fi} VBC8{ BC5 VBC4 BC6 VBC7 v6 Fi:2 FD[7] Fp FC4 Fp Fi Fp[2] FC6 FC5 FD[8]} BC6 Fp FC6 FC5 Fs} BC5 BC9{ vd v7 v8 Fi FC5 Fi[2] FU10{ m FL FD[10] FD Fs:0} FD Fi Fi FC7 FL Fi FC7} FC11{ BC8 BC7 BC6 BC4 VBC5 vd v9 v10 FC6 Fi Fp[2] FL[2] Fi[2] Fp Fi FC7 Fi}} VBC5 BC6 BC9 FC12{ m Fc} Fi Fi Fi:6 FC12 Fi}


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

static void Test_S467C11()
{
  extern Class_Descriptor cd_S467C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2485,6532)];
    init_test(&cd_S467C11, buf);
    S467C11 *dp, &lv = *(dp=new (buf) S467C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(39744,26124), "sizeof(S467C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C11)");
    check_base_class_offset(lv, (S467C6*)(S467C13*)(S467C12*), ABISELECT(25456,16764), "S467C11");
    check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(25456,16764), "S467C11");
    check_base_class_offset(lv, (S467C8*)(S467C13*)(S467C12*), ABISELECT(31696,20840), "S467C11");
    check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(31696,20840), "S467C11");
    check_base_class_offset(lv, (S467C5*)(S467C4*), ABISELECT(32144,21156), "S467C11");
    check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(32440,21356), "S467C11");
    check_base_class_offset(lv, (S467C4*)(S467C13*)(S467C12*), ABISELECT(32144,21156), "S467C11");
    /*is_ambiguous_... S467C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C13*)(S467C12*), 0, "S467C11");
    check_base_class_offset(lv, (S467C13*)(S467C12*), 0, "S467C11");
    /*is_ambiguous_... S467C12::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C12*), ABISELECT(496,296), "S467C11");
    check_base_class_offset(lv, (S467C9*)(S467C12*), ABISELECT(800,496), "S467C11");
    check_base_class_offset(lv, (S467C12*), 0, "S467C11");
    /*is_ambiguous_... S467C11::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*), ABISELECT(39440,25924), "S467C11");
    /*is_ambiguous_... S467C11::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), ABISELECT(23904,15700), "S467C11");
    /*is_ambiguous_... S467C11::S467C9 */ AMB_check_base_class_offset(lv, (S467C9*), ABISELECT(23984,15744), "S467C11");
    check_field_offset(lv, s467c11f0, ABISELECT(25424,16744), "S467C11.s467c11f0");
    check_field_offset(lv, s467c11f1, ABISELECT(25428,16748), "S467C11.s467c11f1");
    check_field_offset(lv, s467c11f2, ABISELECT(25432,16752), "S467C11.s467c11f2");
    set_bf_and_test(lv, s467c11f3, ABISELECT(25436,16756), 0, 6, 1, "S467C11");
    set_bf_and_test(lv, s467c11f3, ABISELECT(25436,16756), 0, 6, hide_sll(1LL<<5), "S467C11");
    check_field_offset(lv, s467c11f4, ABISELECT(25437,16757), "S467C11.s467c11f4");
    check_field_offset(lv, s467c11f5, ABISELECT(25440,16760), "S467C11.s467c11f5");
    test_class_info(&lv, &cd_S467C11);
    dp->~S467C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C11(Test_S467C11, "S467C11", ABISELECT(39744,26124));

#else // __cplusplus

extern void _ZN7S467C11C1Ev();
extern void _ZN7S467C11D1Ev();
Name_Map name_map_S467C11[] = {
  NSPAIR(_ZN7S467C11C1Ev),
  NSPAIR(_ZN7S467C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C13;
extern VTBL_ENTRY _ZTI7S467C13[];
extern  VTBL_ENTRY _ZTV7S467C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C13[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
extern Class_Descriptor cd_S467C12;
extern VTBL_ENTRY _ZTI7S467C12[];
extern  VTBL_ENTRY _ZTV7S467C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C12[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
static Base_Class bases_S467C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C6,    ABISELECT(25456,16764), //bcp->offset
    28, //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
    4, //immediately_derived
  0, 1},
  {&cd_S467C8,    ABISELECT(31696,20840), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S467C5,    ABISELECT(32144,21156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(32440,21356), //bcp->offset
    51, //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
    4, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(32144,21156), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S467C13,    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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(496,296), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S467C9,    ABISELECT(800,496), //bcp->offset
    12, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S467C12,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C5,    ABISELECT(39440,25924), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    ABISELECT(23904,15700), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C9,    ABISELECT(23984,15744), //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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S467C11[];
extern void _ZN7S467C11D1Ev();
extern void _ZN7S467C11D0Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZThn800_N7S467C11D1Ev,_ZThn496_N7S467C11D1Ev)();
extern void ABISELECT(_ZThn800_N7S467C11D0Ev,_ZThn496_N7S467C11D0Ev)();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
extern void ABISELECT(_ZThn23904_N7S467C11D1Ev,_ZThn15700_N7S467C11D1Ev)();
extern void ABISELECT(_ZThn23904_N7S467C11D0Ev,_ZThn15700_N7S467C11D0Ev)();
extern void ABISELECT(_ZThn23984_N7S467C11D1Ev,_ZThn15744_N7S467C11D1Ev)();
extern void ABISELECT(_ZThn23984_N7S467C11D0Ev,_ZThn15744_N7S467C11D0Ev)();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C11D1Ev,_ZTv0_n32_N7S467C11D1Ev)();
extern void ABISELECT(_ZThn32144_N7S467C11D1Ev,_ZThn21156_N7S467C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C11D0Ev,_ZTv0_n32_N7S467C11D0Ev)();
extern void ABISELECT(_ZThn32144_N7S467C11D0Ev,_ZThn21156_N7S467C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S467C11D1Ev,_ZTvn200_n32_N7S467C11D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C11D0Ev,_ZTvn200_n32_N7S467C11D0Ev)();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY vtc_S467C11[] = {
  ABISELECT(39440,25924),
  ABISELECT(32144,21156),
  ABISELECT(31696,20840),
  ABISELECT(25456,16764),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN7S467C11D1Ev,
  (VTBL_ENTRY)&_ZN7S467C11D0Ev,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  ABISELECT(-800,-496),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N7S467C11D1Ev,_ZThn496_N7S467C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N7S467C11D0Ev,_ZThn496_N7S467C11D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn23904_N7S467C11D1Ev,_ZThn15700_N7S467C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn23904_N7S467C11D0Ev,_ZThn15700_N7S467C11D0Ev),
  ABISELECT(-23984,-15744),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn23984_N7S467C11D1Ev,_ZThn15744_N7S467C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn23984_N7S467C11D0Ev,_ZThn15744_N7S467C11D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
  0,
  ABISELECT(-25456,-16764),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-31696,-20840),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-32144,-21156),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-32144,-21156),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C11D1Ev,_ZTv0_n32_N7S467C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C11D0Ev,_ZTv0_n32_N7S467C11D0Ev),
  ABISELECT(-32440,-21356),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C11D1Ev,_ZTvn200_n32_N7S467C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C11D0Ev,_ZTvn200_n32_N7S467C11D0Ev),
  0,
  0,
  ABISELECT(-39440,-25924),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S467C11[];
extern void _ZN7S467C12D1Ev();
extern void _ZN7S467C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C12__7S467C11[] = {
  ABISELECT(32144,21156),
  ABISELECT(31696,20840),
  ABISELECT(25456,16764),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN7S467C12D1Ev,
  (VTBL_ENTRY)&_ZN7S467C12D0Ev,
};
extern void _ZN7S467C13D1Ev();
extern void _ZN7S467C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C137S467C12__7S467C11[] = {
  ABISELECT(32144,21156),
  ABISELECT(31696,20840),
  ABISELECT(25456,16764),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN7S467C13D1Ev,
  (VTBL_ENTRY)&_ZN7S467C13D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C137S467C12__7S467C11[] = {
  0,
  ABISELECT(-25456,-16764),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C137S467C12__7S467C11[] = {
  0,
  0,
  ABISELECT(-31696,-20840),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZThn32144_N7S467C13D1Ev,_ZThn21156_N7S467C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev)();
extern void ABISELECT(_ZThn32144_N7S467C13D0Ev,_ZThn21156_N7S467C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C137S467C12__7S467C11[] = {
  ABISELECT(-32144,-21156),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-32144,-21156),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C137S467C12__7S467C11[] = {
  ABISELECT(-32440,-21356),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C12__7S467C11[] = {
  0,
  ABISELECT(-25456,-16764),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C12__7S467C11[] = {
  0,
  0,
  ABISELECT(-31696,-20840),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZThn32144_N7S467C12D1Ev,_ZThn21156_N7S467C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev)();
extern void ABISELECT(_ZThn32144_N7S467C12D0Ev,_ZThn21156_N7S467C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C12__7S467C11[] = {
  ABISELECT(-32144,-21156),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-32144,-21156),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C12__7S467C11[] = {
  ABISELECT(-32440,-21356),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev),
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C11[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__7S467C11[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__7S467C11[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C11[] = {
  {&(_ZTV7S467C11[6]),  6,61},
  {&(_tg__ZTV7S467C12__7S467C11[5]),  5,7},
  {&(_tg__ZTV7S467C137S467C12__7S467C11[5]),  5,7},
  {&(_tg__ZTV6S467C6__7S467C137S467C12__7S467C11[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C137S467C12__7S467C11[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C137S467C12__7S467C11[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C137S467C12__7S467C11[2]),  2,4},
  {&(_tg__ZTV6S467C6__7S467C12__7S467C11[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C12__7S467C11[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C12__7S467C11[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C12__7S467C11[2]),  2,4},
  {&(_ZTV7S467C11[31]),  31,61},
  {&(_ZTV7S467C11[36]),  36,61},
  {&(_ZTV7S467C11[46]),  46,61},
  {&(_ZTV7S467C11[53]),  53,61},
  {&(_ZTV7S467C11[59]),  59,61},
  {&(_tg__ZTV6S467C4__7S467C11[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__7S467C11[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__7S467C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S467C11[];
extern  VTBL_ENTRY _ZTV7S467C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C11[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S467C12D0Ev,_ZThn21156_N7S467C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S467C12D1Ev,_ZThn21156_N7S467C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S467C13D0Ev,_ZThn21156_N7S467C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S467C13D1Ev,_ZThn21156_N7S467C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C11D0Ev,_ZTv0_n32_N7S467C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S467C11D0Ev,_ZThn21156_N7S467C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C11D1Ev,_ZTv0_n32_N7S467C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32144_N7S467C11D1Ev,_ZThn21156_N7S467C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S467C11 = {  "S467C11", // class name
  bases_S467C11, 13,
  &(vtc_S467C11[0]), // expected_vtbl_contents
  &(vtt_S467C11[0]), // expected_vtt_contents
  ABISELECT(39744,26124), // object size
  NSPAIRA(_ZTI7S467C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S467C11),61, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S467C11),19, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C2  : S467C3 , S467C4 , virtual S467C9 {
  void *s467c2f0;
  long double s467c2f1;
  long double s467c2f2;
  ::S467C11 s467c2f3;
  virtual  ~S467C2(); // _ZN6S467C2D2Ev
  virtual void  v11(); // _ZN6S467C23v11Ev
  S467C2(); // tgen
};
//SIG(-1 S467C2) C1{ BC2{ BC3{ BC4{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC5{ v4 FC4[8] FC4[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC4[5] Fp[5] FC4[5]} BC6 VBC7{ v5 v6 Fc FL[10] FD FC4 Fp Fs Fp Fi} v7 Fi:2 FD[7] Fp FC5 Fp Fi Fp[2] FC6 FC4 FD[8]} BC7 BC6 BC5 VBC4 vd v8 v9 FC6 Fi Fp[2] FL[2] Fi[2] Fp Fi FC7 Fi} BC3 VBC8{ vd v10 v11 Fi FC4 Fi[2] FU9{ m FL FD[10] FD Fs:0} FD Fi Fi FC7 FL Fi FC7} vd v1 Fp FD FD FC10{ BC11{ BC12{ VBC5 VBC7 VBC3 BC6 Fp FC6 FC4 Fs} BC4 BC8 FC2} VBC4 BC6 BC8 FC13{ m Fc} Fi Fi Fi:6 FC13 Fi}}


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

static void Test_S467C2()
{
  extern Class_Descriptor cd_S467C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4388,11532)];
    init_test(&cd_S467C2, buf);
    S467C2 *dp, &lv = *(dp=new (buf) S467C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(70192,46124), "sizeof(S467C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C2)");
    check_base_class_offset(lv, (S467C5*)(S467C4*)(S467C3*), 0, "S467C2");
    check_base_class_offset(lv, (S467C6*)(S467C4*)(S467C3*), ABISELECT(61760,40532), "S467C2");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(61760,40532), "S467C2");
    check_base_class_offset(lv, (S468C7*)(S467C4*)(S467C3*), ABISELECT(296,200), "S467C2");
    check_base_class_offset(lv, (S467C8*)(S467C4*)(S467C3*), ABISELECT(68000,44608), "S467C2");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(68000,44608), "S467C2");
    check_base_class_offset(lv, (S467C4*)(S467C3*), 0, "S467C2");
    /*is_ambiguous_... S467C3::S467C8 */ AMB_check_base_class_offset(lv, (S467C8*)(S467C3*), ABISELECT(7296,4768), "S467C2");
    /*is_ambiguous_... S467C3::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C3*), ABISELECT(7744,5084), "S467C2");
    /*is_ambiguous_... S467C3::S467C6 */ AMB_check_base_class_offset(lv, (S467C6*)(S467C3*), ABISELECT(7824,5128), "S467C2");
    /*is_ambiguous_... S467C3::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C3*), ABISELECT(68448,44924), "S467C2");
    check_base_class_offset(lv, (S467C3*), 0, "S467C2");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C4*), ABISELECT(14672,9612), "S467C2");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(14968,9812), "S467C2");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S467C4*), ABISELECT(14672,9612), "S467C2");
    check_base_class_offset(lv, (S467C9*), ABISELECT(68752,45124), "S467C2");
    check_field_offset(lv, s467c2f0, ABISELECT(21968,14380), "S467C2.s467c2f0");
    check_field_offset(lv, s467c2f1, ABISELECT(21984,14384), "S467C2.s467c2f1");
    check_field_offset(lv, s467c2f2, ABISELECT(22000,14396), "S467C2.s467c2f2");
    check_field_offset(lv, s467c2f3, ABISELECT(22016,14408), "S467C2.s467c2f3");
    test_class_info(&lv, &cd_S467C2);
    dp->~S467C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C2(Test_S467C2, "S467C2", ABISELECT(70192,46124));

#else // __cplusplus

extern void _ZN6S467C2C1Ev();
extern void _ZN6S467C2D2Ev();
Name_Map name_map_S467C2[] = {
  NSPAIR(_ZN6S467C2C1Ev),
  NSPAIR(_ZN6S467C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C3;
extern VTBL_ENTRY _ZTI6S467C3[];
extern  VTBL_ENTRY _ZTV6S467C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C3[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
static Base_Class bases_S467C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S467C6,    ABISELECT(61760,40532), //bcp->offset
    42, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(296,200), //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_S467C8,    ABISELECT(68000,44608), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S467C4,    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
    9, //immediately_derived
  0, 0},
  {&cd_S467C8,    ABISELECT(7296,4768), //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(7744,5084), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S467C6,    ABISELECT(7824,5128), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(68448,44924), //bcp->offset
    52, //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
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S467C3,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C5,    ABISELECT(14672,9612), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C7,    ABISELECT(14968,9812), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(14672,9612), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C9,    ABISELECT(68752,45124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //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 _ZTI6S467C2[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C2D1Ev();
extern void _ZN6S467C2D0Ev();
extern void _ZN6S467C32v7Ev();
extern void _ZN6S467C32v8Ev();
extern void _ZN6S467C23v11Ev();
extern void ABISELECT(_ZThn296_N6S467C2D1Ev,_ZThn200_N6S467C2D1Ev)();
extern void ABISELECT(_ZThn296_N6S467C2D0Ev,_ZThn200_N6S467C2D0Ev)();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void ABISELECT(_ZThn7744_N6S467C2D1Ev,_ZThn5084_N6S467C2D1Ev)();
extern void ABISELECT(_ZThn7744_N6S467C2D0Ev,_ZThn5084_N6S467C2D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZThn14672_N6S467C2D1Ev,_ZThn9612_N6S467C2D1Ev)();
extern void ABISELECT(_ZThn14672_N6S467C2D0Ev,_ZThn9612_N6S467C2D0Ev)();
extern void ABISELECT(_ZThn14968_N6S467C2D1Ev,_ZThn9812_N6S467C2D1Ev)();
extern void ABISELECT(_ZThn14968_N6S467C2D0Ev,_ZThn9812_N6S467C2D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N6S467C2D1Ev,_ZTv0_n12_N6S467C2D1Ev)();
extern void ABISELECT(_ZThn68752_N6S467C2D1Ev,_ZThn45124_N6S467C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S467C2D0Ev,_ZTv0_n12_N6S467C2D0Ev)();
extern void ABISELECT(_ZThn68752_N6S467C2D0Ev,_ZThn45124_N6S467C2D0Ev)() __attribute__((weak));
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
static  VTBL_ENTRY vtc_S467C2[] = {
  ABISELECT(68752,45124),
  ABISELECT(68448,44924),
  ABISELECT(68000,44608),
  ABISELECT(61760,40532),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C2D1Ev,
  (VTBL_ENTRY)&_ZN6S467C2D0Ev,
  (VTBL_ENTRY)&_ZN6S467C32v7Ev,
  (VTBL_ENTRY)&_ZN6S467C32v8Ev,
  (VTBL_ENTRY)&_ZN6S467C23v11Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S467C2D1Ev,_ZThn200_N6S467C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S467C2D0Ev,_ZThn200_N6S467C2D0Ev),
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-7744,-5084),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S467C2D1Ev,_ZThn5084_N6S467C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S467C2D0Ev,_ZThn5084_N6S467C2D0Ev),
  ABISELECT(-7824,-5128),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  ABISELECT(53328,34996),
  ABISELECT(47088,30920),
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S467C2D1Ev,_ZThn9612_N6S467C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S467C2D0Ev,_ZThn9612_N6S467C2D0Ev),
  ABISELECT(-14968,-9812),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn14968_N6S467C2D1Ev,_ZThn9812_N6S467C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14968_N6S467C2D0Ev,_ZThn9812_N6S467C2D0Ev),
  0,
  ABISELECT(-61760,-40532),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-68000,-44608),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  0,
  0,
  ABISELECT(-68448,-44924),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  0,
  0,
  ABISELECT(-68752,-45124),
  ABISELECT(-68752,-45124),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S467C2D1Ev,_ZTv0_n12_N6S467C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S467C2D0Ev,_ZTv0_n12_N6S467C2D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
};
extern VTBL_ENTRY _ZTV6S467C2[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C3D1Ev();
extern void _ZN6S467C3D0Ev();
extern void _ZN6S467C32v7Ev();
extern void _ZN6S467C32v8Ev();
static  VTBL_ENTRY _tg__ZTV6S467C3__6S467C2[] = {
  ABISELECT(68448,44924),
  ABISELECT(68000,44608),
  ABISELECT(61760,40532),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C3D1Ev,
  (VTBL_ENTRY)&_ZN6S467C3D0Ev,
  (VTBL_ENTRY)&_ZN6S467C32v7Ev,
  (VTBL_ENTRY)&_ZN6S467C32v8Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C46S467C3__6S467C2[] = {
  ABISELECT(68000,44608),
  ABISELECT(61760,40532),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C46S467C3__6S467C2[] = {
  0,
  ABISELECT(-61760,-40532),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C46S467C3__6S467C2[] = {
  0,
  0,
  ABISELECT(-68000,-44608),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C3__6S467C2[] = {
  0,
  ABISELECT(-61760,-40532),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C3__6S467C2[] = {
  0,
  0,
  ABISELECT(-68000,-44608),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S467C5__A1__6S467C3__6S467C2[] = {
  0,
  0,
  ABISELECT(-68448,-44924),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__A1__6S467C2[] = {
  ABISELECT(53328,34996),
  ABISELECT(47088,30920),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__A1__6S467C2[] = {
  0,
  ABISELECT(-47088,-30920),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__A1__6S467C2[] = {
  0,
  0,
  ABISELECT(-53328,-34996),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C2[] = {
  {&(_ZTV6S467C2[6]),  6,67},
  {&(_tg__ZTV6S467C3__6S467C2[5]),  5,12},
  {&(_tg__ZTV6S467C46S467C3__6S467C2[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C46S467C3__6S467C2[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C46S467C3__6S467C2[4]),  4,6},
  {&(_tg__ZTV6S467C6__6S467C3__6S467C2[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C3__6S467C2[4]),  4,6},
  {&(_tg__ZTV6S467C5__A1__6S467C3__6S467C2[4]),  4,6},
  {&(_tg__ZTV6S467C4__A1__6S467C2[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__A1__6S467C2[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__A1__6S467C2[4]),  4,6},
  {&(_ZTV6S467C2[45]),  45,67},
  {&(_ZTV6S467C2[50]),  50,67},
  {&(_ZTV6S467C2[56]),  56,67},
  {&(_ZTV6S467C2[33]),  33,67},
  {&(_ZTV6S467C2[63]),  63,67},
};
extern VTBL_ENTRY _ZTI6S467C2[];
extern  VTBL_ENTRY _ZTV6S467C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C2[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S467C2D0Ev,_ZTv0_n12_N6S467C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn68752_N6S467C2D0Ev,_ZThn45124_N6S467C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S467C2D1Ev,_ZTv0_n12_N6S467C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn68752_N6S467C2D1Ev,_ZThn45124_N6S467C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S467C2 = {  "S467C2", // class name
  bases_S467C2, 14,
  &(vtc_S467C2[0]), // expected_vtbl_contents
  &(vtt_S467C2[0]), // expected_vtt_contents
  ABISELECT(70192,46124), // object size
  NSPAIRA(_ZTI6S467C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S467C2),67, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S467C2),16, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C15  : S468C7 , S467C8 , S467C4 {
  void *s467c15f0;
  ::S467C4 s467c15f1;
  char s467c15f2[7];
  ::S467C9 s467c15f3;
  int s467c15f4;
  char s467c15f5[4];
  void *s467c15f6;
  ::S467C4 s467c15f7;
  int s467c15f8;
  int s467c15f9[7];
  int s467c15f10;
  ~S467C15(); // tgen
  S467C15(); // tgen
};
//SIG(-1 S467C15) C1{ BC2{ vd m Fp FL Fp[7]} BC3{ v1 v2 Fc FL[10] FD FC4{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fp Fs Fp Fi} BC5{ BC4 VBC6{ v5 FC4[8] FC4[2] Fp Fi FC2 FC4[5] Fp[5] FC4[5]} BC2 VBC3 v6 Fi:2 FD[7] Fp FC6 Fp Fi Fp[2] FC2 FC4 FD[8]} Fp FC5 Fc[7] FC7{ vd v7 v8 Fi FC4 Fi[2] FU8{ m FL FD[10] FD Fs:0} FD Fi Fi FC3 FL Fi FC3} Fi Fc[4] Fp FC5 Fi Fi[7] Fi}


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

static void Test_S467C15()
{
  extern Class_Descriptor cd_S467C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2752,7226)];
    init_test(&cd_S467C15, buf);
    S467C15 *dp, &lv = *(dp=new (buf) S467C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(44016,28900), "sizeof(S467C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C15)");
    /*is_ambiguous_... S467C15::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), 0, "S467C15");
    /*is_ambiguous_... S467C15::S467C8 */ AMB_check_base_class_offset(lv, (S467C8*), ABISELECT(80,44), "S467C15");
    check_base_class_offset(lv, (S467C5*)(S467C4*), ABISELECT(528,360), "S467C15");
    check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(37328,24508), "S467C15");
    check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(824,560), "S467C15");
    check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(43568,28584), "S467C15");
    check_base_class_offset(lv, (S467C4*), ABISELECT(528,360), "S467C15");
    check_field_offset(lv, s467c15f0, ABISELECT(7824,5128), "S467C15.s467c15f0");
    check_field_offset(lv, s467c15f1, ABISELECT(7840,5132), "S467C15.s467c15f1");
    check_field_offset(lv, s467c15f2, ABISELECT(21824,14292), "S467C15.s467c15f2");
    check_field_offset(lv, s467c15f3, ABISELECT(21840,14300), "S467C15.s467c15f3");
    check_field_offset(lv, s467c15f4, ABISELECT(23280,15300), "S467C15.s467c15f4");
    check_field_offset(lv, s467c15f5, ABISELECT(23284,15304), "S467C15.s467c15f5");
    check_field_offset(lv, s467c15f6, ABISELECT(23288,15308), "S467C15.s467c15f6");
    check_field_offset(lv, s467c15f7, ABISELECT(23296,15312), "S467C15.s467c15f7");
    check_field_offset(lv, s467c15f8, ABISELECT(37280,24472), "S467C15.s467c15f8");
    check_field_offset(lv, s467c15f9, ABISELECT(37284,24476), "S467C15.s467c15f9");
    check_field_offset(lv, s467c15f10, ABISELECT(37312,24504), "S467C15.s467c15f10");
    test_class_info(&lv, &cd_S467C15);
    dp->~S467C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C15(Test_S467C15, "S467C15", ABISELECT(44016,28900));

#else // __cplusplus

extern void _ZN7S467C15C1Ev();
extern void _ZN7S467C15D1Ev();
Name_Map name_map_S467C15[] = {
  NSPAIR(_ZN7S467C15C1Ev),
  NSPAIR(_ZN7S467C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
static Base_Class bases_S467C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S467C8,    ABISELECT(80,44), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C5,    ABISELECT(528,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S467C6,    ABISELECT(37328,24508), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(824,560), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S467C8,    ABISELECT(43568,28584), //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S467C4,    ABISELECT(528,360), //bcp->offset
    10, //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S467C15[];
extern void _ZN7S467C15D1Ev();
extern void _ZN7S467C15D0Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZThn528_N7S467C15D1Ev,_ZThn360_N7S467C15D1Ev)();
extern void ABISELECT(_ZThn528_N7S467C15D0Ev,_ZThn360_N7S467C15D0Ev)();
extern void ABISELECT(_ZThn824_N7S467C15D1Ev,_ZThn560_N7S467C15D1Ev)();
extern void ABISELECT(_ZThn824_N7S467C15D0Ev,_ZThn560_N7S467C15D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY vtc_S467C15[] = {
  ABISELECT(43568,28584),
  ABISELECT(37328,24508),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN7S467C15D1Ev,
  (VTBL_ENTRY)&_ZN7S467C15D0Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(43040,28224),
  ABISELECT(36800,24148),
  ABISELECT(-528,-360),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S467C15D1Ev,_ZThn360_N7S467C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S467C15D0Ev,_ZThn360_N7S467C15D0Ev),
  ABISELECT(-824,-560),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn824_N7S467C15D1Ev,_ZThn560_N7S467C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn824_N7S467C15D0Ev,_ZThn560_N7S467C15D0Ev),
  0,
  ABISELECT(-37328,-24508),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-43568,-28584),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern VTBL_ENTRY _ZTV7S467C15[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C15[] = {
  ABISELECT(43040,28224),
  ABISELECT(36800,24148),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__7S467C15[] = {
  0,
  ABISELECT(-36800,-24148),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__7S467C15[] = {
  0,
  0,
  ABISELECT(-43040,-28224),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C15[] = {
  {&(_ZTV7S467C15[4]),  4,33},
  {&(_tg__ZTV6S467C4__7S467C15[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__7S467C15[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__7S467C15[4]),  4,6},
  {&(_ZTV7S467C15[14]),  14,33},
  {&(_ZTV7S467C15[26]),  26,33},
  {&(_ZTV7S467C15[31]),  31,33},
};
extern VTBL_ENTRY _ZTI7S467C15[];
extern  VTBL_ENTRY _ZTV7S467C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C15[];
Class_Descriptor cd_S467C15 = {  "S467C15", // class name
  bases_S467C15, 7,
  &(vtc_S467C15[0]), // expected_vtbl_contents
  &(vtt_S467C15[0]), // expected_vtt_contents
  ABISELECT(44016,28900), // object size
  NSPAIRA(_ZTI7S467C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S467C15),33, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S467C15),7, //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  S467C19  : S467C6 , S468C7 , virtual S467C5 {
  int s467c19f0;
  short s467c19f1;
  unsigned short s467c19f2:1;
  void *s467c19f3;
  long s467c19f4;
  ::S467C6 s467c19f5;
  int s467c19f6[2];
  char s467c19f7[3];
  int s467c19f8;
  virtual  ~S467C19(); // _ZN7S467C19D2Ev
  virtual void  v12(); // _ZN7S467C193v12Ev
  S467C19(); // tgen
};
//SIG(-1 S467C19) C1{ BC2{ v2 FC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC4 VBC3 vd v1 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi}


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

static void Test_S467C19()
{
  extern Class_Descriptor cd_S467C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(808,2108)];
    init_test(&cd_S467C19, buf);
    S467C19 *dp, &lv = *(dp=new (buf) S467C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12912,8428), "sizeof(S467C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C19)");
    check_base_class_offset(lv, (S467C6*), 0, "S467C19");
    check_base_class_offset(lv, (S468C7*), ABISELECT(6240,4076), "S467C19");
    check_base_class_offset(lv, (S467C5*), ABISELECT(12608,8228), "S467C19");
    check_field_offset(lv, s467c19f0, ABISELECT(6320,4120), "S467C19.s467c19f0");
    check_field_offset(lv, s467c19f1, ABISELECT(6324,4124), "S467C19.s467c19f1");
    set_bf_and_test(lv, s467c19f2, ABISELECT(6326,4126), 0, 1, 1, "S467C19");
    check_field_offset(lv, s467c19f3, ABISELECT(6328,4128), "S467C19.s467c19f3");
    check_field_offset(lv, s467c19f4, ABISELECT(6336,4132), "S467C19.s467c19f4");
    check_field_offset(lv, s467c19f5, ABISELECT(6352,4136), "S467C19.s467c19f5");
    check_field_offset(lv, s467c19f6, ABISELECT(12592,8212), "S467C19.s467c19f6");
    check_field_offset(lv, s467c19f7, ABISELECT(12600,8220), "S467C19.s467c19f7");
    check_field_offset(lv, s467c19f8, ABISELECT(12604,8224), "S467C19.s467c19f8");
    test_class_info(&lv, &cd_S467C19);
    dp->~S467C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C19(Test_S467C19, "S467C19", ABISELECT(12912,8428));

#else // __cplusplus

extern void _ZN7S467C19C1Ev();
extern void _ZN7S467C19D2Ev();
Name_Map name_map_S467C19[] = {
  NSPAIR(_ZN7S467C19C1Ev),
  NSPAIR(_ZN7S467C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
static Base_Class bases_S467C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S468C7,    ABISELECT(6240,4076), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S467C5,    ABISELECT(12608,8228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S467C19[];
extern void _ZN6S467C62v3Ev();
extern void _ZN7S467C19D1Ev();
extern void _ZN7S467C19D0Ev();
extern void _ZN7S467C193v12Ev();
extern void ABISELECT(_ZThn6240_N7S467C19D1Ev,_ZThn4076_N7S467C19D1Ev)();
extern void ABISELECT(_ZThn6240_N7S467C19D0Ev,_ZThn4076_N7S467C19D0Ev)();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY vtc_S467C19[] = {
  ABISELECT(12608,8228),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C19[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&_ZN7S467C19D1Ev,
  (VTBL_ENTRY)&_ZN7S467C19D0Ev,
  (VTBL_ENTRY)&_ZN7S467C193v12Ev,
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI7S467C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S467C19D1Ev,_ZThn4076_N7S467C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S467C19D0Ev,_ZThn4076_N7S467C19D0Ev),
  0,
  0,
  ABISELECT(-12608,-8228),
  (VTBL_ENTRY)&(_ZTI7S467C19[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S467C19[];
static  VTT_ENTRY vtt_S467C19[] = {
  {&(_ZTV7S467C19[3]),  3,17},
  {&(_ZTV7S467C19[15]),  15,17},
};
extern VTBL_ENTRY _ZTI7S467C19[];
extern  VTBL_ENTRY _ZTV7S467C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C19[];
Class_Descriptor cd_S467C19 = {  "S467C19", // class name
  bases_S467C19, 3,
  &(vtc_S467C19[0]), // expected_vtbl_contents
  &(vtt_S467C19[0]), // expected_vtt_contents
  ABISELECT(12912,8428), // object size
  NSPAIRA(_ZTI7S467C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S467C19),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S467C19),2, //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  S467C18  : S467C6 , virtual S467C5 , virtual S467C19 , S467C12 {
  void *s467c18f0;
  virtual  ~S467C18(); // _ZN7S467C18D2Ev
  S467C18(); // tgen
};
//SIG(-1 S467C18) C1{ BC2{ v1 FC3{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} VBC3 VBC5{ BC2 BC4 VBC3 vd v4 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi} BC6{ BC7{ VBC2 VBC8{ v5 v6 Fc FL[10] FD FC3 Fp Fs Fp Fi} VBC9{ BC3 VBC2 BC4 VBC8 v7 Fi:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} BC4 Fp FC4 FC3 Fs} BC3 BC10{ vd v8 v9 Fi FC3 Fi[2] FU11{ m FL FD[10] FD Fs:0} FD Fi Fi FC8 FL Fi FC8} FC12{ BC9 BC8 BC4 BC2 VBC3 vd v10 v11 FC4 Fi Fp[2] FL[2] Fi[2] Fp Fi FC8 Fi}} vd Fp}


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

static void Test_S467C18()
{
  extern Class_Descriptor cd_S467C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3567,9343)];
    init_test(&cd_S467C18, buf);
    S467C18 *dp, &lv = *(dp=new (buf) S467C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(57056,37368), "sizeof(S467C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C18)");
    /*is_ambiguous_... S467C18::S467C6 */ AMB_check_base_class_offset(lv, (S467C6*), 0, "S467C18");
    /*is_ambiguous_... S467C18::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*), ABISELECT(30160,19780), "S467C18");
    check_base_class_offset(lv, (S467C5*)(S467C19*), ABISELECT(30160,19780), "S467C18");
    check_base_class_offset(lv, (S467C6*)(S467C19*), ABISELECT(30464,19980), "S467C18");
    check_base_class_offset(lv, (S468C7*)(S467C19*), ABISELECT(36704,24056), "S467C18");
    check_base_class_offset(lv, (S467C19*), ABISELECT(30464,19980), "S467C18");
    check_base_class_offset(lv, (S467C6*)(S467C13*)(S467C12*), ABISELECT(43072,28208), "S467C18");
    check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(43072,28208), "S467C18");
    check_base_class_offset(lv, (S467C8*)(S467C13*)(S467C12*), ABISELECT(49312,32284), "S467C18");
    check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(49312,32284), "S467C18");
    check_base_class_offset(lv, (S467C5*)(S467C4*), ABISELECT(49760,32600), "S467C18");
    check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(50056,32800), "S467C18");
    check_base_class_offset(lv, (S467C4*)(S467C13*)(S467C12*), ABISELECT(49760,32600), "S467C18");
    /*is_ambiguous_... S467C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C13*)(S467C12*), ABISELECT(6240,4076), "S467C18");
    check_base_class_offset(lv, (S467C13*)(S467C12*), ABISELECT(6240,4076), "S467C18");
    /*is_ambiguous_... S467C12::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C12*), ABISELECT(6736,4372), "S467C18");
    check_base_class_offset(lv, (S467C9*)(S467C12*), ABISELECT(7040,4572), "S467C18");
    check_base_class_offset(lv, (S467C12*), ABISELECT(6240,4076), "S467C18");
    check_field_offset(lv, s467c18f0, ABISELECT(30144,19776), "S467C18.s467c18f0");
    test_class_info(&lv, &cd_S467C18);
    dp->~S467C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C18(Test_S467C18, "S467C18", ABISELECT(57056,37368));

#else // __cplusplus

extern void _ZN7S467C18C1Ev();
extern void _ZN7S467C18D2Ev();
Name_Map name_map_S467C18[] = {
  NSPAIR(_ZN7S467C18C1Ev),
  NSPAIR(_ZN7S467C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C19;
extern VTBL_ENTRY _ZTI7S467C19[];
extern  VTBL_ENTRY _ZTV7S467C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C19[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C13;
extern VTBL_ENTRY _ZTI7S467C13[];
extern  VTBL_ENTRY _ZTV7S467C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C13[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
extern Class_Descriptor cd_S467C12;
extern VTBL_ENTRY _ZTI7S467C12[];
extern  VTBL_ENTRY _ZTV7S467C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C12[];
static Base_Class bases_S467C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S467C5,    ABISELECT(30160,19780), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S467C6,    ABISELECT(30464,19980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(36704,24056), //bcp->offset
    43, //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S467C19,    ABISELECT(30464,19980), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S467C6,    ABISELECT(43072,28208), //bcp->offset
    47, //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
    9, //immediately_derived
  0, 1},
  {&cd_S467C8,    ABISELECT(49312,32284), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 1},
  {&cd_S467C5,    ABISELECT(49760,32600), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C7,    ABISELECT(50056,32800), //bcp->offset
    70, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(49760,32600), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(6240,4076), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S467C13,    ABISELECT(6240,4076), //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(6736,4372), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S467C9,    ABISELECT(7040,4572), //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
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S467C12,    ABISELECT(6240,4076), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S467C18[];
extern void _ZN6S467C62v3Ev();
extern void _ZN7S467C18D1Ev();
extern void _ZN7S467C18D0Ev();
extern void ABISELECT(_ZThn6240_N7S467C18D1Ev,_ZThn4076_N7S467C18D1Ev)();
extern void ABISELECT(_ZThn6240_N7S467C18D0Ev,_ZThn4076_N7S467C18D0Ev)();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZThn7040_N7S467C18D1Ev,_ZThn4572_N7S467C18D1Ev)();
extern void ABISELECT(_ZThn7040_N7S467C18D0Ev,_ZThn4572_N7S467C18D0Ev)();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S467C18D1Ev,_ZTv0_n20_N7S467C18D1Ev)();
extern void ABISELECT(_ZThn30464_N7S467C18D1Ev,_ZThn19980_N7S467C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S467C18D0Ev,_ZTv0_n20_N7S467C18D0Ev)();
extern void ABISELECT(_ZThn30464_N7S467C18D0Ev,_ZThn19980_N7S467C18D0Ev)() __attribute__((weak));
extern void _ZN7S467C193v12Ev();
extern void ABISELECT(_ZTvn6240_n40_N7S467C18D1Ev,_ZTvn4076_n20_N7S467C18D1Ev)();
extern void ABISELECT(_ZTvn6240_n40_N7S467C18D0Ev,_ZTvn4076_n20_N7S467C18D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C18D1Ev,_ZTv0_n32_N7S467C18D1Ev)();
extern void ABISELECT(_ZThn49760_N7S467C18D1Ev,_ZThn32600_N7S467C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C18D0Ev,_ZTv0_n32_N7S467C18D0Ev)();
extern void ABISELECT(_ZThn49760_N7S467C18D0Ev,_ZThn32600_N7S467C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S467C18D1Ev,_ZTvn200_n32_N7S467C18D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C18D0Ev,_ZTvn200_n32_N7S467C18D0Ev)();
static  VTBL_ENTRY vtc_S467C18[] = {
  ABISELECT(49760,32600),
  ABISELECT(49312,32284),
  ABISELECT(43072,28208),
  ABISELECT(30464,19980),
  ABISELECT(30160,19780),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&_ZN7S467C18D1Ev,
  (VTBL_ENTRY)&_ZN7S467C18D0Ev,
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S467C18D1Ev,_ZThn4076_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S467C18D0Ev,_ZThn4076_N7S467C18D0Ev),
  ABISELECT(-6736,-4372),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  ABISELECT(-7040,-4572),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7040_N7S467C18D1Ev,_ZThn4572_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7040_N7S467C18D0Ev,_ZThn4572_N7S467C18D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
  0,
  0,
  ABISELECT(-30160,-19780),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  0,
  ABISELECT(-30464,-19980),
  0,
  ABISELECT(-304,-200),
  ABISELECT(-30464,-19980),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S467C18D1Ev,_ZTv0_n20_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S467C18D0Ev,_ZTv0_n20_N7S467C18D0Ev),
  (VTBL_ENTRY)&_ZN7S467C193v12Ev,
  ABISELECT(-36704,-24056),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S467C18D1Ev,_ZTvn4076_n20_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S467C18D0Ev,_ZTvn4076_n20_N7S467C18D0Ev),
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-49312,-32284),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-49760,-32600),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-49760,-32600),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C18D1Ev,_ZTv0_n32_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C18D0Ev,_ZTv0_n32_N7S467C18D0Ev),
  ABISELECT(-50056,-32800),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C18D1Ev,_ZTvn200_n32_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C18D0Ev,_ZTvn200_n32_N7S467C18D0Ev),
};
extern VTBL_ENTRY _ZTV7S467C18[];
extern void _ZN7S467C12D1Ev();
extern void _ZN7S467C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C12__7S467C18[] = {
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN7S467C12D1Ev,
  (VTBL_ENTRY)&_ZN7S467C12D0Ev,
};
extern void _ZN7S467C13D1Ev();
extern void _ZN7S467C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C137S467C12__7S467C18[] = {
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN7S467C13D1Ev,
  (VTBL_ENTRY)&_ZN7S467C13D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C137S467C12__7S467C18[] = {
  0,
  ABISELECT(-36832,-24132),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C137S467C12__7S467C18[] = {
  0,
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZThn43520_N7S467C13D1Ev,_ZThn28524_N7S467C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev)();
extern void ABISELECT(_ZThn43520_N7S467C13D0Ev,_ZThn28524_N7S467C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C137S467C12__7S467C18[] = {
  ABISELECT(-43520,-28524),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-43520,-28524),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C137S467C12__7S467C18[] = {
  ABISELECT(-43816,-28724),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C12__7S467C18[] = {
  0,
  ABISELECT(-36832,-24132),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C12__7S467C18[] = {
  0,
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZThn43520_N7S467C12D1Ev,_ZThn28524_N7S467C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev)();
extern void ABISELECT(_ZThn43520_N7S467C12D0Ev,_ZThn28524_N7S467C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C12__7S467C18[] = {
  ABISELECT(-43520,-28524),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-43520,-28524),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C12__7S467C18[] = {
  ABISELECT(-43816,-28724),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev),
};
extern void _ZN6S467C62v3Ev();
extern void _ZN7S467C19D1Ev();
extern void _ZN7S467C19D0Ev();
extern void _ZN7S467C193v12Ev();
static  VTBL_ENTRY _tg__ZTV7S467C19__7S467C18[] = {
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C19[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&_ZN7S467C19D1Ev,
  (VTBL_ENTRY)&_ZN7S467C19D0Ev,
  (VTBL_ENTRY)&_ZN7S467C193v12Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S467C5__7S467C19__7S467C18[] = {
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S467C19[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C18[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__7S467C18[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__7S467C18[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C18[] = {
  {&(_ZTV7S467C18[7]),  7,74},
  {&(_tg__ZTV7S467C12__7S467C18[5]),  5,7},
  {&(_tg__ZTV7S467C137S467C12__7S467C18[5]),  5,7},
  {&(_tg__ZTV6S467C6__7S467C137S467C12__7S467C18[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C137S467C12__7S467C18[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C137S467C12__7S467C18[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C137S467C12__7S467C18[2]),  2,4},
  {&(_tg__ZTV6S467C6__7S467C12__7S467C18[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C12__7S467C18[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C12__7S467C18[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C12__7S467C18[2]),  2,4},
  {&(_ZTV7S467C18[31]),  31,74},
  {&(_ZTV7S467C18[39]),  39,74},
  {&(_ZTV7S467C18[45]),  45,74},
  {&(_ZTV7S467C18[15]),  15,74},
  {&(_ZTV7S467C18[50]),  50,74},
  {&(_ZTV7S467C18[55]),  55,74},
  {&(_ZTV7S467C18[65]),  65,74},
  {&(_ZTV7S467C18[72]),  72,74},
  {&(_tg__ZTV7S467C19__7S467C18[3]),  3,7},
  {&(_tg__ZTV6S467C5__7S467C19__7S467C18[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C18[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__7S467C18[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__7S467C18[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S467C18[];
extern  VTBL_ENTRY _ZTV7S467C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C18[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N7S467C12D0Ev,_ZThn28524_N7S467C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N7S467C12D1Ev,_ZThn28524_N7S467C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N7S467C13D0Ev,_ZThn28524_N7S467C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N7S467C13D1Ev,_ZThn28524_N7S467C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C18D0Ev,_ZTv0_n32_N7S467C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49760_N7S467C18D0Ev,_ZThn32600_N7S467C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C18D1Ev,_ZTv0_n32_N7S467C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49760_N7S467C18D1Ev,_ZThn32600_N7S467C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S467C18D0Ev,_ZTv0_n20_N7S467C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N7S467C18D0Ev,_ZThn19980_N7S467C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S467C18D1Ev,_ZTv0_n20_N7S467C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N7S467C18D1Ev,_ZThn19980_N7S467C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S467C18 = {  "S467C18", // class name
  bases_S467C18, 15,
  &(vtc_S467C18[0]), // expected_vtbl_contents
  &(vtt_S467C18[0]), // expected_vtt_contents
  ABISELECT(57056,37368), // object size
  NSPAIRA(_ZTI7S467C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S467C18),74, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S467C18),24, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C17  : virtual S467C6 , S467C15 , S467C18 {
  void *s467c17f0;
  int s467c17f1[4];
  ::S468C20_nt s467c17f2;
  ::S467C12 s467c17f3;
  ::S468C14_nt s467c17f4;
  int s467c17f5;
  int s467c17f6:24;
  ::S468C14_nt s467c17f7;
  int s467c17f8;
  ::S468C20_nt s467c17f9;
  ~S467C17(); // tgen
  S467C17(); // tgen
};
//SIG(-1 S467C17) C1{ VBC2{ v1 FC3{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC5{ BC4 BC6{ v2 v3 Fc FL[10] FD FC3 Fp Fs Fp Fi} BC7{ BC3 VBC2 BC4 VBC6 v6 Fi:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} Fp FC7 Fc[7] FC8{ vd v8 v9 Fi FC3 Fi[2] FU9{ m FL FD[10] FD Fs:0} FD Fi Fi FC6 FL Fi FC6} Fi Fc[4] Fp FC7 Fi Fi[7] Fi} BC10{ BC2 VBC3 VBC11{ BC2 BC4 VBC3 vd v7 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi} BC12{ BC13{ VBC2 VBC6 VBC7 BC4 Fp FC4 FC3 Fs} BC3 BC8 FC14{ BC7 BC6 BC4 BC2 VBC3 vd v10 v11 FC4 Fi Fp[2] FL[2] Fi[2] Fp Fi FC6 Fi}} vd Fp} Fp Fi[4] FC15{} FC12 FC16{ m Fc} Fi Fi:24 FC16 Fi FC15}


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

static void Test_S467C17()
{
  extern Class_Descriptor cd_S467C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8272,21696)];
    init_test(&cd_S467C17, buf);
    S467C17 *dp, &lv = *(dp=new (buf) S467C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(132336,86780), "sizeof(S467C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C17)");
    /*is_ambiguous_... S467C17::S467C6 */ AMB_check_base_class_offset(lv, (S467C6*), ABISELECT(105440,69192), "S467C17");
    check_base_class_offset(lv, (S467C6*)(S467C4*)(S467C15*), ABISELECT(105440,69192), "S467C17");
    check_base_class_offset(lv, (S467C6*)(S467C13*)(S467C12*)(S467C18*), ABISELECT(105440,69192), "S467C17");
    /*is_ambiguous_... S467C17::S467C4 */ AMB_check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(105440,69192), "S467C17");
    /*is_ambiguous_... S467C15::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C15*), 0, "S467C17");
    /*is_ambiguous_... S467C15::S467C8 */ AMB_check_base_class_offset(lv, (S467C8*)(S467C15*), ABISELECT(80,44), "S467C17");
    check_base_class_offset(lv, (S467C5*)(S467C4*)(S467C15*), ABISELECT(528,360), "S467C17");
    check_base_class_offset(lv, (S468C7*)(S467C4*)(S467C15*), ABISELECT(824,560), "S467C17");
    check_base_class_offset(lv, (S467C8*)(S467C4*)(S467C15*), ABISELECT(111680,73268), "S467C17");
    check_base_class_offset(lv, (S467C8*)(S467C13*)(S467C12*)(S467C18*), ABISELECT(111680,73268), "S467C17");
    /*is_ambiguous_... S467C17::S467C4 */ AMB_check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(111680,73268), "S467C17");
    check_base_class_offset(lv, (S467C4*)(S467C15*), ABISELECT(528,360), "S467C17");
    check_base_class_offset(lv, (S467C15*), 0, "S467C17");
    /*is_ambiguous_... S467C18::S467C6 */ AMB_check_base_class_offset(lv, (S467C6*)(S467C18*), ABISELECT(37328,24508), "S467C17");
    /*is_ambiguous_... S467C18::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C18*), ABISELECT(112128,73584), "S467C17");
    check_base_class_offset(lv, (S467C5*)(S467C19*), ABISELECT(112128,73584), "S467C17");
    check_base_class_offset(lv, (S467C6*)(S467C19*), ABISELECT(112432,73784), "S467C17");
    check_base_class_offset(lv, (S468C7*)(S467C19*), ABISELECT(118672,77860), "S467C17");
    check_base_class_offset(lv, (S467C19*)(S467C18*), ABISELECT(112432,73784), "S467C17");
    /*is_ambiguous_... S467C17::S467C4 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C4*), ABISELECT(125040,82012), "S467C17");
    /*is_ambiguous_... S467C17::S467C4 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(125336,82212), "S467C17");
    check_base_class_offset(lv, (S467C4*)(S467C13*)(S467C12*)(S467C18*), ABISELECT(125040,82012), "S467C17");
    /*is_ambiguous_... S467C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C13*)(S467C12*)(S467C18*), ABISELECT(43568,28584), "S467C17");
    check_base_class_offset(lv, (S467C13*)(S467C12*)(S467C18*), ABISELECT(43568,28584), "S467C17");
    /*is_ambiguous_... S467C12::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C12*)(S467C18*), ABISELECT(44064,28880), "S467C17");
    check_base_class_offset(lv, (S467C9*)(S467C12*)(S467C18*), ABISELECT(44368,29080), "S467C17");
    check_base_class_offset(lv, (S467C12*)(S467C18*), ABISELECT(43568,28584), "S467C17");
    check_base_class_offset(lv, (S467C18*), ABISELECT(37328,24508), "S467C17");
    check_field_offset(lv, s467c17f0, ABISELECT(67480,44288), "S467C17.s467c17f0");
    check_field_offset(lv, s467c17f1, ABISELECT(67488,44292), "S467C17.s467c17f1");
    check_field_offset(lv, s467c17f2, ABISELECT(67504,44308), "S467C17.s467c17f2");
    check_field_offset(lv, s467c17f3, ABISELECT(67520,44312), "S467C17.s467c17f3");
    check_field_offset(lv, s467c17f4, ABISELECT(105408,69172), "S467C17.s467c17f4");
    check_field_offset(lv, s467c17f5, ABISELECT(105412,69176), "S467C17.s467c17f5");
    set_bf_and_test(lv, s467c17f6, ABISELECT(105416,69180), 0, 24, 1, "S467C17");
    set_bf_and_test(lv, s467c17f6, ABISELECT(105416,69180), 0, 24, hide_sll(1LL<<23), "S467C17");
    check_field_offset(lv, s467c17f7, ABISELECT(105419,69183), "S467C17.s467c17f7");
    check_field_offset(lv, s467c17f8, ABISELECT(105420,69184), "S467C17.s467c17f8");
    check_field_offset(lv, s467c17f9, ABISELECT(105424,69188), "S467C17.s467c17f9");
    test_class_info(&lv, &cd_S467C17);
    dp->~S467C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C17(Test_S467C17, "S467C17", ABISELECT(132336,86780));

#else // __cplusplus

extern void _ZN7S467C17C1Ev();
extern void _ZN7S467C17D1Ev();
Name_Map name_map_S467C17[] = {
  NSPAIR(_ZN7S467C17C1Ev),
  NSPAIR(_ZN7S467C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S467C15;
extern VTBL_ENTRY _ZTI7S467C15[];
extern  VTBL_ENTRY _ZTV7S467C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C15[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C19;
extern VTBL_ENTRY _ZTI7S467C19[];
extern  VTBL_ENTRY _ZTV7S467C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C19[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C13;
extern VTBL_ENTRY _ZTI7S467C13[];
extern  VTBL_ENTRY _ZTV7S467C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C13[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
extern Class_Descriptor cd_S467C12;
extern VTBL_ENTRY _ZTI7S467C12[];
extern  VTBL_ENTRY _ZTV7S467C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C12[];
extern Class_Descriptor cd_S467C18;
extern VTBL_ENTRY _ZTI7S467C18[];
extern  VTBL_ENTRY _ZTV7S467C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C18[];
static Base_Class bases_S467C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C6,    ABISELECT(105440,69192), //bcp->offset
    53, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S467C8,    ABISELECT(80,44), //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
    11, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(528,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(824,560), //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
    13, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S467C8,    ABISELECT(111680,73268), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S467C4,    ABISELECT(528,360), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S467C15,    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_S467C6,    ABISELECT(37328,24508), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(112128,73584), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S467C6,    ABISELECT(112432,73784), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C7,    ABISELECT(118672,77860), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S467C19,    ABISELECT(112432,73784), //bcp->offset
    69, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S467C5,    ABISELECT(125040,82012), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(125336,82212), //bcp->offset
    96, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(125040,82012), //bcp->offset
    83, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(43568,28584), //bcp->offset
    -1, //bcp->virtual_function_table_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_S467C13,    ABISELECT(43568,28584), //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
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(44064,28880), //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
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S467C9,    ABISELECT(44368,29080), //bcp->offset
    47, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S467C12,    ABISELECT(43568,28584), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S467C18,    ABISELECT(37328,24508), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S467C17[];
extern void _ZN7S467C17D1Ev();
extern void _ZN7S467C17D0Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZThn528_N7S467C17D1Ev,_ZThn360_N7S467C17D1Ev)();
extern void ABISELECT(_ZThn528_N7S467C17D0Ev,_ZThn360_N7S467C17D0Ev)();
extern void ABISELECT(_ZThn824_N7S467C17D1Ev,_ZThn560_N7S467C17D1Ev)();
extern void ABISELECT(_ZThn824_N7S467C17D0Ev,_ZThn560_N7S467C17D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void ABISELECT(_ZThn37328_N7S467C17D1Ev,_ZThn24508_N7S467C17D1Ev)();
extern void ABISELECT(_ZThn37328_N7S467C17D0Ev,_ZThn24508_N7S467C17D0Ev)();
extern void ABISELECT(_ZThn43568_N7S467C17D1Ev,_ZThn28584_N7S467C17D1Ev)();
extern void ABISELECT(_ZThn43568_N7S467C17D0Ev,_ZThn28584_N7S467C17D0Ev)();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZThn44368_N7S467C17D1Ev,_ZThn29080_N7S467C17D1Ev)();
extern void ABISELECT(_ZThn44368_N7S467C17D0Ev,_ZThn29080_N7S467C17D0Ev)();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S467C17D1Ev,_ZTv0_n20_N7S467C17D1Ev)();
extern void ABISELECT(_ZThn112432_N7S467C17D1Ev,_ZThn73784_N7S467C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S467C17D0Ev,_ZTv0_n20_N7S467C17D0Ev)();
extern void ABISELECT(_ZThn112432_N7S467C17D0Ev,_ZThn73784_N7S467C17D0Ev)() __attribute__((weak));
extern void _ZN7S467C193v12Ev();
extern void ABISELECT(_ZTvn6240_n40_N7S467C17D1Ev,_ZTvn4076_n20_N7S467C17D1Ev)();
extern void ABISELECT(_ZTvn6240_n40_N7S467C17D0Ev,_ZTvn4076_n20_N7S467C17D0Ev)();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C17D1Ev,_ZTv0_n32_N7S467C17D1Ev)();
extern void ABISELECT(_ZThn125040_N7S467C17D1Ev,_ZThn82012_N7S467C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C17D0Ev,_ZTv0_n32_N7S467C17D0Ev)();
extern void ABISELECT(_ZThn125040_N7S467C17D0Ev,_ZThn82012_N7S467C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S467C17D1Ev,_ZTvn200_n32_N7S467C17D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C17D0Ev,_ZTvn200_n32_N7S467C17D0Ev)();
static  VTBL_ENTRY vtc_S467C17[] = {
  ABISELECT(125040,82012),
  ABISELECT(112432,73784),
  ABISELECT(112128,73584),
  ABISELECT(111680,73268),
  ABISELECT(105440,69192),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN7S467C17D1Ev,
  (VTBL_ENTRY)&_ZN7S467C17D0Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(111152,72908),
  ABISELECT(104912,68832),
  ABISELECT(-528,-360),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S467C17D1Ev,_ZThn360_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S467C17D0Ev,_ZThn360_N7S467C17D0Ev),
  ABISELECT(-824,-560),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn824_N7S467C17D1Ev,_ZThn560_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn824_N7S467C17D0Ev,_ZThn560_N7S467C17D0Ev),
  ABISELECT(87712,57504),
  ABISELECT(74352,48760),
  ABISELECT(68112,44684),
  ABISELECT(75104,49276),
  ABISELECT(74800,49076),
  ABISELECT(-37328,-24508),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn37328_N7S467C17D1Ev,_ZThn24508_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn37328_N7S467C17D0Ev,_ZThn24508_N7S467C17D0Ev),
  ABISELECT(81472,53428),
  ABISELECT(68112,44684),
  ABISELECT(61872,40608),
  ABISELECT(-43568,-28584),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn43568_N7S467C17D1Ev,_ZThn28584_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn43568_N7S467C17D0Ev,_ZThn28584_N7S467C17D0Ev),
  ABISELECT(-44064,-28880),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  ABISELECT(-44368,-29080),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn44368_N7S467C17D1Ev,_ZThn29080_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn44368_N7S467C17D0Ev,_ZThn29080_N7S467C17D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
  0,
  ABISELECT(-105440,-69192),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-111680,-73268),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  0,
  0,
  ABISELECT(-112128,-73584),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  0,
  ABISELECT(-112432,-73784),
  0,
  ABISELECT(-304,-200),
  ABISELECT(-112432,-73784),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S467C17D1Ev,_ZTv0_n20_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S467C17D0Ev,_ZTv0_n20_N7S467C17D0Ev),
  (VTBL_ENTRY)&_ZN7S467C193v12Ev,
  ABISELECT(-118672,-77860),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S467C17D1Ev,_ZTvn4076_n20_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S467C17D0Ev,_ZTvn4076_n20_N7S467C17D0Ev),
  ABISELECT(-125040,-82012),
  0,
  0,
  0,
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  ABISELECT(-125040,-82012),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C17D1Ev,_ZTv0_n32_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C17D0Ev,_ZTv0_n32_N7S467C17D0Ev),
  ABISELECT(-125336,-82212),
  (VTBL_ENTRY)&(_ZTI7S467C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C17D1Ev,_ZTvn200_n32_N7S467C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C17D0Ev,_ZTvn200_n32_N7S467C17D0Ev),
};
extern VTBL_ENTRY _ZTV7S467C17[];
extern void _ZN7S467C15D1Ev();
extern void _ZN7S467C15D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C15__7S467C17[] = {
  ABISELECT(111680,73268),
  ABISELECT(105440,69192),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN7S467C15D1Ev,
  (VTBL_ENTRY)&_ZN7S467C15D0Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C47S467C15__7S467C17[] = {
  ABISELECT(111152,72908),
  ABISELECT(104912,68832),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C47S467C15__7S467C17[] = {
  0,
  ABISELECT(-104912,-68832),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C47S467C15__7S467C17[] = {
  0,
  0,
  ABISELECT(-111152,-72908),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZThn528_N7S467C15D1Ev,_ZThn360_N7S467C15D1Ev)();
extern void ABISELECT(_ZThn528_N7S467C15D0Ev,_ZThn360_N7S467C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C15__7S467C17[] = {
  ABISELECT(111152,72908),
  ABISELECT(104912,68832),
  ABISELECT(-528,-360),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S467C15D1Ev,_ZThn360_N7S467C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S467C15D0Ev,_ZThn360_N7S467C15D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C15__7S467C17[] = {
  0,
  ABISELECT(-105440,-69192),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__A1__7S467C15__7S467C17[] = {
  0,
  0,
  ABISELECT(-111680,-73268),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C62v3Ev();
extern void _ZN7S467C18D1Ev();
extern void _ZN7S467C18D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C18__7S467C17[] = {
  ABISELECT(87712,57504),
  ABISELECT(74352,48760),
  ABISELECT(68112,44684),
  ABISELECT(75104,49276),
  ABISELECT(74800,49076),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&_ZN7S467C18D1Ev,
  (VTBL_ENTRY)&_ZN7S467C18D0Ev,
};
extern void _ZN7S467C12D1Ev();
extern void _ZN7S467C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C127S467C18__7S467C17[] = {
  ABISELECT(81472,53428),
  ABISELECT(68112,44684),
  ABISELECT(61872,40608),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN7S467C12D1Ev,
  (VTBL_ENTRY)&_ZN7S467C12D0Ev,
};
extern void _ZN7S467C13D1Ev();
extern void _ZN7S467C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C137S467C127S467C18__7S467C17[] = {
  ABISELECT(81472,53428),
  ABISELECT(68112,44684),
  ABISELECT(61872,40608),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN7S467C13D1Ev,
  (VTBL_ENTRY)&_ZN7S467C13D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C137S467C127S467C18__7S467C17[] = {
  0,
  ABISELECT(-61872,-40608),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C137S467C127S467C18__7S467C17[] = {
  0,
  0,
  ABISELECT(-68112,-44684),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZThn81472_N7S467C13D1Ev,_ZThn53428_N7S467C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev)();
extern void ABISELECT(_ZThn81472_N7S467C13D0Ev,_ZThn53428_N7S467C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C137S467C127S467C18__7S467C17[] = {
  ABISELECT(-81472,-53428),
  0,
  0,
  0,
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  ABISELECT(-81472,-53428),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C137S467C127S467C18__7S467C17[] = {
  ABISELECT(-81768,-53628),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C127S467C18__7S467C17[] = {
  0,
  ABISELECT(-61872,-40608),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C127S467C18__7S467C17[] = {
  0,
  0,
  ABISELECT(-68112,-44684),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZThn81472_N7S467C12D1Ev,_ZThn53428_N7S467C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev)();
extern void ABISELECT(_ZThn81472_N7S467C12D0Ev,_ZThn53428_N7S467C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C127S467C18__7S467C17[] = {
  ABISELECT(-81472,-53428),
  0,
  0,
  0,
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  ABISELECT(-81472,-53428),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C127S467C18__7S467C17[] = {
  ABISELECT(-81768,-53628),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev),
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S467C5__7S467C18__7S467C17[] = {
  0,
  0,
  ABISELECT(-74800,-49076),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern void _ZN6S467C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S467C18D1Ev,_ZTv0_n20_N7S467C18D1Ev)();
extern void ABISELECT(_ZThn75104_N7S467C18D1Ev,_ZThn49276_N7S467C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S467C18D0Ev,_ZTv0_n20_N7S467C18D0Ev)();
extern void ABISELECT(_ZThn75104_N7S467C18D0Ev,_ZThn49276_N7S467C18D0Ev)() __attribute__((weak));
extern void _ZN7S467C193v12Ev();
static  VTBL_ENTRY _tg__ZTV7S467C19__7S467C18__7S467C17[] = {
  0,
  ABISELECT(-75104,-49276),
  0,
  ABISELECT(-304,-200),
  ABISELECT(-75104,-49276),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S467C18D1Ev,_ZTv0_n20_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S467C18D0Ev,_ZTv0_n20_N7S467C18D0Ev),
  (VTBL_ENTRY)&_ZN7S467C193v12Ev,
};
extern void ABISELECT(_ZTvn6240_n40_N7S467C18D1Ev,_ZTvn4076_n20_N7S467C18D1Ev)();
extern void ABISELECT(_ZTvn6240_n40_N7S467C18D0Ev,_ZTvn4076_n20_N7S467C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C77S467C19__7S467C18__7S467C17[] = {
  ABISELECT(-81344,-53352),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S467C18D1Ev,_ZTvn4076_n20_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N7S467C18D0Ev,_ZTvn4076_n20_N7S467C18D0Ev),
};
extern void ABISELECT(_ZThn6240_N7S467C18D1Ev,_ZThn4076_N7S467C18D1Ev)();
extern void ABISELECT(_ZThn6240_N7S467C18D0Ev,_ZThn4076_N7S467C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S467C12__7S467C18__7S467C17[] = {
  ABISELECT(81472,53428),
  ABISELECT(68112,44684),
  ABISELECT(61872,40608),
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S467C18D1Ev,_ZThn4076_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N7S467C18D0Ev,_ZThn4076_N7S467C18D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__A2__7S467C18__7S467C17[] = {
  0,
  ABISELECT(-68112,-44684),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C18__7S467C17[] = {
  0,
  0,
  ABISELECT(-74352,-48760),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C18D1Ev,_ZTv0_n32_N7S467C18D1Ev)();
extern void ABISELECT(_ZThn87712_N7S467C18D1Ev,_ZThn57504_N7S467C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C18D0Ev,_ZTv0_n32_N7S467C18D0Ev)();
extern void ABISELECT(_ZThn87712_N7S467C18D0Ev,_ZThn57504_N7S467C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C18__7S467C17[] = {
  ABISELECT(-87712,-57504),
  0,
  0,
  0,
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  ABISELECT(-87712,-57504),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C18D1Ev,_ZTv0_n32_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C18D0Ev,_ZTv0_n32_N7S467C18D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C18D1Ev,_ZTvn200_n32_N7S467C18D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C18D0Ev,_ZTvn200_n32_N7S467C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__A1__7S467C18__7S467C17[] = {
  ABISELECT(-88008,-57704),
  (VTBL_ENTRY)&(_ZTI7S467C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C18D1Ev,_ZTvn200_n32_N7S467C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C18D0Ev,_ZTvn200_n32_N7S467C18D0Ev),
};
extern void _ZN6S467C62v3Ev();
extern void _ZN7S467C19D1Ev();
extern void _ZN7S467C19D0Ev();
extern void _ZN7S467C193v12Ev();
static  VTBL_ENTRY _tg__ZTV7S467C19__7S467C17[] = {
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C19[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  (VTBL_ENTRY)&_ZN7S467C19D1Ev,
  (VTBL_ENTRY)&_ZN7S467C19D0Ev,
  (VTBL_ENTRY)&_ZN7S467C193v12Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S467C5__7S467C19__7S467C17[] = {
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S467C19[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__A1__7S467C17[] = {
  ABISELECT(-13360,-8744),
  ABISELECT(-19600,-12820),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__A1__7S467C17[] = {
  0,
  ABISELECT(19600,12820),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__A1__7S467C17[] = {
  0,
  0,
  ABISELECT(13360,8744),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C17[] = {
  {&(_ZTV7S467C17[7]),  7,100},
  {&(_tg__ZTV7S467C15__7S467C17[4]),  4,6},
  {&(_tg__ZTV6S467C47S467C15__7S467C17[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C47S467C15__7S467C17[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C47S467C15__7S467C17[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C15__7S467C17[4]),  4,9},
  {&(_tg__ZTV6S467C6__7S467C15__7S467C17[3]),  3,4},
  {&(_tg__ZTV6S467C8__A1__7S467C15__7S467C17[4]),  4,6},
  {&(_tg__ZTV7S467C18__7S467C17[7]),  7,10},
  {&(_tg__ZTV7S467C127S467C18__7S467C17[5]),  5,7},
  {&(_tg__ZTV7S467C137S467C127S467C18__7S467C17[5]),  5,7},
  {&(_tg__ZTV6S467C6__7S467C137S467C127S467C18__7S467C17[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C137S467C127S467C18__7S467C17[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C137S467C127S467C18__7S467C17[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C137S467C127S467C18__7S467C17[2]),  2,4},
  {&(_tg__ZTV6S467C6__7S467C127S467C18__7S467C17[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C127S467C18__7S467C17[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C127S467C18__7S467C17[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C127S467C18__7S467C17[2]),  2,4},
  {&(_tg__ZTV6S467C5__7S467C18__7S467C17[4]),  4,6},
  {&(_tg__ZTV7S467C19__7S467C18__7S467C17[6]),  6,10},
  {&(_tg__ZTV6S468C77S467C19__7S467C18__7S467C17[2]),  2,4},
  {&(_tg__ZTV7S467C12__7S467C18__7S467C17[5]),  5,7},
  {&(_tg__ZTV6S467C6__A2__7S467C18__7S467C17[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C18__7S467C17[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C18__7S467C17[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__A1__7S467C18__7S467C17[2]),  2,4},
  {&(_ZTV7S467C17[56]),  56,100},
  {&(_ZTV7S467C17[17]),  17,100},
  {&(_ZTV7S467C17[61]),  61,100},
  {&(_ZTV7S467C17[33]),  33,100},
  {&(_ZTV7S467C17[67]),  67,100},
  {&(_ZTV7S467C17[75]),  75,100},
  {&(_ZTV7S467C17[81]),  81,100},
  {&(_ZTV7S467C17[41]),  41,100},
  {&(_ZTV7S467C17[91]),  91,100},
  {&(_ZTV7S467C17[98]),  98,100},
  {&(_tg__ZTV7S467C19__7S467C17[3]),  3,7},
  {&(_tg__ZTV6S467C5__7S467C19__7S467C17[4]),  4,6},
  {&(_tg__ZTV6S467C4__A1__7S467C17[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__A1__7S467C17[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__A1__7S467C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S467C17[];
extern  VTBL_ENTRY _ZTV7S467C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C17[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C18D0Ev,_ZTv0_n32_N7S467C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87712_N7S467C18D0Ev,_ZThn57504_N7S467C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C18D1Ev,_ZTv0_n32_N7S467C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87712_N7S467C18D1Ev,_ZThn57504_N7S467C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S467C18D0Ev,_ZTv0_n20_N7S467C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn75104_N7S467C18D0Ev,_ZThn49276_N7S467C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S467C18D1Ev,_ZTv0_n20_N7S467C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn75104_N7S467C18D1Ev,_ZThn49276_N7S467C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn81472_N7S467C12D0Ev,_ZThn53428_N7S467C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn81472_N7S467C12D1Ev,_ZThn53428_N7S467C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn81472_N7S467C13D0Ev,_ZThn53428_N7S467C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn81472_N7S467C13D1Ev,_ZThn53428_N7S467C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C17D0Ev,_ZTv0_n32_N7S467C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125040_N7S467C17D0Ev,_ZThn82012_N7S467C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C17D1Ev,_ZTv0_n32_N7S467C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125040_N7S467C17D1Ev,_ZThn82012_N7S467C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S467C17D0Ev,_ZTv0_n20_N7S467C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112432_N7S467C17D0Ev,_ZThn73784_N7S467C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S467C17D1Ev,_ZTv0_n20_N7S467C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112432_N7S467C17D1Ev,_ZThn73784_N7S467C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S467C17 = {  "S467C17", // class name
  bases_S467C17, 22,
  &(vtc_S467C17[0]), // expected_vtbl_contents
  &(vtt_S467C17[0]), // expected_vtt_contents
  ABISELECT(132336,86780), // object size
  NSPAIRA(_ZTI7S467C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S467C17),100, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S467C17),42, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C16  {
  ::S467C12 s467c16f0;
  ::S467C17 s467c16f1;
  int s467c16f2;
  ::S467C5 s467c16f3;
  ::S468C14_nt s467c16f4;
  void *s467c16f5;
  int s467c16f6:15;
  int s467c16f7;
  int s467c16f8;
  void  mf467c16(); // _ZN7S467C168mf467c16Ev
};
//SIG(-1 S467C16) C1{ m FC2{ BC3{ VBC4{ v1 FC5{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC5[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC5[5] Fp[5] FC5[5]} VBC7{ v2 v3 Fc FL[10] FD FC5 Fp Fs Fp Fi} VBC8{ BC5 VBC4 BC6 VBC7 v6 Fi:2 FD[7] Fp FC4 Fp Fi Fp[2] FC6 FC5 FD[8]} BC6 Fp FC6 FC5 Fs} BC5 BC9{ vd v7 v8 Fi FC5 Fi[2] FU10{ m FL FD[10] FD Fs:0} FD Fi Fi FC7 FL Fi FC7} FC11{ BC8 BC7 BC6 BC4 VBC5 vd v9 v10 FC6 Fi Fp[2] FL[2] Fi[2] Fp Fi FC7 Fi}} FC12{ VBC4 BC13{ BC6 BC7 BC8 Fp FC8 Fc[7] FC9 Fi Fc[4] Fp FC8 Fi Fi[7] Fi} BC14{ BC4 VBC5 VBC15{ BC4 BC6 VBC5 vd v11 Fi Fs Fs:1 Fp Fl FC4 Fi[2] Fc[3] Fi} BC2 vd Fp} Fp Fi[4] FC16{} FC2 FC17{ m Fc} Fi Fi:24 FC17 Fi FC16} Fi FC5 FC17 Fp Fi:15 Fi Fi}


void  S467C16 ::mf467c16(){}

static void Test_S467C16()
{
  {
    init_simple_test("S467C16");
    static S467C16 lv;
    check2(sizeof(lv), ABISELECT(170576,111864), "sizeof(S467C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C16)");
    check_field_offset(lv, s467c16f0, 0, "S467C16.s467c16f0");
    check_field_offset(lv, s467c16f1, ABISELECT(37888,24860), "S467C16.s467c16f1");
    check_field_offset(lv, s467c16f2, ABISELECT(170224,111640), "S467C16.s467c16f2");
    check_field_offset(lv, s467c16f3, ABISELECT(170240,111644), "S467C16.s467c16f3");
    check_field_offset(lv, s467c16f4, ABISELECT(170544,111844), "S467C16.s467c16f4");
    check_field_offset(lv, s467c16f5, ABISELECT(170552,111848), "S467C16.s467c16f5");
    set_bf_and_test(lv, s467c16f6, ABISELECT(170560,111852), 0, 15, 1, "S467C16");
    set_bf_and_test(lv, s467c16f6, ABISELECT(170560,111852), 0, 15, hide_sll(1LL<<14), "S467C16");
    check_field_offset(lv, s467c16f7, ABISELECT(170564,111856), "S467C16.s467c16f7");
    check_field_offset(lv, s467c16f8, ABISELECT(170568,111860), "S467C16.s467c16f8");
  }
}
static Arrange_To_Call_Me vS467C16(Test_S467C16, "S467C16", ABISELECT(170576,111864));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S467C16[];
VTBL_ENTRY *P__ZTI7S467C16 = _ZTI7S467C16; 
Class_Descriptor cd_S467C16 = {  "S467C16", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(170576,111864), // object size
  NSPAIRA(_ZTI7S467C16),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  S467C21  : virtual S467C8 , virtual S467C4 , virtual S467C5 , virtual S467C11 , virtual S467C12 {
  void *s467c21f0;
  ::S467C5 s467c21f1;
  void *s467c21f2;
  void *s467c21f3;
  int s467c21f4;
  ::S467C5 s467c21f5;
  short s467c21f6;
  int s467c21f7;
  char s467c21f8[10];
  void *s467c21f9;
  int s467c21f10;
  long s467c21f11[4];
  void *s467c21f12;
  virtual  ~S467C21(); // _ZN7S467C21D2Ev
  S467C21(); // tgen
};
//SIG(-1 S467C21) C1{ VBC2{ v1 v2 Fc FL[10] FD FC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fp Fs Fp Fi} VBC4{ BC3 VBC5{ v5 FC3[8] FC3[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC6 VBC2 v6 Fi:2 FD[7] Fp FC5 Fp Fi Fp[2] FC6 FC3 FD[8]} VBC3 VBC7{ BC8{ BC9{ VBC5 VBC2 VBC4 BC6 Fp FC6 FC3 Fs} BC3 BC10{ vd v7 v8 Fi FC3 Fi[2] FU11{ m FL FD[10] FD Fs:0} FD Fi Fi FC2 FL Fi FC2} FC12{ BC4 BC2 BC6 BC5 VBC3 vd v9 v10 FC6 Fi Fp[2] FL[2] Fi[2] Fp Fi FC2 Fi}} VBC3 BC6 BC10 FC13{ m Fc} Fi Fi Fi:6 FC13 Fi} VBC8 vd Fp FC3 Fp Fp Fi FC3 Fs Fi Fc[10] Fp Fi Fl[4] Fp}


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

static void Test_S467C21()
{
  extern Class_Descriptor cd_S467C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4025,10574)];
    init_test(&cd_S467C21, buf);
    S467C21 *dp, &lv = *(dp=new (buf) S467C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64384,42292), "sizeof(S467C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C21)");
    check_base_class_offset(lv, (S467C8*), ABISELECT(736,468), "S467C21");
    check_base_class_offset(lv, (S467C8*)(S467C4*), ABISELECT(736,468), "S467C21");
    check_base_class_offset(lv, (S467C8*)(S467C13*)(S467C12*)(S467C11*), ABISELECT(736,468), "S467C21");
    /*is_ambiguous_... S467C21::S467C12 */ AMB_check_base_class_offset(lv, (S467C8*)(S467C13*)(S467C12*), ABISELECT(736,468), "S467C21");
    check_base_class_offset(lv, (S467C5*)(S467C4*), ABISELECT(1184,784), "S467C21");
    check_base_class_offset(lv, (S467C6*)(S467C4*), ABISELECT(8480,5552), "S467C21");
    check_base_class_offset(lv, (S467C6*)(S467C13*)(S467C12*)(S467C11*), ABISELECT(8480,5552), "S467C21");
    /*is_ambiguous_... S467C21::S467C12 */ AMB_check_base_class_offset(lv, (S467C6*)(S467C13*)(S467C12*), ABISELECT(8480,5552), "S467C21");
    check_base_class_offset(lv, (S468C7*)(S467C4*), ABISELECT(1480,984), "S467C21");
    check_base_class_offset(lv, (S467C4*), ABISELECT(1184,784), "S467C21");
    check_base_class_offset(lv, (S467C4*)(S467C13*)(S467C12*)(S467C11*), ABISELECT(1184,784), "S467C21");
    /*is_ambiguous_... S467C21::S467C12 */ AMB_check_base_class_offset(lv, (S467C4*)(S467C13*)(S467C12*), ABISELECT(1184,784), "S467C21");
    /*is_ambiguous_... S467C21::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*), ABISELECT(14720,9628), "S467C21");
    /*is_ambiguous_... S467C11::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C11*), ABISELECT(14720,9628), "S467C21");
    /*is_ambiguous_... S467C13::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C13*)(S467C12*)(S467C11*), ABISELECT(15024,9828), "S467C21");
    check_base_class_offset(lv, (S467C13*)(S467C12*)(S467C11*), ABISELECT(15024,9828), "S467C21");
    /*is_ambiguous_... S467C12::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C12*)(S467C11*), ABISELECT(15520,10124), "S467C21");
    check_base_class_offset(lv, (S467C9*)(S467C12*)(S467C11*), ABISELECT(15824,10324), "S467C21");
    check_base_class_offset(lv, (S467C12*)(S467C11*), ABISELECT(15024,9828), "S467C21");
    /*is_ambiguous_... S467C11::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C11*), ABISELECT(38928,25528), "S467C21");
    /*is_ambiguous_... S467C11::S467C9 */ AMB_check_base_class_offset(lv, (S467C9*)(S467C11*), ABISELECT(39008,25572), "S467C21");
    check_base_class_offset(lv, (S467C11*), ABISELECT(15024,9828), "S467C21");
    /*is_ambiguous_... S467C21::S467C12 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C13*)(S467C12*), ABISELECT(40480,26592), "S467C21");
    /*is_ambiguous_... S467C21::S467C12 */ AMB_check_base_class_offset(lv, (S467C13*)(S467C12*), ABISELECT(40480,26592), "S467C21");
    /*is_ambiguous_... S467C21::S467C12 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C12*), ABISELECT(40976,26888), "S467C21");
    /*is_ambiguous_... S467C21::S467C12 */ AMB_check_base_class_offset(lv, (S467C9*)(S467C12*), ABISELECT(41280,27088), "S467C21");
    /*is_ambiguous_... S467C21::S467C12 */ AMB_check_base_class_offset(lv, (S467C12*), ABISELECT(40480,26592), "S467C21");
    check_field_offset(lv, s467c21f0, ABISELECT(8,4), "S467C21.s467c21f0");
    check_field_offset(lv, s467c21f1, ABISELECT(16,8), "S467C21.s467c21f1");
    check_field_offset(lv, s467c21f2, ABISELECT(320,208), "S467C21.s467c21f2");
    check_field_offset(lv, s467c21f3, ABISELECT(328,212), "S467C21.s467c21f3");
    check_field_offset(lv, s467c21f4, ABISELECT(336,216), "S467C21.s467c21f4");
    check_field_offset(lv, s467c21f5, ABISELECT(352,220), "S467C21.s467c21f5");
    check_field_offset(lv, s467c21f6, ABISELECT(656,420), "S467C21.s467c21f6");
    check_field_offset(lv, s467c21f7, ABISELECT(660,424), "S467C21.s467c21f7");
    check_field_offset(lv, s467c21f8, ABISELECT(664,428), "S467C21.s467c21f8");
    check_field_offset(lv, s467c21f9, ABISELECT(680,440), "S467C21.s467c21f9");
    check_field_offset(lv, s467c21f10, ABISELECT(688,444), "S467C21.s467c21f10");
    check_field_offset(lv, s467c21f11, ABISELECT(696,448), "S467C21.s467c21f11");
    check_field_offset(lv, s467c21f12, ABISELECT(728,464), "S467C21.s467c21f12");
    test_class_info(&lv, &cd_S467C21);
    dp->~S467C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C21(Test_S467C21, "S467C21", ABISELECT(64384,42292));

#else // __cplusplus

extern void _ZN7S467C21C1Ev();
extern void _ZN7S467C21D2Ev();
Name_Map name_map_S467C21[] = {
  NSPAIR(_ZN7S467C21C1Ev),
  NSPAIR(_ZN7S467C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C13;
extern VTBL_ENTRY _ZTI7S467C13[];
extern  VTBL_ENTRY _ZTV7S467C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C13[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
extern Class_Descriptor cd_S467C12;
extern VTBL_ENTRY _ZTI7S467C12[];
extern  VTBL_ENTRY _ZTV7S467C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C12[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
extern Class_Descriptor cd_S467C11;
extern VTBL_ENTRY _ZTI7S467C11[];
extern  VTBL_ENTRY _ZTV7S467C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C11[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C13;
extern VTBL_ENTRY _ZTI7S467C13[];
extern  VTBL_ENTRY _ZTV7S467C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C13[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
extern Class_Descriptor cd_S467C12;
extern VTBL_ENTRY _ZTI7S467C12[];
extern  VTBL_ENTRY _ZTV7S467C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C12[];
static Base_Class bases_S467C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C8,    ABISELECT(736,468), //bcp->offset
    10, //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_S467C5,    ABISELECT(1184,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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S467C6,    ABISELECT(8480,5552), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(1480,984), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(1184,784), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S467C5,    ABISELECT(14720,9628), //bcp->offset
    37, //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
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    ABISELECT(15024,9828), //bcp->offset
    -1, //bcp->virtual_function_table_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_S467C13,    ABISELECT(15024,9828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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_S467C5,    ABISELECT(15520,10124), //bcp->offset
    56, //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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S467C9,    ABISELECT(15824,10324), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S467C12,    ABISELECT(15024,9828), //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
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(38928,25528), //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
    13, //immediately_derived
  0, 0},
  {&cd_S467C9,    ABISELECT(39008,25572), //bcp->offset
    70, //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
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S467C11,    ABISELECT(15024,9828), //bcp->offset
    43, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    ABISELECT(40480,26592), //bcp->offset
    -1, //bcp->virtual_function_table_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_S467C13,    ABISELECT(40480,26592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(40976,26888), //bcp->offset
    88, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S467C9,    ABISELECT(41280,27088), //bcp->offset
    92, //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
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S467C12,    ABISELECT(40480,26592), //bcp->offset
    76, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S467C21[];
extern void _ZN7S467C21D1Ev();
extern void _ZN7S467C21D0Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C21D1Ev,_ZTv0_n32_N7S467C21D1Ev)();
extern void ABISELECT(_ZThn1184_N7S467C21D1Ev,_ZThn784_N7S467C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S467C21D0Ev,_ZTv0_n32_N7S467C21D0Ev)();
extern void ABISELECT(_ZThn1184_N7S467C21D0Ev,_ZThn784_N7S467C21D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N7S467C21D1Ev,_ZTvn200_n32_N7S467C21D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C21D0Ev,_ZTvn200_n32_N7S467C21D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZTv0_n56_N7S467C21D1Ev,_ZTv0_n28_N7S467C21D1Ev)();
extern void ABISELECT(_ZThn15024_N7S467C21D1Ev,_ZThn9828_N7S467C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S467C21D0Ev,_ZTv0_n28_N7S467C21D0Ev)();
extern void ABISELECT(_ZThn15024_N7S467C21D0Ev,_ZThn9828_N7S467C21D0Ev)() __attribute__((weak));
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZTvn800_n56_N7S467C21D1Ev,_ZTvn496_n28_N7S467C21D1Ev)();
extern void ABISELECT(_ZTvn800_n56_N7S467C21D0Ev,_ZTvn496_n28_N7S467C21D0Ev)();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
extern void ABISELECT(_ZTvn23904_n56_N7S467C21D1Ev,_ZTvn15700_n28_N7S467C21D1Ev)();
extern void ABISELECT(_ZTvn23904_n56_N7S467C21D0Ev,_ZTvn15700_n28_N7S467C21D0Ev)();
extern void ABISELECT(_ZTvn23984_n56_N7S467C21D1Ev,_ZTvn15744_n28_N7S467C21D1Ev)();
extern void ABISELECT(_ZTvn23984_n56_N7S467C21D0Ev,_ZTvn15744_n28_N7S467C21D0Ev)();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
extern void ABISELECT(_ZTv0_n48_N7S467C21D1Ev,_ZTv0_n24_N7S467C21D1Ev)();
extern void ABISELECT(_ZThn40480_N7S467C21D1Ev,_ZThn26592_N7S467C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S467C21D0Ev,_ZTv0_n24_N7S467C21D0Ev)();
extern void ABISELECT(_ZThn40480_N7S467C21D0Ev,_ZThn26592_N7S467C21D0Ev)() __attribute__((weak));
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZTvn800_n48_N7S467C21D1Ev,_ZTvn496_n24_N7S467C21D1Ev)();
extern void ABISELECT(_ZTvn800_n48_N7S467C21D0Ev,_ZTvn496_n24_N7S467C21D0Ev)();
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
static  VTBL_ENTRY vtc_S467C21[] = {
  ABISELECT(40480,26592),
  ABISELECT(15024,9828),
  ABISELECT(14720,9628),
  ABISELECT(8480,5552),
  ABISELECT(1184,784),
  ABISELECT(736,468),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&_ZN7S467C21D1Ev,
  (VTBL_ENTRY)&_ZN7S467C21D0Ev,
  0,
  0,
  ABISELECT(-736,-468),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-1184,-784),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(-1184,-784),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C21D1Ev,_ZTv0_n32_N7S467C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C21D0Ev,_ZTv0_n32_N7S467C21D0Ev),
  ABISELECT(-1480,-984),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C21D1Ev,_ZTvn200_n32_N7S467C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C21D0Ev,_ZTvn200_n32_N7S467C21D0Ev),
  0,
  ABISELECT(-8480,-5552),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-14720,-9628),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  ABISELECT(800,496),
  ABISELECT(800,496),
  ABISELECT(496,296),
  ABISELECT(496,296),
  ABISELECT(-15024,-9828),
  ABISELECT(-304,-200),
  ABISELECT(-13840,-9044),
  ABISELECT(-14288,-9360),
  ABISELECT(-6544,-4276),
  ABISELECT(-15024,-9828),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S467C21D1Ev,_ZTv0_n28_N7S467C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S467C21D0Ev,_ZTv0_n28_N7S467C21D0Ev),
  ABISELECT(-15520,-10124),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  ABISELECT(-15824,-10324),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn800_n56_N7S467C21D1Ev,_ZTvn496_n28_N7S467C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn800_n56_N7S467C21D0Ev,_ZTvn496_n28_N7S467C21D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
  ABISELECT(-38928,-25528),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn23904_n56_N7S467C21D1Ev,_ZTvn15700_n28_N7S467C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn23904_n56_N7S467C21D0Ev,_ZTvn15700_n28_N7S467C21D0Ev),
  ABISELECT(-39008,-25572),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn23984_n56_N7S467C21D1Ev,_ZTvn15744_n28_N7S467C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn23984_n56_N7S467C21D0Ev,_ZTvn15744_n28_N7S467C21D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
  ABISELECT(800,496),
  ABISELECT(800,496),
  ABISELECT(496,296),
  ABISELECT(496,296),
  ABISELECT(-40480,-26592),
  ABISELECT(-39296,-25808),
  ABISELECT(-39744,-26124),
  ABISELECT(-32000,-21040),
  ABISELECT(-40480,-26592),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S467C21D1Ev,_ZTv0_n24_N7S467C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S467C21D0Ev,_ZTv0_n24_N7S467C21D0Ev),
  ABISELECT(-40976,-26888),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  ABISELECT(-41280,-27088),
  (VTBL_ENTRY)&(_ZTI7S467C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn800_n48_N7S467C21D1Ev,_ZTvn496_n24_N7S467C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn800_n48_N7S467C21D0Ev,_ZTvn496_n24_N7S467C21D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
};
extern VTBL_ENTRY _ZTV7S467C21[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C21[] = {
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C4__7S467C21[] = {
  0,
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C4__7S467C21[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN7S467C11D1Ev();
extern void _ZN7S467C11D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C11__7S467C21[] = {
  ABISELECT(-304,-200),
  ABISELECT(-13840,-9044),
  ABISELECT(-14288,-9360),
  ABISELECT(-6544,-4276),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN7S467C11D1Ev,
  (VTBL_ENTRY)&_ZN7S467C11D0Ev,
};
extern void _ZN7S467C12D1Ev();
extern void _ZN7S467C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C127S467C11__7S467C21[] = {
  ABISELECT(-13840,-9044),
  ABISELECT(-14288,-9360),
  ABISELECT(-6544,-4276),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN7S467C12D1Ev,
  (VTBL_ENTRY)&_ZN7S467C12D0Ev,
};
extern void _ZN7S467C13D1Ev();
extern void _ZN7S467C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C137S467C127S467C11__7S467C21[] = {
  ABISELECT(-13840,-9044),
  ABISELECT(-14288,-9360),
  ABISELECT(-6544,-4276),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN7S467C13D1Ev,
  (VTBL_ENTRY)&_ZN7S467C13D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C137S467C127S467C11__7S467C21[] = {
  0,
  ABISELECT(6544,4276),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C137S467C127S467C11__7S467C21[] = {
  0,
  0,
  ABISELECT(14288,9360),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C137S467C127S467C11__7S467C21[] = {
  ABISELECT(13840,9044),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(13840,9044),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C137S467C127S467C11__7S467C21[] = {
  ABISELECT(13544,8844),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C127S467C11__7S467C21[] = {
  0,
  ABISELECT(6544,4276),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C127S467C11__7S467C21[] = {
  0,
  0,
  ABISELECT(14288,9360),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C127S467C11__7S467C21[] = {
  ABISELECT(13840,9044),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(13840,9044),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C127S467C11__7S467C21[] = {
  ABISELECT(13544,8844),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C11__7S467C21[] = {
  0,
  ABISELECT(6544,4276),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C11__7S467C21[] = {
  0,
  0,
  ABISELECT(14288,9360),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C11D1Ev,_ZTv0_n32_N7S467C11D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S467C11D0Ev,_ZTv0_n32_N7S467C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C11__7S467C21[] = {
  ABISELECT(13840,9044),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(13840,9044),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C11D1Ev,_ZTv0_n32_N7S467C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C11D0Ev,_ZTv0_n32_N7S467C11D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C11D1Ev,_ZTvn200_n32_N7S467C11D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C11D0Ev,_ZTvn200_n32_N7S467C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C11__7S467C21[] = {
  ABISELECT(13544,8844),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C11D1Ev,_ZTvn200_n32_N7S467C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C11D0Ev,_ZTvn200_n32_N7S467C11D0Ev),
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S467C5__A2__7S467C11__7S467C21[] = {
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI7S467C11[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern void _ZN7S467C12D1Ev();
extern void _ZN7S467C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C12__A1__7S467C21[] = {
  ABISELECT(-39296,-25808),
  ABISELECT(-39744,-26124),
  ABISELECT(-32000,-21040),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN7S467C12D1Ev,
  (VTBL_ENTRY)&_ZN7S467C12D0Ev,
};
extern void _ZN7S467C13D1Ev();
extern void _ZN7S467C13D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C137S467C12__A1__7S467C21[] = {
  ABISELECT(-39296,-25808),
  ABISELECT(-39744,-26124),
  ABISELECT(-32000,-21040),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN7S467C13D1Ev,
  (VTBL_ENTRY)&_ZN7S467C13D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C137S467C12__A1__7S467C21[] = {
  0,
  ABISELECT(32000,21040),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C137S467C12__A1__7S467C21[] = {
  0,
  0,
  ABISELECT(39744,26124),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C137S467C12__A1__7S467C21[] = {
  ABISELECT(39296,25808),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(39296,25808),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D1Ev,_ZTv0_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C13D0Ev,_ZTv0_n32_N7S467C13D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C137S467C12__A1__7S467C21[] = {
  ABISELECT(39000,25608),
  (VTBL_ENTRY)&(_ZTI7S467C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D1Ev,_ZTvn200_n32_N7S467C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C13D0Ev,_ZTvn200_n32_N7S467C13D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C12__A1__7S467C21[] = {
  0,
  ABISELECT(32000,21040),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__7S467C12__A1__7S467C21[] = {
  0,
  0,
  ABISELECT(39744,26124),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C12__A1__7S467C21[] = {
  ABISELECT(39296,25808),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(7296,4768),
  ABISELECT(39296,25808),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D1Ev,_ZTv0_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S467C12D0Ev,_ZTv0_n32_N7S467C12D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C76S467C4__7S467C12__A1__7S467C21[] = {
  ABISELECT(39000,25608),
  (VTBL_ENTRY)&(_ZTI7S467C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D1Ev,_ZTvn200_n32_N7S467C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N7S467C12D0Ev,_ZTvn200_n32_N7S467C12D0Ev),
};
static  VTT_ENTRY vtt_S467C21[] = {
  {&(_ZTV7S467C21[8]),  8,98},
  {&(_ZTV7S467C21[14]),  14,98},
  {&(_ZTV7S467C21[24]),  24,98},
  {&(_ZTV7S467C21[36]),  36,98},
  {&(_ZTV7S467C21[31]),  31,98},
  {&(_ZTV7S467C21[41]),  41,98},
  {&(_ZTV7S467C21[54]),  54,98},
  {&(_ZTV7S467C21[58]),  58,98},
  {&(_ZTV7S467C21[62]),  62,98},
  {&(_ZTV7S467C21[68]),  68,98},
  {&(_ZTV7S467C21[72]),  72,98},
  {&(_ZTV7S467C21[86]),  86,98},
  {&(_ZTV7S467C21[90]),  90,98},
  {&(_ZTV7S467C21[94]),  94,98},
  {&(_tg__ZTV6S467C4__7S467C21[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C4__7S467C21[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C4__7S467C21[4]),  4,6},
  {&(_tg__ZTV7S467C11__7S467C21[6]),  6,8},
  {&(_tg__ZTV7S467C127S467C11__7S467C21[5]),  5,7},
  {&(_tg__ZTV7S467C137S467C127S467C11__7S467C21[5]),  5,7},
  {&(_tg__ZTV6S467C6__7S467C137S467C127S467C11__7S467C21[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C137S467C127S467C11__7S467C21[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C137S467C127S467C11__7S467C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C137S467C127S467C11__7S467C21[2]),  2,4},
  {&(_tg__ZTV6S467C6__7S467C127S467C11__7S467C21[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C127S467C11__7S467C21[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C127S467C11__7S467C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C127S467C11__7S467C21[2]),  2,4},
  {&(_tg__ZTV6S467C6__7S467C11__7S467C21[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C11__7S467C21[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C11__7S467C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C11__7S467C21[2]),  2,4},
  {&(_tg__ZTV6S467C5__A2__7S467C11__7S467C21[4]),  4,6},
  {&(_tg__ZTV7S467C12__A1__7S467C21[5]),  5,7},
  {&(_tg__ZTV7S467C137S467C12__A1__7S467C21[5]),  5,7},
  {&(_tg__ZTV6S467C6__7S467C137S467C12__A1__7S467C21[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C137S467C12__A1__7S467C21[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C137S467C12__A1__7S467C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C137S467C12__A1__7S467C21[2]),  2,4},
  {&(_tg__ZTV6S467C6__7S467C12__A1__7S467C21[3]),  3,4},
  {&(_tg__ZTV6S467C8__7S467C12__A1__7S467C21[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C12__A1__7S467C21[8]),  8,13},
  {&(_tg__ZTV6S468C76S467C4__7S467C12__A1__7S467C21[2]),  2,4},
};
extern VTBL_ENTRY _ZTI7S467C21[];
extern  VTBL_ENTRY _ZTV7S467C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C21[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S467C21D0Ev,_ZTv0_n24_N7S467C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40480_N7S467C21D0Ev,_ZThn26592_N7S467C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S467C21D1Ev,_ZTv0_n24_N7S467C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40480_N7S467C21D1Ev,_ZThn26592_N7S467C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S467C21D0Ev,_ZTv0_n28_N7S467C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15024_N7S467C21D0Ev,_ZThn9828_N7S467C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S467C21D1Ev,_ZTv0_n28_N7S467C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15024_N7S467C21D1Ev,_ZThn9828_N7S467C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C21D0Ev,_ZTv0_n32_N7S467C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S467C21D0Ev,_ZThn784_N7S467C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S467C21D1Ev,_ZTv0_n32_N7S467C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S467C21D1Ev,_ZThn784_N7S467C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S467C21 = {  "S467C21", // class name
  bases_S467C21, 19,
  &(vtc_S467C21[0]), // expected_vtbl_contents
  &(vtt_S467C21[0]), // expected_vtt_contents
  ABISELECT(64384,42292), // object size
  NSPAIRA(_ZTI7S467C21),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S467C21),98, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S467C21),43, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S467C1  : S467C2 , virtual S467C15 , S467C16 {
  __tsi64 s467c1f0;
  void *s467c1f1;
  long double s467c1f2;
  long double s467c1f3[6];
  int s467c1f4;
  int s467c1f5;
  long double s467c1f6;
  ::S467C21 s467c1f7;
  ::S468C14_nt s467c1f8[5];
  ::S467C12 s467c1f9;
  ::S467C12 s467c1f10;
  int s467c1f11;
  ::S468C14_nt s467c1f12;
  ~S467C1(); // tgen
  S467C1(); // tgen
};
//SIG(1 S467C1) C1{ BC2{ BC3{ BC4{ BC5{ v1 v2 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC6{ v3 FC5[8] FC5[2] Fp Fi FC7{ vd m Fp FL Fp[7]} FC5[5] Fp[5] FC5[5]} BC7 VBC8{ v4 v5 Fc FL[10] FD FC5 Fp Fs Fp Fi} v6 Fi:2 FD[7] Fp FC6 Fp Fi Fp[2] FC7 FC5 FD[8]} BC8 BC7 BC6 VBC5 vd v7 v8 FC7 Fi Fp[2] FL[2] Fi[2] Fp Fi FC8 Fi} BC4 VBC9{ vd v9 v10 Fi FC5 Fi[2] FU10{ m FL FD[10] FD Fs:0} FD Fi Fi FC8 FL Fi FC8} vd v11 Fp FD FD FC11{ BC12{ BC13{ VBC6 VBC8 VBC4 BC7 Fp FC7 FC5 Fs} BC5 BC9 FC3} VBC5 BC7 BC9 FC14{ m Fc} Fi Fi Fi:6 FC14 Fi}} VBC15{ BC7 BC8 BC4 Fp FC4 Fc[7] FC9 Fi Fc[4] Fp FC4 Fi Fi[7] Fi} BC16{ m FC12 FC17{ VBC6 BC15 BC18{ BC6 VBC5 VBC19{ BC6 BC7 VBC5 vd v12 Fi Fs Fs:1 Fp Fl FC6 Fi[2] Fc[3] Fi} BC12 vd Fp} Fp Fi[4] FC20{} FC12 FC14 Fi Fi:24 FC14 Fi FC20} Fi FC5 FC14 Fp Fi:15 Fi Fi} FL Fp FD FD[6] Fi Fi FD FC21{ VBC8 VBC4 VBC5 VBC11 VBC12 vd Fp FC5 Fp Fp Fi FC5 Fs Fi Fc[10] Fp Fi Fl[4] Fp} FC14[5] FC12 FC12 Fi FC14}


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

static void Test_S467C1()
{
  extern Class_Descriptor cd_S467C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26154,68661)];
    init_test(&cd_S467C1, buf);
    S467C1 *dp, &lv = *(dp=new (buf) S467C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(418448,274640), "sizeof(S467C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S467C1)");
    check_base_class_offset(lv, (S467C5*)(S467C4*)(S467C3*)(S467C2*), 0, "S467C1");
    check_base_class_offset(lv, (S467C6*)(S467C4*)(S467C3*)(S467C2*), ABISELECT(372688,244540), "S467C1");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S467C6*)(S467C4*)(S467C2*), ABISELECT(372688,244540), "S467C1");
    check_base_class_offset(lv, (S467C6*)(S467C4*)(S467C15*), ABISELECT(372688,244540), "S467C1");
    check_base_class_offset(lv, (S468C7*)(S467C4*)(S467C3*)(S467C2*), ABISELECT(296,200), "S467C1");
    check_base_class_offset(lv, (S467C8*)(S467C4*)(S467C3*)(S467C2*), ABISELECT(378928,248616), "S467C1");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S467C8*)(S467C4*)(S467C2*), ABISELECT(378928,248616), "S467C1");
    check_base_class_offset(lv, (S467C8*)(S467C4*)(S467C15*), ABISELECT(378928,248616), "S467C1");
    check_base_class_offset(lv, (S467C4*)(S467C3*)(S467C2*), 0, "S467C1");
    /*is_ambiguous_... S467C3::S467C8 */ AMB_check_base_class_offset(lv, (S467C8*)(S467C3*)(S467C2*), ABISELECT(7296,4768), "S467C1");
    /*is_ambiguous_... S467C3::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C3*)(S467C2*), ABISELECT(7744,5084), "S467C1");
    /*is_ambiguous_... S467C3::S467C6 */ AMB_check_base_class_offset(lv, (S467C6*)(S467C3*)(S467C2*), ABISELECT(7824,5128), "S467C1");
    /*is_ambiguous_... S467C3::S467C5 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C3*)(S467C2*), ABISELECT(379376,248932), "S467C1");
    check_base_class_offset(lv, (S467C3*)(S467C2*), 0, "S467C1");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S467C5*)(S467C4*)(S467C2*), ABISELECT(14672,9612), "S467C1");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C4*)(S467C2*), ABISELECT(14968,9812), "S467C1");
    /*is_ambiguous_... S467C2::S467C4 */ AMB_check_base_class_offset(lv, (S467C4*)(S467C2*), ABISELECT(14672,9612), "S467C1");
    check_base_class_offset(lv, (S467C9*)(S467C2*), ABISELECT(379680,249132), "S467C1");
    check_base_class_offset(lv, (S467C2*), 0, "S467C1");
    /*is_ambiguous_... S467C15::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S467C15*), ABISELECT(381120,250132), "S467C1");
    /*is_ambiguous_... S467C15::S467C8 */ AMB_check_base_class_offset(lv, (S467C8*)(S467C15*), ABISELECT(381200,250176), "S467C1");
    check_base_class_offset(lv, (S467C5*)(S467C4*)(S467C15*), ABISELECT(381648,250492), "S467C1");
    check_base_class_offset(lv, (S468C7*)(S467C4*)(S467C15*), ABISELECT(381944,250692), "S467C1");
    check_base_class_offset(lv, (S467C4*)(S467C15*), ABISELECT(381648,250492), "S467C1");
    check_base_class_offset(lv, (S467C15*), ABISELECT(381120,250132), "S467C1");
    check_base_class_offset(lv, (S467C16*), ABISELECT(61760,40532), "S467C1");
    check_field_offset(lv, s467c1f0, ABISELECT(232336,152396), "S467C1.s467c1f0");
    check_field_offset(lv, s467c1f1, ABISELECT(232344,152404), "S467C1.s467c1f1");
    check_field_offset(lv, s467c1f2, ABISELECT(232352,152408), "S467C1.s467c1f2");
    check_field_offset(lv, s467c1f3, ABISELECT(232368,152420), "S467C1.s467c1f3");
    check_field_offset(lv, s467c1f4, ABISELECT(232464,152492), "S467C1.s467c1f4");
    check_field_offset(lv, s467c1f5, ABISELECT(232468,152496), "S467C1.s467c1f5");
    check_field_offset(lv, s467c1f6, ABISELECT(232480,152500), "S467C1.s467c1f6");
    check_field_offset(lv, s467c1f7, ABISELECT(232496,152512), "S467C1.s467c1f7");
    check_field_offset(lv, s467c1f8, ABISELECT(296880,194804), "S467C1.s467c1f8");
    check_field_offset(lv, s467c1f9, ABISELECT(296896,194812), "S467C1.s467c1f9");
    check_field_offset(lv, s467c1f10, ABISELECT(334784,219672), "S467C1.s467c1f10");
    check_field_offset(lv, s467c1f11, ABISELECT(372672,244532), "S467C1.s467c1f11");
    check_field_offset(lv, s467c1f12, ABISELECT(372676,244536), "S467C1.s467c1f12");
    test_class_info(&lv, &cd_S467C1);
    dp->~S467C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS467C1(Test_S467C1, "S467C1", ABISELECT(418448,274640));

#else // __cplusplus

extern void _ZN6S467C1C1Ev();
extern void _ZN6S467C1D1Ev();
Name_Map name_map_S467C1[] = {
  NSPAIR(_ZN6S467C1C1Ev),
  NSPAIR(_ZN6S467C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C6;
extern VTBL_ENTRY _ZTI6S467C6[];
extern  VTBL_ENTRY _ZTV6S467C6[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S467C3;
extern VTBL_ENTRY _ZTI6S467C3[];
extern  VTBL_ENTRY _ZTV6S467C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C3[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S467C9;
extern VTBL_ENTRY _ZTI6S467C9[];
extern  VTBL_ENTRY _ZTV6S467C9[];
extern Class_Descriptor cd_S467C2;
extern VTBL_ENTRY _ZTI6S467C2[];
extern  VTBL_ENTRY _ZTV6S467C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C2[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C8;
extern VTBL_ENTRY _ZTI6S467C8[];
extern  VTBL_ENTRY _ZTV6S467C8[];
extern Class_Descriptor cd_S467C5;
extern VTBL_ENTRY _ZTI6S467C5[];
extern  VTBL_ENTRY _ZTV6S467C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S467C4;
extern VTBL_ENTRY _ZTI6S467C4[];
extern  VTBL_ENTRY _ZTV6S467C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C4[];
extern Class_Descriptor cd_S467C15;
extern VTBL_ENTRY _ZTI7S467C15[];
extern  VTBL_ENTRY _ZTV7S467C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S467C15[];
extern Class_Descriptor cd_S467C16;
extern VTBL_ENTRY _ZTI7S467C16[];
static Base_Class bases_S467C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S467C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S467C6,    ABISELECT(372688,244540), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(296,200), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S467C8,    ABISELECT(378928,248616), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S467C4,    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
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S467C8,    ABISELECT(7296,4768), //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
    14, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(7744,5084), //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
    15, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S467C6,    ABISELECT(7824,5128), //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
    16, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(379376,248932), //bcp->offset
    53, //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
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S467C3,    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
    17, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(14672,9612), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(14968,9812), //bcp->offset
    39, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(14672,9612), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S467C9,    ABISELECT(379680,249132), //bcp->offset
    59, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S467C2,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C7,    ABISELECT(381120,250132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S467C8,    ABISELECT(381200,250176), //bcp->offset
    80, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S467C5,    ABISELECT(381648,250492), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(381944,250692), //bcp->offset
    93, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S467C4,    ABISELECT(381648,250492), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S467C15,    ABISELECT(381120,250132), //bcp->offset
    68, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S467C16,    ABISELECT(61760,40532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S467C1[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C1D1Ev();
extern void _ZN6S467C1D0Ev();
extern void _ZN6S467C32v7Ev();
extern void _ZN6S467C32v8Ev();
extern void _ZN6S467C23v11Ev();
extern void ABISELECT(_ZThn296_N6S467C1D1Ev,_ZThn200_N6S467C1D1Ev)();
extern void ABISELECT(_ZThn296_N6S467C1D0Ev,_ZThn200_N6S467C1D0Ev)();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void ABISELECT(_ZThn7744_N6S467C1D1Ev,_ZThn5084_N6S467C1D1Ev)();
extern void ABISELECT(_ZThn7744_N6S467C1D0Ev,_ZThn5084_N6S467C1D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZThn14672_N6S467C1D1Ev,_ZThn9612_N6S467C1D1Ev)();
extern void ABISELECT(_ZThn14672_N6S467C1D0Ev,_ZThn9612_N6S467C1D0Ev)();
extern void ABISELECT(_ZThn14968_N6S467C1D1Ev,_ZThn9812_N6S467C1D1Ev)();
extern void ABISELECT(_ZThn14968_N6S467C1D0Ev,_ZThn9812_N6S467C1D0Ev)();
extern void _ZN6S467C62v3Ev();
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N6S467C1D1Ev,_ZTv0_n12_N6S467C1D1Ev)();
extern void ABISELECT(_ZThn379680_N6S467C1D1Ev,_ZThn249132_N6S467C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S467C1D0Ev,_ZTv0_n12_N6S467C1D0Ev)();
extern void ABISELECT(_ZThn379680_N6S467C1D0Ev,_ZThn249132_N6S467C1D0Ev)() __attribute__((weak));
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
extern void ABISELECT(_ZTv0_n40_N6S467C1D1Ev,_ZTv0_n20_N6S467C1D1Ev)();
extern void ABISELECT(_ZThn381120_N6S467C1D1Ev,_ZThn250132_N6S467C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S467C1D0Ev,_ZTv0_n20_N6S467C1D0Ev)();
extern void ABISELECT(_ZThn381120_N6S467C1D0Ev,_ZThn250132_N6S467C1D0Ev)() __attribute__((weak));
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZTvn528_n40_N6S467C1D1Ev,_ZTvn360_n20_N6S467C1D1Ev)();
extern void ABISELECT(_ZTvn528_n40_N6S467C1D0Ev,_ZTvn360_n20_N6S467C1D0Ev)();
extern void ABISELECT(_ZTvn824_n40_N6S467C1D1Ev,_ZTvn560_n20_N6S467C1D1Ev)();
extern void ABISELECT(_ZTvn824_n40_N6S467C1D0Ev,_ZTvn560_n20_N6S467C1D0Ev)();
static  VTBL_ENTRY vtc_S467C1[] = {
  ABISELECT(381120,250132),
  ABISELECT(379680,249132),
  ABISELECT(379376,248932),
  ABISELECT(378928,248616),
  ABISELECT(372688,244540),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C1D1Ev,
  (VTBL_ENTRY)&_ZN6S467C1D0Ev,
  (VTBL_ENTRY)&_ZN6S467C32v7Ev,
  (VTBL_ENTRY)&_ZN6S467C32v8Ev,
  (VTBL_ENTRY)&_ZN6S467C23v11Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S467C1D1Ev,_ZThn200_N6S467C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N6S467C1D0Ev,_ZThn200_N6S467C1D0Ev),
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-7744,-5084),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S467C1D1Ev,_ZThn5084_N6S467C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N6S467C1D0Ev,_ZThn5084_N6S467C1D0Ev),
  ABISELECT(-7824,-5128),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  ABISELECT(364256,239004),
  ABISELECT(358016,234928),
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S467C1D1Ev,_ZThn9612_N6S467C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S467C1D0Ev,_ZThn9612_N6S467C1D0Ev),
  ABISELECT(-14968,-9812),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn14968_N6S467C1D1Ev,_ZThn9812_N6S467C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14968_N6S467C1D0Ev,_ZThn9812_N6S467C1D0Ev),
  0,
  ABISELECT(-372688,-244540),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
  0,
  0,
  ABISELECT(-378928,-248616),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  0,
  0,
  ABISELECT(-379376,-248932),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  0,
  0,
  ABISELECT(-379680,-249132),
  ABISELECT(-379680,-249132),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S467C1D1Ev,_ZTv0_n12_N6S467C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S467C1D0Ev,_ZTv0_n12_N6S467C1D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
  ABISELECT(528,360),
  ABISELECT(528,360),
  ABISELECT(528,360),
  ABISELECT(80,44),
  ABISELECT(80,44),
  ABISELECT(-381120,-250132),
  ABISELECT(-2192,-1516),
  ABISELECT(-8432,-5592),
  ABISELECT(-381120,-250132),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S467C1D1Ev,_ZTv0_n20_N6S467C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S467C1D0Ev,_ZTv0_n20_N6S467C1D0Ev),
  ABISELECT(-381200,-250176),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
  ABISELECT(-2720,-1876),
  ABISELECT(-8960,-5952),
  ABISELECT(-381648,-250492),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn528_n40_N6S467C1D1Ev,_ZTvn360_n20_N6S467C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn528_n40_N6S467C1D0Ev,_ZTvn360_n20_N6S467C1D0Ev),
  ABISELECT(-381944,-250692),
  (VTBL_ENTRY)&(_ZTI6S467C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn824_n40_N6S467C1D1Ev,_ZTvn560_n20_N6S467C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn824_n40_N6S467C1D0Ev,_ZTvn560_n20_N6S467C1D0Ev),
};
extern VTBL_ENTRY _ZTV6S467C1[];
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C2D1Ev();
extern void _ZN6S467C2D0Ev();
extern void _ZN6S467C32v7Ev();
extern void _ZN6S467C32v8Ev();
extern void _ZN6S467C23v11Ev();
static  VTBL_ENTRY _tg__ZTV6S467C2__6S467C1[] = {
  ABISELECT(379680,249132),
  ABISELECT(379376,248932),
  ABISELECT(378928,248616),
  ABISELECT(372688,244540),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C2D1Ev,
  (VTBL_ENTRY)&_ZN6S467C2D0Ev,
  (VTBL_ENTRY)&_ZN6S467C32v7Ev,
  (VTBL_ENTRY)&_ZN6S467C32v8Ev,
  (VTBL_ENTRY)&_ZN6S467C23v11Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C3D1Ev();
extern void _ZN6S467C3D0Ev();
extern void _ZN6S467C32v7Ev();
extern void _ZN6S467C32v8Ev();
static  VTBL_ENTRY _tg__ZTV6S467C36S467C2__6S467C1[] = {
  ABISELECT(379376,248932),
  ABISELECT(378928,248616),
  ABISELECT(372688,244540),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C3D1Ev,
  (VTBL_ENTRY)&_ZN6S467C3D0Ev,
  (VTBL_ENTRY)&_ZN6S467C32v7Ev,
  (VTBL_ENTRY)&_ZN6S467C32v8Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C46S467C36S467C2__6S467C1[] = {
  ABISELECT(378928,248616),
  ABISELECT(372688,244540),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C46S467C36S467C2__6S467C1[] = {
  0,
  ABISELECT(-372688,-244540),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C46S467C36S467C2__6S467C1[] = {
  0,
  0,
  ABISELECT(-378928,-248616),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C36S467C2__6S467C1[] = {
  0,
  ABISELECT(-372688,-244540),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C36S467C2__6S467C1[] = {
  0,
  0,
  ABISELECT(-378928,-248616),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S467C5__A1__6S467C36S467C2__6S467C1[] = {
  0,
  0,
  ABISELECT(-379376,-248932),
  (VTBL_ENTRY)&(_ZTI6S467C3[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C46S467C2__A1__6S467C1[] = {
  ABISELECT(364256,239004),
  ABISELECT(358016,234928),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C46S467C2__A1__6S467C1[] = {
  0,
  ABISELECT(-358016,-234928),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C46S467C2__A1__6S467C1[] = {
  0,
  0,
  ABISELECT(-364256,-239004),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C2__6S467C1[] = {
  0,
  ABISELECT(-372688,-244540),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C2__6S467C1[] = {
  0,
  0,
  ABISELECT(-378928,-248616),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
static  VTBL_ENTRY _tg__ZTV6S467C5__A1__6S467C2__6S467C1[] = {
  0,
  0,
  ABISELECT(-379376,-248932),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZThn14672_N6S467C2D1Ev,_ZThn9612_N6S467C2D1Ev)();
extern void ABISELECT(_ZThn14672_N6S467C2D0Ev,_ZThn9612_N6S467C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S467C4__A1__6S467C2__6S467C1[] = {
  ABISELECT(364256,239004),
  ABISELECT(358016,234928),
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S467C2D1Ev,_ZThn9612_N6S467C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14672_N6S467C2D0Ev,_ZThn9612_N6S467C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N6S467C2D1Ev,_ZTv0_n12_N6S467C2D1Ev)();
extern void ABISELECT(_ZThn379680_N6S467C2D1Ev,_ZThn249132_N6S467C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S467C2D0Ev,_ZTv0_n12_N6S467C2D0Ev)();
extern void ABISELECT(_ZThn379680_N6S467C2D0Ev,_ZThn249132_N6S467C2D0Ev)() __attribute__((weak));
extern void _ZN6S467C92v9Ev();
extern void _ZN6S467C93v10Ev();
static  VTBL_ENTRY _tg__ZTV6S467C9__6S467C2__6S467C1[] = {
  0,
  0,
  ABISELECT(-379680,-249132),
  ABISELECT(-379680,-249132),
  (VTBL_ENTRY)&(_ZTI6S467C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S467C2D1Ev,_ZTv0_n12_N6S467C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S467C2D0Ev,_ZTv0_n12_N6S467C2D0Ev),
  (VTBL_ENTRY)&_ZN6S467C92v9Ev,
  (VTBL_ENTRY)&_ZN6S467C93v10Ev,
};
extern void _ZN7S467C15D1Ev();
extern void _ZN7S467C15D0Ev();
static  VTBL_ENTRY _tg__ZTV7S467C15__6S467C1[] = {
  ABISELECT(-2192,-1516),
  ABISELECT(-8432,-5592),
  0,
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN7S467C15D1Ev,
  (VTBL_ENTRY)&_ZN7S467C15D0Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void _ZN6S467C4D1Ev();
extern void _ZN6S467C4D0Ev();
static  VTBL_ENTRY _tg__ZTV6S467C47S467C15__A2__6S467C1[] = {
  ABISELECT(-2720,-1876),
  ABISELECT(-8960,-5952),
  0,
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&_ZN6S467C4D1Ev,
  (VTBL_ENTRY)&_ZN6S467C4D0Ev,
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__6S467C47S467C15__A2__6S467C1[] = {
  0,
  ABISELECT(8960,5952),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__6S467C47S467C15__A2__6S467C1[] = {
  0,
  0,
  ABISELECT(2720,1876),
  (VTBL_ENTRY)&(_ZTI6S467C4[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
extern void _ZN6S467C52v1Ev();
extern void _ZN6S467C52v2Ev();
extern void _ZN6S467C42v6Ev();
extern void ABISELECT(_ZThn528_N7S467C15D1Ev,_ZThn360_N7S467C15D1Ev)();
extern void ABISELECT(_ZThn528_N7S467C15D0Ev,_ZThn360_N7S467C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S467C4__7S467C15__6S467C1[] = {
  ABISELECT(-2720,-1876),
  ABISELECT(-8960,-5952),
  ABISELECT(-528,-360),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C52v1Ev,
  (VTBL_ENTRY)&_ZN6S467C52v2Ev,
  (VTBL_ENTRY)&_ZN6S467C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S467C15D1Ev,_ZThn360_N7S467C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn528_N7S467C15D0Ev,_ZThn360_N7S467C15D0Ev),
};
extern void _ZN6S467C62v3Ev();
static  VTBL_ENTRY _tg__ZTV6S467C6__7S467C15__6S467C1[] = {
  0,
  ABISELECT(8432,5592),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C62v3Ev,
};
extern void _ZN6S467C82v4Ev();
extern void _ZN6S467C82v5Ev();
static  VTBL_ENTRY _tg__ZTV6S467C8__A1__7S467C15__6S467C1[] = {
  0,
  0,
  ABISELECT(2192,1516),
  (VTBL_ENTRY)&(_ZTI7S467C15[0]),
  (VTBL_ENTRY)&_ZN6S467C82v4Ev,
  (VTBL_ENTRY)&_ZN6S467C82v5Ev,
};
static  VTT_ENTRY vtt_S467C1[] = {
  {&(_ZTV6S467C1[7]),  7,97},
  {&(_tg__ZTV6S467C2__6S467C1[6]),  6,14},
  {&(_tg__ZTV6S467C36S467C2__6S467C1[5]),  5,12},
  {&(_tg__ZTV6S467C46S467C36S467C2__6S467C1[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C46S467C36S467C2__6S467C1[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C46S467C36S467C2__6S467C1[4]),  4,6},
  {&(_tg__ZTV6S467C6__6S467C36S467C2__6S467C1[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C36S467C2__6S467C1[4]),  4,6},
  {&(_tg__ZTV6S467C5__A1__6S467C36S467C2__6S467C1[4]),  4,6},
  {&(_tg__ZTV6S467C46S467C2__A1__6S467C1[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C46S467C2__A1__6S467C1[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C46S467C2__A1__6S467C1[4]),  4,6},
  {&(_tg__ZTV6S467C6__6S467C2__6S467C1[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C2__6S467C1[4]),  4,6},
  {&(_tg__ZTV6S467C5__A1__6S467C2__6S467C1[4]),  4,6},
  {&(_tg__ZTV6S467C4__A1__6S467C2__6S467C1[4]),  4,9},
  {&(_tg__ZTV6S467C9__6S467C2__6S467C1[5]),  5,9},
  {&(_ZTV6S467C1[46]),  46,97},
  {&(_ZTV6S467C1[51]),  51,97},
  {&(_ZTV6S467C1[57]),  57,97},
  {&(_ZTV6S467C1[34]),  34,97},
  {&(_ZTV6S467C1[64]),  64,97},
  {&(_ZTV6S467C1[78]),  78,97},
  {&(_ZTV6S467C1[82]),  82,97},
  {&(_ZTV6S467C1[88]),  88,97},
  {&(_ZTV6S467C1[95]),  95,97},
  {&(_tg__ZTV7S467C15__6S467C1[4]),  4,6},
  {&(_tg__ZTV6S467C47S467C15__A2__6S467C1[4]),  4,9},
  {&(_tg__ZTV6S467C6__6S467C47S467C15__A2__6S467C1[3]),  3,4},
  {&(_tg__ZTV6S467C8__6S467C47S467C15__A2__6S467C1[4]),  4,6},
  {&(_tg__ZTV6S467C4__7S467C15__6S467C1[4]),  4,9},
  {&(_tg__ZTV6S467C6__7S467C15__6S467C1[3]),  3,4},
  {&(_tg__ZTV6S467C8__A1__7S467C15__6S467C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI6S467C1[];
extern  VTBL_ENTRY _ZTV6S467C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S467C1[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S467C2D0Ev,_ZTv0_n12_N6S467C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn379680_N6S467C2D0Ev,_ZThn249132_N6S467C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S467C2D1Ev,_ZTv0_n12_N6S467C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn379680_N6S467C2D1Ev,_ZThn249132_N6S467C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S467C1D0Ev,_ZTv0_n20_N6S467C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn381120_N6S467C1D0Ev,_ZThn250132_N6S467C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S467C1D1Ev,_ZTv0_n20_N6S467C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn381120_N6S467C1D1Ev,_ZThn250132_N6S467C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S467C1D0Ev,_ZTv0_n12_N6S467C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn379680_N6S467C1D0Ev,_ZThn249132_N6S467C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S467C1D1Ev,_ZTv0_n12_N6S467C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn379680_N6S467C1D1Ev,_ZThn249132_N6S467C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S467C1 = {  "S467C1", // class name
  bases_S467C1, 22,
  &(vtc_S467C1[0]), // expected_vtbl_contents
  &(vtt_S467C1[0]), // expected_vtt_contents
  ABISELECT(418448,274640), // object size
  NSPAIRA(_ZTI6S467C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S467C1),97, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S467C1),33, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C3  {
  long double s7394c3f0[2];
  char s7394c3f1[8];
  void  mf7394c3(); // _ZN7S7394C38mf7394c3Ev
};
//SIG(-1 S7394C3) C1{ m FD[2] Fc[8]}


void  S7394C3 ::mf7394c3(){}

static void Test_S7394C3()
{
  {
    init_simple_test("S7394C3");
    S7394C3 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S7394C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C3)");
    check_field_offset(lv, s7394c3f0, 0, "S7394C3.s7394c3f0");
    check_field_offset(lv, s7394c3f1, ABISELECT(32,24), "S7394C3.s7394c3f1");
  }
}
static Arrange_To_Call_Me vS7394C3(Test_S7394C3, "S7394C3", ABISELECT(48,32));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S7394C3[];
VTBL_ENTRY *P__ZTI7S7394C3 = _ZTI7S7394C3; 
Class_Descriptor cd_S7394C3 = {  "S7394C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S7394C3),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  S7394C2  : virtual S7394C3 {
  __tsi64 s7394c2f0[4];
  ::S7394C3 s7394c2f1;
  int s7394c2f2;
  ::S7394C3 s7394c2f3;
  __tsi64 s7394c2f4;
  void *s7394c2f5;
  ::S7394C3 s7394c2f6;
  void *s7394c2f7[4];
  ~S7394C2(); // tgen
  S7394C2(); // tgen
};
//SIG(-1 S7394C2) C1{ VBC2{ m FD[2] Fc[8]} FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]}


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

static void Test_S7394C2()
{
  extern Class_Descriptor cd_S7394C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S7394C2, buf);
    S7394C2 *dp, &lv = *(dp=new (buf) S7394C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S7394C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C2)");
    check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S7394C2");
    check_field_offset(lv, s7394c2f0, ABISELECT(8,4), "S7394C2.s7394c2f0");
    check_field_offset(lv, s7394c2f1, ABISELECT(48,36), "S7394C2.s7394c2f1");
    check_field_offset(lv, s7394c2f2, ABISELECT(96,68), "S7394C2.s7394c2f2");
    check_field_offset(lv, s7394c2f3, ABISELECT(112,72), "S7394C2.s7394c2f3");
    check_field_offset(lv, s7394c2f4, ABISELECT(160,104), "S7394C2.s7394c2f4");
    check_field_offset(lv, s7394c2f5, ABISELECT(168,112), "S7394C2.s7394c2f5");
    check_field_offset(lv, s7394c2f6, ABISELECT(176,116), "S7394C2.s7394c2f6");
    check_field_offset(lv, s7394c2f7, ABISELECT(224,148), "S7394C2.s7394c2f7");
    test_class_info(&lv, &cd_S7394C2);
    dp->~S7394C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C2(Test_S7394C2, "S7394C2", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN7S7394C2C1Ev();
extern void _ZN7S7394C2D1Ev();
Name_Map name_map_S7394C2[] = {
  NSPAIR(_ZN7S7394C2C1Ev),
  NSPAIR(_ZN7S7394C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
static Base_Class bases_S7394C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7394C2[];
static  VTBL_ENTRY vtc_S7394C2[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern VTBL_ENTRY _ZTV7S7394C2[];
static  VTT_ENTRY vtt_S7394C2[] = {
  {&(_ZTV7S7394C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
Class_Descriptor cd_S7394C2 = {  "S7394C2", // class name
  bases_S7394C2, 1,
  &(vtc_S7394C2[0]), // expected_vtbl_contents
  &(vtt_S7394C2[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI7S7394C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7394C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7394C2),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

union  S7394C6  {
  long double s7394c6f0;
  __tsi64 s7394c6f1;
  long double s7394c6f2;
  __tsi64 s7394c6f3;
  int s7394c6f4;
  void  mf7394c6(); // _ZN7S7394C68mf7394c6Ev
};
//SIG(1 S7394C6) U1{ m FD FL FD FL Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7394C5  {
  ::S7394C2 s7394c5f0;
  void *s7394c5f1;
  __tsi64 s7394c5f2;
  int s7394c5f3;
  void *s7394c5f4;
  ::S7394C6 s7394c5f5[8];
  char s7394c5f6;
  void *s7394c5f7;
  virtual  ~S7394C5(); // _ZN7S7394C5D1Ev
  virtual void  v1(); // _ZN7S7394C52v1Ev
  virtual void  v2(); // _ZN7S7394C52v2Ev
  S7394C5(); // tgen
};
//SIG(-1 S7394C5) C1{ vd v1 v2 FC2{ VBC3{ m FD[2] Fc[8]} FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} Fp FL Fi Fp FU4{ m FD FL FD FL Fi}[8] Fc Fp}


 S7394C5 ::~S7394C5(){ note_dtor("S7394C5", this);}
void  S7394C5 ::v1(){vfunc_called(this, "_ZN7S7394C52v1Ev");}
void  S7394C5 ::v2(){vfunc_called(this, "_ZN7S7394C52v2Ev");}
S7394C5 ::S7394C5(){ note_ctor("S7394C5", this);} // tgen

static void Test_S7394C5()
{
  extern Class_Descriptor cd_S7394C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,82)];
    init_test(&cd_S7394C5, buf);
    S7394C5 *dp, &lv = *(dp=new (buf) S7394C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,324), "sizeof(S7394C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C5)");
    check_field_offset(lv, s7394c5f0, ABISELECT(16,4), "S7394C5.s7394c5f0");
    check_field_offset(lv, s7394c5f1, ABISELECT(320,200), "S7394C5.s7394c5f1");
    check_field_offset(lv, s7394c5f2, ABISELECT(328,204), "S7394C5.s7394c5f2");
    check_field_offset(lv, s7394c5f3, ABISELECT(336,212), "S7394C5.s7394c5f3");
    check_field_offset(lv, s7394c5f4, ABISELECT(344,216), "S7394C5.s7394c5f4");
    check_field_offset(lv, s7394c5f5, ABISELECT(352,220), "S7394C5.s7394c5f5");
    check_field_offset(lv, s7394c5f6, ABISELECT(480,316), "S7394C5.s7394c5f6");
    check_field_offset(lv, s7394c5f7, ABISELECT(488,320), "S7394C5.s7394c5f7");
    test_class_info(&lv, &cd_S7394C5);
    dp->~S7394C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C5(Test_S7394C5, "S7394C5", ABISELECT(496,324));

#else // __cplusplus

extern void _ZN7S7394C5C1Ev();
extern void _ZN7S7394C5D1Ev();
Name_Map name_map_S7394C5[] = {
  NSPAIR(_ZN7S7394C5C1Ev),
  NSPAIR(_ZN7S7394C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7394C5[];
extern void _ZN7S7394C5D1Ev();
extern void _ZN7S7394C5D0Ev();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY vtc_S7394C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C5[0]),
  (VTBL_ENTRY)&_ZN7S7394C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
Class_Descriptor cd_S7394C5 = {  "S7394C5", // class name
  0,0,//no base classes
  &(vtc_S7394C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,324), // object size
  NSPAIRA(_ZTI7S7394C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7394C5),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  S7394C8  : S7394C3 , S7394C2 , virtual S7394C5 {
  void *s7394c8f0[4];
  __tsi64 s7394c8f1;
  void *s7394c8f2[3];
  ::S7394C6 s7394c8f3;
  ::S7394C5 s7394c8f4;
  long double s7394c8f5;
  short  :0;
  ::S7394C3 s7394c8f7;
  long double s7394c8f8;
  void *s7394c8f9;
  virtual  ~S7394C8(); // _ZN7S7394C8D2Ev
  virtual void  v3(); // _ZN7S7394C82v3Ev
  S7394C8(); // tgen
};
//SIG(-1 S7394C8) C1{ BC2{ m FD[2] Fc[8]} BC3{ VBC2 FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]} VBC4{ vd v2 v3 FC3 Fp FL Fi Fp FU5{ m FD FL FD FL Fi}[8] Fc Fp} vd v1 Fp[4] FL Fp[3] FU5 FC4 FD Fs:0 FC2 FD Fp}


 S7394C8 ::~S7394C8(){ note_dtor("S7394C8", this);}
void  S7394C8 ::v3(){vfunc_called(this, "_ZN7S7394C82v3Ev");}
S7394C8 ::S7394C8(){ note_ctor("S7394C8", this);} // tgen

static void Test_S7394C8()
{
  extern Class_Descriptor cd_S7394C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,247)];
    init_test(&cd_S7394C8, buf);
    S7394C8 *dp, &lv = *(dp=new (buf) S7394C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,984), "sizeof(S7394C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C8)");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S7394C8");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*), ABISELECT(976,628), "S7394C8");
    check_base_class_offset(lv, (S7394C2*), 0, "S7394C8");
    check_base_class_offset(lv, (S7394C5*), ABISELECT(1024,660), "S7394C8");
    check_field_offset(lv, s7394c8f0, ABISELECT(304,196), "S7394C8.s7394c8f0");
    check_field_offset(lv, s7394c8f1, ABISELECT(336,212), "S7394C8.s7394c8f1");
    check_field_offset(lv, s7394c8f2, ABISELECT(344,220), "S7394C8.s7394c8f2");
    check_field_offset(lv, s7394c8f3, ABISELECT(368,232), "S7394C8.s7394c8f3");
    check_field_offset(lv, s7394c8f4, ABISELECT(384,244), "S7394C8.s7394c8f4");
    check_field_offset(lv, s7394c8f5, ABISELECT(880,568), "S7394C8.s7394c8f5");
    check_field_offset(lv, s7394c8f7, ABISELECT(896,580), "S7394C8.s7394c8f7");
    check_field_offset(lv, s7394c8f8, ABISELECT(944,612), "S7394C8.s7394c8f8");
    check_field_offset(lv, s7394c8f9, ABISELECT(960,624), "S7394C8.s7394c8f9");
    test_class_info(&lv, &cd_S7394C8);
    dp->~S7394C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C8(Test_S7394C8, "S7394C8", ABISELECT(1520,984));

#else // __cplusplus

extern void _ZN7S7394C8C1Ev();
extern void _ZN7S7394C8D2Ev();
Name_Map name_map_S7394C8[] = {
  NSPAIR(_ZN7S7394C8C1Ev),
  NSPAIR(_ZN7S7394C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
static Base_Class bases_S7394C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C3,    ABISELECT(976,628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    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_S7394C5,    ABISELECT(1024,660), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7394C8[];
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY vtc_S7394C8[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S7394C8[];
static  VTBL_ENTRY _tg__ZTV7S7394C2__7S7394C8[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
static  VTT_ENTRY vtt_S7394C8[] = {
  {&(_ZTV7S7394C8[4]),  4,16},
  {&(_tg__ZTV7S7394C2__7S7394C8[3]),  3,3},
  {&(_ZTV7S7394C8[12]),  12,16},
};
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C8 = {  "S7394C8", // class name
  bases_S7394C8, 4,
  &(vtc_S7394C8[0]), // expected_vtbl_contents
  &(vtt_S7394C8[0]), // expected_vtt_contents
  ABISELECT(1520,984), // object size
  NSPAIRA(_ZTI7S7394C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7394C8),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7394C8),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C9  {
  __tsi64 s7394c9f0[4];
  unsigned char s7394c9f1:1;
  __tsi64 s7394c9f2[2];
  __tsi64 s7394c9f3:4;
  void  mf7394c9(); // _ZN7S7394C98mf7394c9Ev
};
//SIG(-1 S7394C9) C1{ m FL[4] Fc:1 FL[2] FL:4}


void  S7394C9 ::mf7394c9(){}

static void Test_S7394C9()
{
  {
    init_simple_test("S7394C9");
    static S7394C9 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S7394C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7394C9)");
    check_field_offset(lv, s7394c9f0, 0, "S7394C9.s7394c9f0");
    set_bf_and_test(lv, s7394c9f1, 32, 0, 1, 1, "S7394C9");
    check_field_offset(lv, s7394c9f2, ABISELECT(40,36), "S7394C9.s7394c9f2");
    set_bf_and_test(lv, s7394c9f3, ABISELECT(56,52), 0, 4, 1, "S7394C9");
    set_bf_and_test(lv, s7394c9f3, ABISELECT(56,52), 0, 4, hide_sll(1LL<<3), "S7394C9");
  }
}
static Arrange_To_Call_Me vS7394C9(Test_S7394C9, "S7394C9", ABISELECT(64,56));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S7394C9[];
VTBL_ENTRY *P__ZTI7S7394C9 = _ZTI7S7394C9; 
Class_Descriptor cd_S7394C9 = {  "S7394C9", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(64,56), // object size
  NSPAIRA(_ZTI7S7394C9),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  S7394C7  : virtual S7394C8 , S7394C9 {
  long double s7394c7f0;
  __tsi64 s7394c7f1;
  __tsi64 s7394c7f2:13;
  virtual  ~S7394C7(); // _ZN7S7394C7D2Ev
  S7394C7(); // tgen
};
//SIG(-1 S7394C7) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v1 v2 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} BC7{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13}


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

static void Test_S7394C7()
{
  extern Class_Descriptor cd_S7394C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,268)];
    init_test(&cd_S7394C7, buf);
    S7394C7 *dp, &lv = *(dp=new (buf) S7394C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,1068), "sizeof(S7394C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C7)");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(368,248), "S7394C7");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(1088,712), "S7394C7");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(112,84), "S7394C7");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(1136,744), "S7394C7");
    check_base_class_offset(lv, (S7394C8*), ABISELECT(112,84), "S7394C7");
    check_base_class_offset(lv, (S7394C9*), ABISELECT(8,4), "S7394C7");
    check_field_offset(lv, s7394c7f0, ABISELECT(80,60), "S7394C7.s7394c7f0");
    check_field_offset(lv, s7394c7f1, ABISELECT(96,72), "S7394C7.s7394c7f1");
    set_bf_and_test(lv, s7394c7f2, ABISELECT(104,80), 0, 13, 1, "S7394C7");
    set_bf_and_test(lv, s7394c7f2, ABISELECT(104,80), 0, 13, hide_sll(1LL<<12), "S7394C7");
    test_class_info(&lv, &cd_S7394C7);
    dp->~S7394C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C7(Test_S7394C7, "S7394C7", ABISELECT(1632,1068));

#else // __cplusplus

extern void _ZN7S7394C7C1Ev();
extern void _ZN7S7394C7D2Ev();
Name_Map name_map_S7394C7[] = {
  NSPAIR(_ZN7S7394C7C1Ev),
  NSPAIR(_ZN7S7394C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
static Base_Class bases_S7394C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(1088,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(1136,744), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(112,84), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7394C7[];
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY vtc_S7394C7[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S7394C7[];
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__7S7394C7[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__7S7394C7[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C7[] = {
  {&(_ZTV7S7394C7[5]),  5,25},
  {&(_ZTV7S7394C7[13]),  13,25},
  {&(_ZTV7S7394C7[21]),  21,25},
  {&(_tg__ZTV7S7394C8__7S7394C7[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__7S7394C7[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__7S7394C7[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C7 = {  "S7394C7", // class name
  bases_S7394C7, 6,
  &(vtc_S7394C7[0]), // expected_vtbl_contents
  &(vtt_S7394C7[0]), // expected_vtt_contents
  ABISELECT(1632,1068), // object size
  NSPAIRA(_ZTI7S7394C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7394C7),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7394C7),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C11  : virtual S7394C8 {
  short s7394c11f0;
  __tsi64 s7394c11f1;
  ::S7394C5 s7394c11f2;
  ::S7394C3 s7394c11f3[5];
  ::S7394C8 s7394c11f4[8];
  ::S7394C2 s7394c11f5[5];
  ::S7394C2 s7394c11f6;
  void *s7394c11f7;
  __tsi64 s7394c11f8;
  __tsi64 s7394c11f9;
  int s7394c11f10[2];
  virtual  ~S7394C11(); // _ZN8S7394C11D2Ev
  virtual void  v6(); // _ZN8S7394C112v6Ev
  S7394C11(); // tgen
};
//SIG(-1 S7394C11) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v2 v3 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} vd v1 Fs FL FC5 FC3[5] FC2[8] FC4[5] FC4 Fp FL FL Fi[2]}


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

static void Test_S7394C11()
{
  extern Class_Descriptor cd_S7394C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1020,2641)];
    init_test(&cd_S7394C11, buf);
    S7394C11 *dp, &lv = *(dp=new (buf) S7394C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16304,10560), "sizeof(S7394C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C11)");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(15040,9740), "S7394C11");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(15760,10204), "S7394C11");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(14784,9576), "S7394C11");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(15808,10236), "S7394C11");
    check_base_class_offset(lv, (S7394C8*), ABISELECT(14784,9576), "S7394C11");
    check_field_offset(lv, s7394c11f0, ABISELECT(8,4), "S7394C11.s7394c11f0");
    check_field_offset(lv, s7394c11f1, ABISELECT(16,8), "S7394C11.s7394c11f1");
    check_field_offset(lv, s7394c11f2, ABISELECT(32,16), "S7394C11.s7394c11f2");
    check_field_offset(lv, s7394c11f3, ABISELECT(528,340), "S7394C11.s7394c11f3");
    check_field_offset(lv, s7394c11f4, ABISELECT(768,500), "S7394C11.s7394c11f4");
    check_field_offset(lv, s7394c11f5, ABISELECT(12928,8372), "S7394C11.s7394c11f5");
    check_field_offset(lv, s7394c11f6, ABISELECT(14448,9352), "S7394C11.s7394c11f6");
    check_field_offset(lv, s7394c11f7, ABISELECT(14752,9548), "S7394C11.s7394c11f7");
    check_field_offset(lv, s7394c11f8, ABISELECT(14760,9552), "S7394C11.s7394c11f8");
    check_field_offset(lv, s7394c11f9, ABISELECT(14768,9560), "S7394C11.s7394c11f9");
    check_field_offset(lv, s7394c11f10, ABISELECT(14776,9568), "S7394C11.s7394c11f10");
    test_class_info(&lv, &cd_S7394C11);
    dp->~S7394C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C11(Test_S7394C11, "S7394C11", ABISELECT(16304,10560));

#else // __cplusplus

extern void _ZN8S7394C11C1Ev();
extern void _ZN8S7394C11D2Ev();
Name_Map name_map_S7394C11[] = {
  NSPAIR(_ZN8S7394C11C1Ev),
  NSPAIR(_ZN8S7394C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
static Base_Class bases_S7394C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(15040,9740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(15760,10204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    ABISELECT(14784,9576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(15808,10236), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(14784,9576), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C11[];
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn14784_N8S7394C11D1Ev,_ZThn9576_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn14784_N8S7394C11D0Ev,_ZThn9576_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn15808_N8S7394C11D1Ev,_ZThn10236_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn15808_N8S7394C11D0Ev,_ZThn10236_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY vtc_S7394C11[] = {
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  0,
  ABISELECT(-14784,-9576),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-14784,-9576),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-15808,-10236),
  ABISELECT(-15808,-10236),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7394C11[];
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C11[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C11[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C11[] = {
  {&(_ZTV8S7394C11[5]),  5,26},
  {&(_ZTV8S7394C11[14]),  14,26},
  {&(_ZTV8S7394C11[22]),  22,26},
  {&(_tg__ZTV7S7394C8__8S7394C11[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C11[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C11[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7394C11D0Ev,_ZThn10236_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7394C11D1Ev,_ZThn10236_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N8S7394C11D0Ev,_ZThn9576_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N8S7394C11D1Ev,_ZThn9576_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C11 = {  "S7394C11", // class name
  bases_S7394C11, 5,
  &(vtc_S7394C11[0]), // expected_vtbl_contents
  &(vtt_S7394C11[0]), // expected_vtt_contents
  ABISELECT(16304,10560), // object size
  NSPAIRA(_ZTI8S7394C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7394C11),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C11),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C10  : virtual S7394C7 , S7394C8 , virtual S7394C11 , virtual S7394C2 {
  __tsi64 s7394c10f0;
  long double s7394c10f1;
  void *s7394c10f2[6];
  virtual  ~S7394C10(); // _ZN8S7394C10D2Ev
  S7394C10(); // tgen
};
//SIG(-1 S7394C10) C1{ VBC2{ VBC3{ BC4{ m FD[2] Fc[8]} BC5{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC6{ vd v1 v2 FC5 Fp FL Fi Fp FU7{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU7 FC6 FD Fs:0 FC4 FD Fp} BC8{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} BC3 VBC9{ VBC3 vd v4 Fs FL FC6 FC4[5] FC3[8] FC5[5] FC5 Fp FL FL Fi[2]} VBC5 vd FL FD Fp[6]}


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

static void Test_S7394C10()
{
  extern Class_Descriptor cd_S7394C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1108,2871)];
    init_test(&cd_S7394C10, buf);
    S7394C10 *dp, &lv = *(dp=new (buf) S7394C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17712,11480), "sizeof(S7394C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C10)");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(1408,920), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(2128,1384), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(2128,1384), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*), ABISELECT(2128,1384), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(1152,756), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(2176,1416), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(2176,1416), "S7394C10");
    check_base_class_offset(lv, (S7394C8*)(S7394C7*), ABISELECT(1152,756), "S7394C10");
    check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(1152,756), "S7394C10");
    check_base_class_offset(lv, (S7394C9*)(S7394C7*), ABISELECT(1048,676), "S7394C10");
    check_base_class_offset(lv, (S7394C7*), ABISELECT(1040,672), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(256,164), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*), 0, "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C8*), 0, "S7394C10");
    check_base_class_offset(lv, (S7394C11*), ABISELECT(2672,1740), "S7394C10");
    /*is_ambiguous_... S7394C10::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C2*), ABISELECT(17456,11316), "S7394C10");
    check_field_offset(lv, s7394c10f0, ABISELECT(968,628), "S7394C10.s7394c10f0");
    check_field_offset(lv, s7394c10f1, ABISELECT(976,636), "S7394C10.s7394c10f1");
    check_field_offset(lv, s7394c10f2, ABISELECT(992,648), "S7394C10.s7394c10f2");
    test_class_info(&lv, &cd_S7394C10);
    dp->~S7394C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C10(Test_S7394C10, "S7394C10", ABISELECT(17712,11480));

#else // __cplusplus

extern void _ZN8S7394C10C1Ev();
extern void _ZN8S7394C10D2Ev();
Name_Map name_map_S7394C10[] = {
  NSPAIR(_ZN8S7394C10C1Ev),
  NSPAIR(_ZN8S7394C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C7;
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
static Base_Class bases_S7394C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(1408,920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(2128,1384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    ABISELECT(1152,756), //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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(2176,1416), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(1152,756), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(1048,676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7394C7,    ABISELECT(1040,672), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C3,    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
    9, //immediately_derived
  0, 0},
  {&cd_S7394C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7394C8,    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_S7394C11,    ABISELECT(2672,1740), //bcp->offset
    37, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C2,    ABISELECT(17456,11316), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C10[];
extern void _ZN8S7394C10D1Ev();
extern void _ZN8S7394C10D0Ev();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn1040_N8S7394C10D1Ev,_ZThn672_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn1040_N8S7394C10D0Ev,_ZThn672_N8S7394C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn1152_N8S7394C10D1Ev,_ZThn756_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn1152_N8S7394C10D0Ev,_ZThn756_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn2176_N8S7394C10D1Ev,_ZThn1416_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn2176_N8S7394C10D0Ev,_ZThn1416_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7394C10D1Ev,_ZThn1740_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn2672_N8S7394C10D0Ev,_ZThn1740_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY vtc_S7394C10[] = {
  ABISELECT(17456,11316),
  ABISELECT(2672,1740),
  ABISELECT(1152,756),
  ABISELECT(1040,672),
  ABISELECT(2176,1416),
  ABISELECT(2128,1384),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&_ZN8S7394C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C10D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(-1040,-672),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
  0,
  ABISELECT(-1152,-756),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-1152,-756),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-2176,-1416),
  ABISELECT(-2176,-1416),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  0,
  ABISELECT(-2672,-1740),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  ABISELECT(-2672,-1740),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  ABISELECT(-15328,-9932),
  ABISELECT(-17456,-11316),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
};
extern VTBL_ENTRY _ZTV8S7394C10[];
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__A__8S7394C10[] = {
  ABISELECT(2176,1416),
  ABISELECT(2128,1384),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__A1__8S7394C10[] = {
  ABISELECT(2128,1384),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn2176_N7S7394C8D1Ev,_ZThn1416_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn2176_N7S7394C8D0Ev,_ZThn1416_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__A__8S7394C10[] = {
  0,
  0,
  ABISELECT(-2176,-1416),
  ABISELECT(-2176,-1416),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C10[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7__8S7394C10[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C7__8S7394C10[] = {
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C10[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C10[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C10[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C10[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__8S7394C10[] = {
  0,
  ABISELECT(1520,984),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(1520,984),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__8S7394C10[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C10[] = {
  ABISELECT(-15328,-9932),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
static  VTT_ENTRY vtt_S7394C10[] = {
  {&(_ZTV8S7394C10[8]),  8,50},
  {&(_tg__ZTV7S7394C8__A__8S7394C10[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__A1__8S7394C10[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__A__8S7394C10[5]),  5,9},
  {&(_ZTV8S7394C10[17]),  17,50},
  {&(_ZTV8S7394C10[25]),  25,50},
  {&(_ZTV8S7394C10[33]),  33,50},
  {&(_ZTV8S7394C10[44]),  44,50},
  {&(_ZTV8S7394C10[50]),  50,50},
  {&(_tg__ZTV7S7394C7__8S7394C10[5]),  5,7},
  {&(_tg__ZTV7S7394C8__7S7394C7__8S7394C10[6]),  6,9},
  {&(_tg__ZTV7S7394C5__7S7394C7__8S7394C10[5]),  5,9},
  {&(_tg__ZTV7S7394C8__8S7394C10[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C10[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C10[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C10[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__8S7394C10[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__8S7394C10[5]),  5,9},
  {&(_tg__ZTV7S7394C2__A2__8S7394C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7394C10[];
extern  VTBL_ENTRY _ZTV8S7394C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C10[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S7394C8D0Ev,_ZThn1416_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N7S7394C8D1Ev,_ZThn1416_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S7394C10D0Ev,_ZThn1416_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S7394C10D1Ev,_ZThn1416_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N8S7394C10D0Ev,_ZThn756_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N8S7394C10D1Ev,_ZThn756_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7394C10D0Ev,_ZThn1740_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S7394C10D0Ev,_ZThn672_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7394C10D1Ev,_ZThn1740_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S7394C10D1Ev,_ZThn672_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C10 = {  "S7394C10", // class name
  bases_S7394C10, 12,
  &(vtc_S7394C10[0]), // expected_vtbl_contents
  &(vtt_S7394C10[0]), // expected_vtt_contents
  ABISELECT(17712,11480), // object size
  NSPAIRA(_ZTI8S7394C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7394C10),50, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C10),19, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C4  : S7394C5 , virtual S7394C7 {
  __tsi64 s7394c4f0;
  ::S7394C10 s7394c4f1;
  virtual void  v4(); // _ZN7S7394C42v4Ev
  ~S7394C4(); // tgen
  S7394C4(); // tgen
};
//SIG(-1 S7394C4) C1{ BC2{ vd v2 v3 FC3{ VBC4{ m FD[2] Fc[8]} FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} Fp FL Fi Fp FU5{ m FD FL FD FL Fi}[8] Fc Fp} VBC6{ VBC7{ BC4 BC3 VBC2 vd v4 Fp[4] FL Fp[3] FU5 FC2 FD Fs:0 FC4 FD Fp} BC8{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} v1 FL FC9{ VBC6 BC7 VBC10{ VBC7 vd v5 Fs FL FC2 FC4[5] FC7[8] FC3[5] FC3 Fp FL FL Fi[2]} VBC3 vd FL FD Fp[6]}}


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

static void Test_S7394C4()
{
  extern Class_Descriptor cd_S7394C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1242,3221)];
    init_test(&cd_S7394C4, buf);
    S7394C4 *dp, &lv = *(dp=new (buf) S7394C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19856,12880), "sizeof(S7394C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C4)");
    /*is_ambiguous_... S7394C4::S7394C5 */ AMB_check_base_class_offset(lv, (S7394C5*), 0, "S7394C4");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(18592,12060), "S7394C4");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(19312,12524), "S7394C4");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(18336,11896), "S7394C4");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(19360,12556), "S7394C4");
    check_base_class_offset(lv, (S7394C8*)(S7394C7*), ABISELECT(18336,11896), "S7394C4");
    check_base_class_offset(lv, (S7394C9*)(S7394C7*), ABISELECT(18232,11816), "S7394C4");
    check_base_class_offset(lv, (S7394C7*), ABISELECT(18224,11812), "S7394C4");
    check_field_offset(lv, s7394c4f0, ABISELECT(496,324), "S7394C4.s7394c4f0");
    check_field_offset(lv, s7394c4f1, ABISELECT(512,332), "S7394C4.s7394c4f1");
    test_class_info(&lv, &cd_S7394C4);
    dp->~S7394C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C4(Test_S7394C4, "S7394C4", ABISELECT(19856,12880));

#else // __cplusplus

extern void _ZN7S7394C4C1Ev();
extern void _ZN7S7394C4D1Ev();
Name_Map name_map_S7394C4[] = {
  NSPAIR(_ZN7S7394C4C1Ev),
  NSPAIR(_ZN7S7394C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C7;
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
static Base_Class bases_S7394C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(18592,12060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(19312,12524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(18336,11896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(19360,12556), //bcp->offset
    28, //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
    5, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(18336,11896), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(18232,11816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C7,    ABISELECT(18224,11812), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7394C4[];
extern void _ZN7S7394C4D1Ev();
extern void _ZN7S7394C4D0Ev();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void _ZN7S7394C42v4Ev();
extern void ABISELECT(_ZTv0_n48_N7S7394C4D1Ev,_ZTv0_n24_N7S7394C4D1Ev)();
extern void ABISELECT(_ZThn18224_N7S7394C4D1Ev,_ZThn11812_N7S7394C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7394C4D0Ev,_ZTv0_n24_N7S7394C4D0Ev)();
extern void ABISELECT(_ZThn18224_N7S7394C4D0Ev,_ZThn11812_N7S7394C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C4D1Ev,_ZTv0_n20_N7S7394C4D1Ev)();
extern void ABISELECT(_ZThn18336_N7S7394C4D1Ev,_ZThn11896_N7S7394C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C4D0Ev,_ZTv0_n20_N7S7394C4D0Ev)();
extern void ABISELECT(_ZThn18336_N7S7394C4D0Ev,_ZThn11896_N7S7394C4D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7394C4D1Ev,_ZTv0_n12_N7S7394C4D1Ev)();
extern void ABISELECT(_ZThn19360_N7S7394C4D1Ev,_ZThn12556_N7S7394C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C4D0Ev,_ZTv0_n12_N7S7394C4D0Ev)();
extern void ABISELECT(_ZThn19360_N7S7394C4D0Ev,_ZThn12556_N7S7394C4D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY vtc_S7394C4[] = {
  ABISELECT(19360,12556),
  ABISELECT(19312,12524),
  ABISELECT(18336,11896),
  ABISELECT(18224,11812),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C4[0]),
  (VTBL_ENTRY)&_ZN7S7394C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7394C42v4Ev,
  ABISELECT(-18224,-11812),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-18224,-11812),
  (VTBL_ENTRY)&(_ZTI7S7394C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7394C4D1Ev,_ZTv0_n24_N7S7394C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7394C4D0Ev,_ZTv0_n24_N7S7394C4D0Ev),
  0,
  ABISELECT(-18336,-11896),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-18336,-11896),
  (VTBL_ENTRY)&(_ZTI7S7394C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C4D1Ev,_ZTv0_n20_N7S7394C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C4D0Ev,_ZTv0_n20_N7S7394C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-19360,-12556),
  ABISELECT(-19360,-12556),
  (VTBL_ENTRY)&(_ZTI7S7394C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C4D1Ev,_ZTv0_n12_N7S7394C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C4D0Ev,_ZTv0_n12_N7S7394C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S7394C4[];
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C7__7S7394C4[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7__7S7394C4[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C7__7S7394C4[] = {
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C4[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__7S7394C4[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__7S7394C4[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C4[] = {
  {&(_ZTV7S7394C4[6]),  6,37},
  {&(_ZTV7S7394C4[17]),  17,37},
  {&(_ZTV7S7394C4[25]),  25,37},
  {&(_ZTV7S7394C4[33]),  33,37},
  {&(_tg__ZTV7S7394C7__7S7394C4[5]),  5,7},
  {&(_tg__ZTV7S7394C8__7S7394C7__7S7394C4[6]),  6,9},
  {&(_tg__ZTV7S7394C5__7S7394C7__7S7394C4[5]),  5,9},
  {&(_tg__ZTV7S7394C8__7S7394C4[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__7S7394C4[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__7S7394C4[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S7394C4[];
extern  VTBL_ENTRY _ZTV7S7394C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C4[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C4D0Ev,_ZTv0_n12_N7S7394C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19360_N7S7394C4D0Ev,_ZThn12556_N7S7394C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C4D1Ev,_ZTv0_n12_N7S7394C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19360_N7S7394C4D1Ev,_ZThn12556_N7S7394C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C4D0Ev,_ZTv0_n20_N7S7394C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18336_N7S7394C4D0Ev,_ZThn11896_N7S7394C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C4D1Ev,_ZTv0_n20_N7S7394C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18336_N7S7394C4D1Ev,_ZThn11896_N7S7394C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7394C4D0Ev,_ZTv0_n24_N7S7394C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18224_N7S7394C4D0Ev,_ZThn11812_N7S7394C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7394C4D1Ev,_ZTv0_n24_N7S7394C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18224_N7S7394C4D1Ev,_ZThn11812_N7S7394C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C4 = {  "S7394C4", // class name
  bases_S7394C4, 8,
  &(vtc_S7394C4[0]), // expected_vtbl_contents
  &(vtt_S7394C4[0]), // expected_vtt_contents
  ABISELECT(19856,12880), // object size
  NSPAIRA(_ZTI7S7394C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7394C4),37, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7394C4),10, //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  S7394C14  : virtual S7394C7 {
  ::S7394C5 s7394c14f0;
  int s7394c14f1;
  int s7394c14f2;
  ::S7394C6 s7394c14f3;
  virtual  ~S7394C14(); // _ZN8S7394C14D2Ev
  virtual void  v5(); // _ZN8S7394C142v5Ev
  S7394C14(); // tgen
};
//SIG(-1 S7394C14) C1{ VBC2{ VBC3{ BC4{ m FD[2] Fc[8]} BC5{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC6{ vd v2 v3 FC5 Fp FL Fi Fp FU7{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU7 FC6 FD Fs:0 FC4 FD Fp} BC8{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} vd v1 FC6 Fi Fi FU7}


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

static void Test_S7394C14()
{
  extern Class_Descriptor cd_S7394C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(137,355)];
    init_test(&cd_S7394C14, buf);
    S7394C14 *dp, &lv = *(dp=new (buf) S7394C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2176,1416), "sizeof(S7394C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C14)");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(912,596), "S7394C14");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(1632,1060), "S7394C14");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(656,432), "S7394C14");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(1680,1092), "S7394C14");
    check_base_class_offset(lv, (S7394C8*)(S7394C7*), ABISELECT(656,432), "S7394C14");
    check_base_class_offset(lv, (S7394C9*)(S7394C7*), ABISELECT(552,352), "S7394C14");
    check_base_class_offset(lv, (S7394C7*), ABISELECT(544,348), "S7394C14");
    check_field_offset(lv, s7394c14f0, ABISELECT(16,4), "S7394C14.s7394c14f0");
    check_field_offset(lv, s7394c14f1, ABISELECT(512,328), "S7394C14.s7394c14f1");
    check_field_offset(lv, s7394c14f2, ABISELECT(516,332), "S7394C14.s7394c14f2");
    check_field_offset(lv, s7394c14f3, ABISELECT(528,336), "S7394C14.s7394c14f3");
    test_class_info(&lv, &cd_S7394C14);
    dp->~S7394C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C14(Test_S7394C14, "S7394C14", ABISELECT(2176,1416));

#else // __cplusplus

extern void _ZN8S7394C14C1Ev();
extern void _ZN8S7394C14D2Ev();
Name_Map name_map_S7394C14[] = {
  NSPAIR(_ZN8S7394C14C1Ev),
  NSPAIR(_ZN8S7394C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C7;
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
static Base_Class bases_S7394C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(912,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(1632,1060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    ABISELECT(656,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(1680,1092), //bcp->offset
    26, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(656,432), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(552,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7394C7,    ABISELECT(544,348), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C14[];
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn544_N8S7394C14D1Ev,_ZThn348_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn544_N8S7394C14D0Ev,_ZThn348_N8S7394C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn656_N8S7394C14D1Ev,_ZThn432_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn656_N8S7394C14D0Ev,_ZThn432_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn1680_N8S7394C14D1Ev,_ZThn1092_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn1680_N8S7394C14D0Ev,_ZThn1092_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY vtc_S7394C14[] = {
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(-544,-348),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-544,-348),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
  0,
  ABISELECT(-656,-432),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-656,-432),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-1680,-1092),
  ABISELECT(-1680,-1092),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7394C14[];
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C14[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7__8S7394C14[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C7__8S7394C14[] = {
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C14[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C14[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C14[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C14[] = {
  {&(_ZTV8S7394C14[6]),  6,35},
  {&(_ZTV8S7394C14[15]),  15,35},
  {&(_ZTV8S7394C14[23]),  23,35},
  {&(_ZTV8S7394C14[31]),  31,35},
  {&(_tg__ZTV7S7394C7__8S7394C14[5]),  5,7},
  {&(_tg__ZTV7S7394C8__7S7394C7__8S7394C14[6]),  6,9},
  {&(_tg__ZTV7S7394C5__7S7394C7__8S7394C14[5]),  5,9},
  {&(_tg__ZTV7S7394C8__8S7394C14[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C14[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C14[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S7394C14D0Ev,_ZThn1092_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S7394C14D1Ev,_ZThn1092_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S7394C14D0Ev,_ZThn432_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S7394C14D1Ev,_ZThn432_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S7394C14D0Ev,_ZThn348_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S7394C14D1Ev,_ZThn348_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C14 = {  "S7394C14", // class name
  bases_S7394C14, 7,
  &(vtc_S7394C14[0]), // expected_vtbl_contents
  &(vtt_S7394C14[0]), // expected_vtt_contents
  ABISELECT(2176,1416), // object size
  NSPAIRA(_ZTI8S7394C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7394C14),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C14),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C15  : S7394C8 {
  ::S7394C2 s7394c15f0;
  void *s7394c15f1[5];
  int s7394c15f2;
  __tsi64 s7394c15f3[9];
  ::S468C20_nt s7394c15f4;
  __tsi64 s7394c15f5[6];
  char  :0;
  __tsi64 s7394c15f7;
  long double s7394c15f8;
  ::S7394C6 s7394c15f9;
  ::S7394C3 s7394c15f10;
  int s7394c15f11;
  int s7394c15f12;
  long s7394c15f13;
  virtual  ~S7394C15(); // _ZN8S7394C15D2Ev
  S7394C15(); // tgen
};
//SIG(-1 S7394C15) C1{ BC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v1 v2 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} vd FC4 Fp[5] Fi FL[9] FC7{} FL[6] Fc:0 FL FD FU6 FC3 Fi Fi Fl}


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

static void Test_S7394C15()
{
  extern Class_Descriptor cd_S7394C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,352)];
    init_test(&cd_S7394C15, buf);
    S7394C15 *dp, &lv = *(dp=new (buf) S7394C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1404), "sizeof(S7394C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C15)");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(256,164), "S7394C15");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(1568,1048), "S7394C15");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*), 0, "S7394C15");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(1616,1080), "S7394C15");
    check_base_class_offset(lv, (S7394C8*), 0, "S7394C15");
    check_field_offset(lv, s7394c15f0, ABISELECT(976,628), "S7394C15.s7394c15f0");
    check_field_offset(lv, s7394c15f1, ABISELECT(1280,824), "S7394C15.s7394c15f1");
    check_field_offset(lv, s7394c15f2, ABISELECT(1320,844), "S7394C15.s7394c15f2");
    check_field_offset(lv, s7394c15f3, ABISELECT(1328,848), "S7394C15.s7394c15f3");
    check_field_offset(lv, s7394c15f4, ABISELECT(1400,920), "S7394C15.s7394c15f4");
    check_field_offset(lv, s7394c15f5, ABISELECT(1408,924), "S7394C15.s7394c15f5");
    check_field_offset(lv, s7394c15f7, ABISELECT(1456,972), "S7394C15.s7394c15f7");
    check_field_offset(lv, s7394c15f8, ABISELECT(1472,980), "S7394C15.s7394c15f8");
    check_field_offset(lv, s7394c15f9, ABISELECT(1488,992), "S7394C15.s7394c15f9");
    check_field_offset(lv, s7394c15f10, ABISELECT(1504,1004), "S7394C15.s7394c15f10");
    check_field_offset(lv, s7394c15f11, ABISELECT(1552,1036), "S7394C15.s7394c15f11");
    check_field_offset(lv, s7394c15f12, ABISELECT(1556,1040), "S7394C15.s7394c15f12");
    check_field_offset(lv, s7394c15f13, ABISELECT(1560,1044), "S7394C15.s7394c15f13");
    test_class_info(&lv, &cd_S7394C15);
    dp->~S7394C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C15(Test_S7394C15, "S7394C15", ABISELECT(2112,1404));

#else // __cplusplus

extern void _ZN8S7394C15C1Ev();
extern void _ZN8S7394C15D2Ev();
Name_Map name_map_S7394C15[] = {
  NSPAIR(_ZN8S7394C15C1Ev),
  NSPAIR(_ZN8S7394C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
static Base_Class bases_S7394C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(1568,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(1616,1080), //bcp->offset
    7, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    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 _ZTI8S7394C15[];
extern void _ZN8S7394C15D1Ev();
extern void _ZN8S7394C15D0Ev();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev)();
extern void ABISELECT(_ZThn1616_N8S7394C15D1Ev,_ZThn1080_N8S7394C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev)();
extern void ABISELECT(_ZThn1616_N8S7394C15D0Ev,_ZThn1080_N8S7394C15D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY vtc_S7394C15[] = {
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&_ZN8S7394C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C15D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-1616,-1080),
  ABISELECT(-1616,-1080),
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7394C15[];
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C15[] = {
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C15[] = {
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1616_N7S7394C8D1Ev,_ZThn1080_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1616_N7S7394C8D0Ev,_ZThn1080_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C15[] = {
  0,
  0,
  ABISELECT(-1616,-1080),
  ABISELECT(-1616,-1080),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C15[] = {
  {&(_ZTV8S7394C15[4]),  4,16},
  {&(_tg__ZTV7S7394C8__8S7394C15[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C15[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C15[5]),  5,9},
  {&(_ZTV8S7394C15[12]),  12,16},
};
extern VTBL_ENTRY _ZTI8S7394C15[];
extern  VTBL_ENTRY _ZTV8S7394C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C15[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N7S7394C8D0Ev,_ZThn1080_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N7S7394C8D1Ev,_ZThn1080_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N8S7394C15D0Ev,_ZThn1080_N8S7394C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N8S7394C15D1Ev,_ZThn1080_N8S7394C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C15 = {  "S7394C15", // class name
  bases_S7394C15, 5,
  &(vtc_S7394C15[0]), // expected_vtbl_contents
  &(vtt_S7394C15[0]), // expected_vtt_contents
  ABISELECT(2112,1404), // object size
  NSPAIRA(_ZTI8S7394C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7394C15),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C15),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C13  : virtual S7394C14 , virtual S7394C15 , virtual S7394C11 {
  int s7394c13f0;
  int s7394c13f1;
  ::S7394C11 s7394c13f2;
  __tsi64 s7394c13f3;
  int s7394c13f4;
  long double s7394c13f5;
  void *s7394c13f6;
  int s7394c13f7;
  virtual void  v7(); // _ZN8S7394C132v7Ev
  ~S7394C13(); // tgen
  S7394C13(); // tgen
};
//SIG(-1 S7394C13) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FD[2] Fc[8]} BC6{ VBC5 FL[4] FC5 Fi FC5 FL Fp FC5 Fp[4]} VBC7{ vd v2 v3 FC6 Fp FL Fi Fp FU8{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU8 FC7 FD Fs:0 FC5 FD Fp} BC9{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} vd v5 FC7 Fi Fi FU8} VBC10{ BC4 vd FC6 Fp[5] Fi FL[9] FC11{} FL[6] Fc:0 FL FD FU8 FC5 Fi Fi Fl} VBC12{ VBC4 vd v6 Fs FL FC7 FC5[5] FC4[8] FC6[5] FC6 Fp FL FL Fi[2]} v1 Fi Fi FC12 FL Fi FD Fp Fi}


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

static void Test_S7394C13()
{
  extern Class_Descriptor cd_S7394C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2182,5662)];
    init_test(&cd_S7394C13, buf);
    S7394C13 *dp, &lv = *(dp=new (buf) S7394C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(34896,22644), "sizeof(S7394C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C13)");
    /*is_ambiguous_... S7394C13::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(17280,11200), "S7394C13");
    /*is_ambiguous_... S7394C13::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(18000,11664), "S7394C13");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C15*), ABISELECT(18000,11664), "S7394C13");
    /*is_ambiguous_... S7394C13::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(17024,11036), "S7394C13");
    /*is_ambiguous_... S7394C13::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(18048,11696), "S7394C13");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C15*), ABISELECT(18048,11696), "S7394C13");
    check_base_class_offset(lv, (S7394C8*)(S7394C7*), ABISELECT(17024,11036), "S7394C13");
    check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(17024,11036), "S7394C13");
    check_base_class_offset(lv, (S7394C9*)(S7394C7*), ABISELECT(16920,10956), "S7394C13");
    check_base_class_offset(lv, (S7394C7*)(S7394C14*), ABISELECT(16912,10952), "S7394C13");
    check_base_class_offset(lv, (S7394C14*), ABISELECT(16368,10604), "S7394C13");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C15*), ABISELECT(18800,12184), "S7394C13");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C15*), ABISELECT(18544,12020), "S7394C13");
    check_base_class_offset(lv, (S7394C8*)(S7394C15*), ABISELECT(18544,12020), "S7394C13");
    check_base_class_offset(lv, (S7394C15*), ABISELECT(18544,12020), "S7394C13");
    check_base_class_offset(lv, (S7394C11*), ABISELECT(20112,13068), "S7394C13");
    check_field_offset(lv, s7394c13f0, ABISELECT(8,4), "S7394C13.s7394c13f0");
    check_field_offset(lv, s7394c13f1, ABISELECT(12,8), "S7394C13.s7394c13f1");
    check_field_offset(lv, s7394c13f2, ABISELECT(16,12), "S7394C13.s7394c13f2");
    check_field_offset(lv, s7394c13f3, ABISELECT(16320,10572), "S7394C13.s7394c13f3");
    check_field_offset(lv, s7394c13f4, ABISELECT(16328,10580), "S7394C13.s7394c13f4");
    check_field_offset(lv, s7394c13f5, ABISELECT(16336,10584), "S7394C13.s7394c13f5");
    check_field_offset(lv, s7394c13f6, ABISELECT(16352,10596), "S7394C13.s7394c13f6");
    check_field_offset(lv, s7394c13f7, ABISELECT(16360,10600), "S7394C13.s7394c13f7");
    test_class_info(&lv, &cd_S7394C13);
    dp->~S7394C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C13(Test_S7394C13, "S7394C13", ABISELECT(34896,22644));

#else // __cplusplus

extern void _ZN8S7394C13C1Ev();
extern void _ZN8S7394C13D1Ev();
Name_Map name_map_S7394C13[] = {
  NSPAIR(_ZN8S7394C13C1Ev),
  NSPAIR(_ZN8S7394C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C7;
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C15;
extern VTBL_ENTRY _ZTI8S7394C15[];
extern  VTBL_ENTRY _ZTV8S7394C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C15[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
static Base_Class bases_S7394C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(17280,11200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(18000,11664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    ABISELECT(17024,11036), //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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(18048,11696), //bcp->offset
    40, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(17024,11036), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //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
    6, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(16920,10956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C7,    ABISELECT(16912,10952), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7394C14,    ABISELECT(16368,10604), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C3,    ABISELECT(18800,12184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(18544,12020), //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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(18544,12020), //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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7394C15,    ABISELECT(18544,12020), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C11,    ABISELECT(20112,13068), //bcp->offset
    58, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C13[];
extern void _ZN8S7394C132v7Ev();
extern void _ZN8S7394C13D1Ev();
extern void _ZN8S7394C13D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn16368_N8S7394C13D1Ev,_ZThn10604_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn16368_N8S7394C13D0Ev,_ZThn10604_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn16912_N8S7394C13D1Ev,_ZThn10952_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn16912_N8S7394C13D0Ev,_ZThn10952_N8S7394C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn17024_N8S7394C13D1Ev,_ZThn11036_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn17024_N8S7394C13D0Ev,_ZThn11036_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C13D1Ev,_ZTv0_n12_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn18048_N8S7394C13D1Ev,_ZThn11696_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C13D0Ev,_ZTv0_n12_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn18048_N8S7394C13D0Ev,_ZThn11696_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn18544_N8S7394C13D1Ev,_ZThn12020_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn18544_N8S7394C13D0Ev,_ZThn12020_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn20112_N8S7394C13D1Ev,_ZThn13068_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn20112_N8S7394C13D0Ev,_ZThn13068_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY vtc_S7394C13[] = {
  ABISELECT(20112,13068),
  ABISELECT(18544,12020),
  ABISELECT(18048,11696),
  ABISELECT(18000,11664),
  ABISELECT(17024,11036),
  ABISELECT(16912,10952),
  ABISELECT(16368,10604),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&_ZN8S7394C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7394C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C13D0Ev,
  0,
  ABISELECT(-16368,-10604),
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  ABISELECT(-16368,-10604),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(-16912,-10952),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-16912,-10952),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev),
  0,
  ABISELECT(-17024,-11036),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-17024,-11036),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-18048,-11696),
  ABISELECT(-18048,-11696),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C13D1Ev,_ZTv0_n12_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C13D0Ev,_ZTv0_n12_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  0,
  ABISELECT(-18544,-12020),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-18544,-12020),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  ABISELECT(-20112,-13068),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-20112,-13068),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern VTBL_ENTRY _ZTV8S7394C13[];
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C13[] = {
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn544_N8S7394C14D1Ev,_ZThn348_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn544_N8S7394C14D0Ev,_ZThn348_N8S7394C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C14__8S7394C13[] = {
  ABISELECT(-544,-348),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-544,-348),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn656_N8S7394C14D1Ev,_ZThn432_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn656_N8S7394C14D0Ev,_ZThn432_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C14__8S7394C13[] = {
  0,
  ABISELECT(-656,-432),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-656,-432),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn1680_N8S7394C14D1Ev,_ZThn1092_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn1680_N8S7394C14D0Ev,_ZThn1092_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C14__8S7394C13[] = {
  0,
  0,
  ABISELECT(-1680,-1092),
  ABISELECT(-1680,-1092),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C13[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7__8S7394C13[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C7__8S7394C13[] = {
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C13[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C13[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C13[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C15D1Ev();
extern void _ZN8S7394C15D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__8S7394C13[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&_ZN8S7394C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C15D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C15__A1__8S7394C13[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C15__A1__8S7394C13[] = {
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C15__A1__8S7394C13[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C15__8S7394C13[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C13[] = {
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__8S7394C13[] = {
  0,
  ABISELECT(3088,2032),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(3088,2032),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__8S7394C13[] = {
  0,
  0,
  ABISELECT(2064,1372),
  ABISELECT(2064,1372),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C13[] = {
  {&(_ZTV8S7394C13[9]),  9,68},
  {&(_ZTV8S7394C13[20]),  20,68},
  {&(_ZTV8S7394C13[29]),  29,68},
  {&(_ZTV8S7394C13[37]),  37,68},
  {&(_ZTV8S7394C13[45]),  45,68},
  {&(_ZTV8S7394C13[55]),  55,68},
  {&(_ZTV8S7394C13[65]),  65,68},
  {&(_tg__ZTV8S7394C14__8S7394C13[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C14__8S7394C13[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C14__8S7394C13[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C14__8S7394C13[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C13[5]),  5,7},
  {&(_tg__ZTV7S7394C8__7S7394C7__8S7394C13[6]),  6,9},
  {&(_tg__ZTV7S7394C5__7S7394C7__8S7394C13[5]),  5,9},
  {&(_tg__ZTV7S7394C8__8S7394C13[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C13[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C13[5]),  5,9},
  {&(_tg__ZTV8S7394C15__8S7394C13[4]),  4,7},
  {&(_tg__ZTV7S7394C88S7394C15__A1__8S7394C13[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C15__A1__8S7394C13[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C15__A1__8S7394C13[5]),  5,9},
  {&(_tg__ZTV7S7394C5__8S7394C15__8S7394C13[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C13[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__8S7394C13[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__8S7394C13[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S7394C13[];
extern  VTBL_ENTRY _ZTV8S7394C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C13[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S7394C14D0Ev,_ZThn1092_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S7394C14D1Ev,_ZThn1092_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S7394C14D0Ev,_ZThn432_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S7394C14D1Ev,_ZThn432_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S7394C14D0Ev,_ZThn348_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S7394C14D1Ev,_ZThn348_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C13D0Ev,_ZTv0_n12_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N8S7394C13D0Ev,_ZThn11696_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C13D1Ev,_ZTv0_n12_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N8S7394C13D1Ev,_ZThn11696_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18544_N8S7394C13D0Ev,_ZThn12020_N8S7394C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17024_N8S7394C13D0Ev,_ZThn11036_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18544_N8S7394C13D1Ev,_ZThn12020_N8S7394C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17024_N8S7394C13D1Ev,_ZThn11036_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20112_N8S7394C13D0Ev,_ZThn13068_N8S7394C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N8S7394C13D0Ev,_ZThn10952_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20112_N8S7394C13D1Ev,_ZThn13068_N8S7394C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N8S7394C13D1Ev,_ZThn10952_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N8S7394C13D0Ev,_ZThn10604_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N8S7394C13D1Ev,_ZThn10604_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C13 = {  "S7394C13", // class name
  bases_S7394C13, 13,
  &(vtc_S7394C13[0]), // expected_vtbl_contents
  &(vtt_S7394C13[0]), // expected_vtt_contents
  ABISELECT(34896,22644), // object size
  NSPAIRA(_ZTI8S7394C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7394C13),68, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C13),25, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C18  : virtual S7394C11 {
  char  :0;
  __tsi64 s7394c18f1:64;
  int s7394c18f2;
  virtual  ~S7394C18(); // _ZN8S7394C18D2Ev
  S7394C18(); // tgen
};
//SIG(-1 S7394C18) C1{ VBC2{ VBC3{ BC4{ m FD[2] Fc[8]} BC5{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC6{ vd v1 v2 FC5 Fp FL Fi Fp FU7{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU7 FC6 FD Fs:0 FC4 FD Fp} vd v4 Fs FL FC6 FC4[5] FC3[8] FC5[5] FC5 Fp FL FL Fi[2]} vd Fc:0 FL:64 Fi}


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

static void Test_S7394C18()
{
  extern Class_Descriptor cd_S7394C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1022,2645)];
    init_test(&cd_S7394C18, buf);
    S7394C18 *dp, &lv = *(dp=new (buf) S7394C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16336,10576), "sizeof(S7394C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C18)");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(15072,9756), "S7394C18");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(15792,10220), "S7394C18");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(14816,9592), "S7394C18");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(15840,10252), "S7394C18");
    check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(14816,9592), "S7394C18");
    check_base_class_offset(lv, (S7394C11*), ABISELECT(32,16), "S7394C18");
    set_bf_and_test(lv, s7394c18f1, ABISELECT(8,4), 0, 64, 1, "S7394C18");
    set_bf_and_test(lv, s7394c18f1, ABISELECT(8,4), 0, 64, hide_sll(1LL<<63), "S7394C18");
    check_field_offset(lv, s7394c18f2, ABISELECT(16,12), "S7394C18.s7394c18f2");
    test_class_info(&lv, &cd_S7394C18);
    dp->~S7394C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C18(Test_S7394C18, "S7394C18", ABISELECT(16336,10576));

#else // __cplusplus

extern void _ZN8S7394C18C1Ev();
extern void _ZN8S7394C18D2Ev();
Name_Map name_map_S7394C18[] = {
  NSPAIR(_ZN8S7394C18C1Ev),
  NSPAIR(_ZN8S7394C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
static Base_Class bases_S7394C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(15072,9756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(15792,10220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    ABISELECT(14816,9592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(15840,10252), //bcp->offset
    27, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(14816,9592), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7394C11,    ABISELECT(32,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C18[];
extern void _ZN8S7394C18D1Ev();
extern void _ZN8S7394C18D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7394C18D1Ev,_ZThn16_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn32_N8S7394C18D0Ev,_ZThn16_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn14816_N8S7394C18D1Ev,_ZThn9592_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn14816_N8S7394C18D0Ev,_ZThn9592_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn15840_N8S7394C18D1Ev,_ZThn10252_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn15840_N8S7394C18D0Ev,_ZThn10252_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY vtc_S7394C18[] = {
  ABISELECT(15840,10252),
  ABISELECT(15792,10220),
  ABISELECT(14816,9592),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&_ZN8S7394C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C18D0Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  0,
  ABISELECT(-14816,-9592),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-14816,-9592),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-15840,-10252),
  ABISELECT(-15840,-10252),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S7394C18[];
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C18[] = {
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn14784_N8S7394C11D1Ev,_ZThn9576_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn14784_N8S7394C11D0Ev,_ZThn9576_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__8S7394C18[] = {
  0,
  ABISELECT(-14784,-9576),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-14784,-9576),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn15808_N8S7394C11D1Ev,_ZThn10236_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn15808_N8S7394C11D0Ev,_ZThn10236_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__8S7394C18[] = {
  0,
  0,
  ABISELECT(-15808,-10236),
  ABISELECT(-15808,-10236),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C18[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C18[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C18[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C18[] = {
  {&(_ZTV8S7394C18[6]),  6,36},
  {&(_ZTV8S7394C18[15]),  15,36},
  {&(_ZTV8S7394C18[24]),  24,36},
  {&(_ZTV8S7394C18[32]),  32,36},
  {&(_tg__ZTV8S7394C11__8S7394C18[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__8S7394C18[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__8S7394C18[5]),  5,9},
  {&(_tg__ZTV7S7394C8__8S7394C18[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C18[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C18[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S7394C18[];
extern  VTBL_ENTRY _ZTV8S7394C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C18[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7394C11D0Ev,_ZThn10236_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7394C11D1Ev,_ZThn10236_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N8S7394C11D0Ev,_ZThn9576_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N8S7394C11D1Ev,_ZThn9576_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S7394C18D0Ev,_ZThn10252_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S7394C18D1Ev,_ZThn10252_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14816_N8S7394C18D0Ev,_ZThn9592_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14816_N8S7394C18D1Ev,_ZThn9592_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7394C18D0Ev,_ZThn16_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7394C18D1Ev,_ZThn16_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C18 = {  "S7394C18", // class name
  bases_S7394C18, 6,
  &(vtc_S7394C18[0]), // expected_vtbl_contents
  &(vtt_S7394C18[0]), // expected_vtt_contents
  ABISELECT(16336,10576), // object size
  NSPAIRA(_ZTI8S7394C18),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7394C18),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C18),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C19  : virtual S7394C18 , S7394C10 , S7394C14 {
  int s7394c19f0;
  int s7394c19f1;
  ::S7394C2 s7394c19f2;
  ::S7394C3 s7394c19f3;
  int s7394c19f4;
  __tsi64 s7394c19f5;
  int s7394c19f6;
  __tsi64 s7394c19f7[3];
  __tsi64 s7394c19f8;
  __tsi64 s7394c19f9;
  __tsi64 s7394c19f10:25;
  virtual  ~S7394C19(); // _ZN8S7394C19D2Ev
  S7394C19(); // tgen
};
//SIG(-1 S7394C19) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FD[2] Fc[8]} BC6{ VBC5 FL[4] FC5 Fi FC5 FL Fp FC5 Fp[4]} VBC7{ vd v1 v2 FC6 Fp FL Fi Fp FU8{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU8 FC7 FD Fs:0 FC5 FD Fp} vd v4 Fs FL FC7 FC5[5] FC4[8] FC6[5] FC6 Fp FL FL Fi[2]} vd Fc:0 FL:64 Fi} BC9{ VBC10{ VBC4 BC11{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} BC4 VBC3 VBC6 vd FL FD Fp[6]} BC12{ VBC10 vd v5 FC7 Fi Fi FU8} vd Fi Fi FC6 FC5 Fi FL Fi FL[3] FL FL FL:25}


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

static void Test_S7394C19()
{
  extern Class_Descriptor cd_S7394C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1171,3036)];
    init_test(&cd_S7394C19, buf);
    S7394C19 *dp, &lv = *(dp=new (buf) S7394C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(18720,12140), "sizeof(S7394C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C19)");
    /*is_ambiguous_... S7394C19::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(17088,11072), "S7394C19");
    /*is_ambiguous_... S7394C19::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(17808,11536), "S7394C19");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C10*), ABISELECT(17808,11536), "S7394C19");
    /*is_ambiguous_... S7394C19::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*), ABISELECT(17808,11536), "S7394C19");
    /*is_ambiguous_... S7394C19::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(16832,10908), "S7394C19");
    /*is_ambiguous_... S7394C19::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(17856,11568), "S7394C19");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C10*), ABISELECT(17856,11568), "S7394C19");
    check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(16832,10908), "S7394C19");
    check_base_class_offset(lv, (S7394C8*)(S7394C7*), ABISELECT(16832,10908), "S7394C19");
    check_base_class_offset(lv, (S7394C11*)(S7394C18*), ABISELECT(2048,1332), "S7394C19");
    check_base_class_offset(lv, (S7394C11*)(S7394C10*), ABISELECT(2048,1332), "S7394C19");
    check_base_class_offset(lv, (S7394C18*), ABISELECT(2024,1316), "S7394C19");
    check_base_class_offset(lv, (S7394C9*)(S7394C7*), ABISELECT(18360,11896), "S7394C19");
    check_base_class_offset(lv, (S7394C7*)(S7394C10*), ABISELECT(18352,11892), "S7394C19");
    check_base_class_offset(lv, (S7394C7*)(S7394C14*), ABISELECT(18352,11892), "S7394C19");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C10*), ABISELECT(256,164), "S7394C19");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C10*), 0, "S7394C19");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C10*), 0, "S7394C19");
    /*is_ambiguous_... S7394C10::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C10*), ABISELECT(18464,11976), "S7394C19");
    check_base_class_offset(lv, (S7394C10*), 0, "S7394C19");
    check_base_class_offset(lv, (S7394C14*), ABISELECT(1040,672), "S7394C19");
    check_field_offset(lv, s7394c19f0, ABISELECT(1584,1020), "S7394C19.s7394c19f0");
    check_field_offset(lv, s7394c19f1, ABISELECT(1588,1024), "S7394C19.s7394c19f1");
    check_field_offset(lv, s7394c19f2, ABISELECT(1600,1028), "S7394C19.s7394c19f2");
    check_field_offset(lv, s7394c19f3, ABISELECT(1904,1224), "S7394C19.s7394c19f3");
    check_field_offset(lv, s7394c19f4, ABISELECT(1952,1256), "S7394C19.s7394c19f4");
    check_field_offset(lv, s7394c19f5, ABISELECT(1960,1260), "S7394C19.s7394c19f5");
    check_field_offset(lv, s7394c19f6, ABISELECT(1968,1268), "S7394C19.s7394c19f6");
    check_field_offset(lv, s7394c19f7, ABISELECT(1976,1272), "S7394C19.s7394c19f7");
    check_field_offset(lv, s7394c19f8, ABISELECT(2000,1296), "S7394C19.s7394c19f8");
    check_field_offset(lv, s7394c19f9, ABISELECT(2008,1304), "S7394C19.s7394c19f9");
    set_bf_and_test(lv, s7394c19f10, ABISELECT(2016,1312), 0, 25, 1, "S7394C19");
    set_bf_and_test(lv, s7394c19f10, ABISELECT(2016,1312), 0, 25, hide_sll(1LL<<24), "S7394C19");
    test_class_info(&lv, &cd_S7394C19);
    dp->~S7394C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C19(Test_S7394C19, "S7394C19", ABISELECT(18720,12140));

#else // __cplusplus

extern void _ZN8S7394C19C1Ev();
extern void _ZN8S7394C19D2Ev();
Name_Map name_map_S7394C19[] = {
  NSPAIR(_ZN8S7394C19C1Ev),
  NSPAIR(_ZN8S7394C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
extern Class_Descriptor cd_S7394C18;
extern VTBL_ENTRY _ZTI8S7394C18[];
extern  VTBL_ENTRY _ZTV8S7394C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C18[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C7;
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C10;
extern VTBL_ENTRY _ZTI8S7394C10[];
extern  VTBL_ENTRY _ZTV8S7394C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C10[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
static Base_Class bases_S7394C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(17088,11072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(17808,11536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    ABISELECT(16832,10908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(17856,11568), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(16832,10908), //bcp->offset
    40, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7394C11,    ABISELECT(2048,1332), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7394C18,    ABISELECT(2024,1316), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C9,    ABISELECT(18360,11896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C7,    ABISELECT(18352,11892), //bcp->offset
    58, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7394C3,    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
    11, //immediately_derived
  0, 0},
  {&cd_S7394C2,    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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7394C8,    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
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7394C2,    ABISELECT(18464,11976), //bcp->offset
    66, //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
    13, //immediately_derived
  0, 1},
  {&cd_S7394C10,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C14,    ABISELECT(1040,672), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //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 _ZTI8S7394C19[];
extern void _ZN8S7394C19D1Ev();
extern void _ZN8S7394C19D0Ev();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev)();
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn2024_N8S7394C19D1Ev,_ZThn1316_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn2024_N8S7394C19D0Ev,_ZThn1316_N8S7394C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn2048_N8S7394C19D1Ev,_ZThn1332_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn2048_N8S7394C19D0Ev,_ZThn1332_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn16832_N8S7394C19D1Ev,_ZThn10908_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn16832_N8S7394C19D0Ev,_ZThn10908_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn17856_N8S7394C19D1Ev,_ZThn11568_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn17856_N8S7394C19D0Ev,_ZThn11568_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn18352_N8S7394C19D1Ev,_ZThn11892_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn18352_N8S7394C19D0Ev,_ZThn11892_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7394C19[] = {
  ABISELECT(2024,1316),
  ABISELECT(18464,11976),
  ABISELECT(2048,1332),
  ABISELECT(16832,10908),
  ABISELECT(18352,11892),
  ABISELECT(17856,11568),
  ABISELECT(17808,11536),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&_ZN8S7394C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C19D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(16816,10896),
  ABISELECT(16768,10864),
  ABISELECT(15792,10236),
  ABISELECT(17312,11220),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(-2024,-1316),
  ABISELECT(15832,10252),
  ABISELECT(15784,10220),
  ABISELECT(14808,9592),
  ABISELECT(24,16),
  ABISELECT(-2024,-1316),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev),
  0,
  ABISELECT(-2048,-1332),
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  ABISELECT(-2048,-1332),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  0,
  ABISELECT(-16832,-10908),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-16832,-10908),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-17856,-11568),
  ABISELECT(-17856,-11568),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  ABISELECT(-18352,-11892),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  ABISELECT(-18352,-11892),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
  ABISELECT(-656,-440),
  ABISELECT(-18464,-11976),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
};
extern VTBL_ENTRY _ZTV8S7394C19[];
extern void _ZN8S7394C10D1Ev();
extern void _ZN8S7394C10D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C10__8S7394C19[] = {
  ABISELECT(18464,11976),
  ABISELECT(2048,1332),
  ABISELECT(16832,10908),
  ABISELECT(18352,11892),
  ABISELECT(17856,11568),
  ABISELECT(17808,11536),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&_ZN8S7394C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C10D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C10__A1__8S7394C19[] = {
  ABISELECT(17856,11568),
  ABISELECT(17808,11536),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C10__A1__8S7394C19[] = {
  ABISELECT(17808,11536),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn17856_N7S7394C8D1Ev,_ZThn11568_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn17856_N7S7394C8D0Ev,_ZThn11568_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C10__A1__8S7394C19[] = {
  0,
  0,
  ABISELECT(-17856,-11568),
  ABISELECT(-17856,-11568),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn18352_N8S7394C10D1Ev,_ZThn11892_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn18352_N8S7394C10D0Ev,_ZThn11892_N8S7394C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C10__8S7394C19[] = {
  ABISELECT(-18352,-11892),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  ABISELECT(-18352,-11892),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn16832_N8S7394C10D1Ev,_ZThn10908_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn16832_N8S7394C10D0Ev,_ZThn10908_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C10__8S7394C19[] = {
  0,
  ABISELECT(-16832,-10908),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-16832,-10908),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn17856_N8S7394C10D1Ev,_ZThn11568_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn17856_N8S7394C10D0Ev,_ZThn11568_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C10__8S7394C19[] = {
  0,
  0,
  ABISELECT(-17856,-11568),
  ABISELECT(-17856,-11568),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn2048_N8S7394C10D1Ev,_ZThn1332_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn2048_N8S7394C10D0Ev,_ZThn1332_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C10__8S7394C19[] = {
  0,
  ABISELECT(-2048,-1332),
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  ABISELECT(-2048,-1332),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C10__8S7394C19[] = {
  ABISELECT(-656,-440),
  ABISELECT(-18464,-11976),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
};
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C19[] = {
  ABISELECT(16816,10896),
  ABISELECT(16768,10864),
  ABISELECT(15792,10236),
  ABISELECT(17312,11220),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn17312_N8S7394C14D1Ev,_ZThn11220_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn17312_N8S7394C14D0Ev,_ZThn11220_N8S7394C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C14__8S7394C19[] = {
  ABISELECT(-17312,-11220),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  ABISELECT(-17312,-11220),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn15792_N8S7394C14D1Ev,_ZThn10236_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn15792_N8S7394C14D0Ev,_ZThn10236_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C14__8S7394C19[] = {
  0,
  ABISELECT(-15792,-10236),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-15792,-10236),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn16816_N8S7394C14D1Ev,_ZThn10896_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn16816_N8S7394C14D0Ev,_ZThn10896_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C14__8S7394C19[] = {
  0,
  0,
  ABISELECT(-16816,-10896),
  ABISELECT(-16816,-10896),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C18D1Ev();
extern void _ZN8S7394C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C18__8S7394C19[] = {
  ABISELECT(15832,10252),
  ABISELECT(15784,10220),
  ABISELECT(14808,9592),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&_ZN8S7394C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C18D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn24_N8S7394C18D1Ev,_ZThn16_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn24_N8S7394C18D0Ev,_ZThn16_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C18__8S7394C19[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn14808_N8S7394C18D1Ev,_ZThn9592_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn14808_N8S7394C18D0Ev,_ZThn9592_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C18__8S7394C19[] = {
  0,
  ABISELECT(-14808,-9592),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-14808,-9592),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn15832_N8S7394C18D1Ev,_ZThn10252_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn15832_N8S7394C18D0Ev,_ZThn10252_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C18__8S7394C19[] = {
  0,
  0,
  ABISELECT(-15832,-10252),
  ABISELECT(-15832,-10252),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C19[] = {
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn14784_N8S7394C11D1Ev,_ZThn9576_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn14784_N8S7394C11D0Ev,_ZThn9576_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__8S7394C19[] = {
  0,
  ABISELECT(-14784,-9576),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-14784,-9576),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn15808_N8S7394C11D1Ev,_ZThn10236_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn15808_N8S7394C11D0Ev,_ZThn10236_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__8S7394C19[] = {
  0,
  0,
  ABISELECT(-15808,-10236),
  ABISELECT(-15808,-10236),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C19[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C19[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C19[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C19[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7__8S7394C19[] = {
  0,
  ABISELECT(1520,984),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(1520,984),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C7__8S7394C19[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C19[] = {
  ABISELECT(-656,-440),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
static  VTT_ENTRY vtt_S7394C19[] = {
  {&(_ZTV8S7394C19[9]),  9,69},
  {&(_tg__ZTV8S7394C10__8S7394C19[8]),  8,11},
  {&(_tg__ZTV7S7394C88S7394C10__A1__8S7394C19[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C10__A1__8S7394C19[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C10__A1__8S7394C19[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C10__8S7394C19[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C10__8S7394C19[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C10__8S7394C19[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C10__8S7394C19[7]),  7,10},
  {&(_tg__ZTV7S7394C2__A2__8S7394C10__8S7394C19[3]),  3,3},
  {&(_tg__ZTV8S7394C14__8S7394C19[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C14__8S7394C19[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C14__8S7394C19[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C14__8S7394C19[5]),  5,9},
  {&(_ZTV8S7394C19[28]),  28,69},
  {&(_ZTV8S7394C19[37]),  37,69},
  {&(_ZTV8S7394C19[46]),  46,69},
  {&(_ZTV8S7394C19[54]),  54,69},
  {&(_ZTV8S7394C19[64]),  64,69},
  {&(_ZTV8S7394C19[69]),  69,69},
  {&(_ZTV8S7394C19[18]),  18,69},
  {&(_tg__ZTV8S7394C18__8S7394C19[6]),  6,8},
  {&(_tg__ZTV8S7394C11__8S7394C18__8S7394C19[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C18__8S7394C19[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C18__8S7394C19[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C19[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__8S7394C19[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__8S7394C19[5]),  5,9},
  {&(_tg__ZTV7S7394C8__8S7394C19[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C19[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C19[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C19[5]),  5,7},
  {&(_tg__ZTV7S7394C8__7S7394C7__8S7394C19[6]),  6,9},
  {&(_tg__ZTV7S7394C5__7S7394C7__8S7394C19[5]),  5,9},
  {&(_tg__ZTV7S7394C2__A2__8S7394C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7394C19[];
extern  VTBL_ENTRY _ZTV8S7394C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C19[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7394C11D0Ev,_ZThn10236_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7394C11D1Ev,_ZThn10236_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N8S7394C11D0Ev,_ZThn9576_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N8S7394C11D1Ev,_ZThn9576_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15832_N8S7394C18D0Ev,_ZThn10252_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15832_N8S7394C18D1Ev,_ZThn10252_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14808_N8S7394C18D0Ev,_ZThn9592_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14808_N8S7394C18D1Ev,_ZThn9592_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7394C18D0Ev,_ZThn16_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7394C18D1Ev,_ZThn16_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N8S7394C14D0Ev,_ZThn10896_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N8S7394C14D1Ev,_ZThn10896_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15792_N8S7394C14D0Ev,_ZThn10236_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15792_N8S7394C14D1Ev,_ZThn10236_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17312_N8S7394C14D0Ev,_ZThn11220_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17312_N8S7394C14D1Ev,_ZThn11220_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N8S7394C10D0Ev,_ZThn11568_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N8S7394C10D1Ev,_ZThn11568_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16832_N8S7394C10D0Ev,_ZThn10908_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16832_N8S7394C10D1Ev,_ZThn10908_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N8S7394C10D0Ev,_ZThn1332_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18352_N8S7394C10D0Ev,_ZThn11892_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N8S7394C10D1Ev,_ZThn1332_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18352_N8S7394C10D1Ev,_ZThn11892_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N7S7394C8D0Ev,_ZThn11568_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N7S7394C8D1Ev,_ZThn11568_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N8S7394C19D0Ev,_ZThn11568_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N8S7394C19D1Ev,_ZThn11568_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16832_N8S7394C19D0Ev,_ZThn10908_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16832_N8S7394C19D1Ev,_ZThn10908_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18352_N8S7394C19D0Ev,_ZThn11892_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N8S7394C19D0Ev,_ZThn1332_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18352_N8S7394C19D1Ev,_ZThn11892_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N8S7394C19D1Ev,_ZThn1332_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N8S7394C19D0Ev,_ZThn1316_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N8S7394C19D1Ev,_ZThn1316_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C19 = {  "S7394C19", // class name
  bases_S7394C19, 15,
  &(vtc_S7394C19[0]), // expected_vtbl_contents
  &(vtt_S7394C19[0]), // expected_vtt_contents
  ABISELECT(18720,12140), // object size
  NSPAIRA(_ZTI8S7394C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7394C19),69, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C19),35, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C20  : S7394C5 {
  void *s7394c20f0;
  int s7394c20f1;
  ::S7394C7 s7394c20f2;
  virtual void  v8(); // _ZN8S7394C202v8Ev
  ~S7394C20(); // tgen
  S7394C20(); // tgen
};
//SIG(-1 S7394C20) C1{ BC2{ vd v2 v3 FC3{ VBC4{ m FD[2] Fc[8]} FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} Fp FL Fi Fp FU5{ m FD FL FD FL Fi}[8] Fc Fp} v1 Fp Fi FC6{ VBC7{ BC4 BC3 VBC2 vd v4 Fp[4] FL Fp[3] FU5 FC2 FD Fs:0 FC4 FD Fp} BC8{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13}}


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

static void Test_S7394C20()
{
  extern Class_Descriptor cd_S7394C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(135,351)];
    init_test(&cd_S7394C20, buf);
    S7394C20 *dp, &lv = *(dp=new (buf) S7394C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2144,1400), "sizeof(S7394C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C20)");
    check_base_class_offset(lv, (S7394C5*), 0, "S7394C20");
    check_field_offset(lv, s7394c20f0, ABISELECT(496,324), "S7394C20.s7394c20f0");
    check_field_offset(lv, s7394c20f1, ABISELECT(504,328), "S7394C20.s7394c20f1");
    check_field_offset(lv, s7394c20f2, ABISELECT(512,332), "S7394C20.s7394c20f2");
    test_class_info(&lv, &cd_S7394C20);
    dp->~S7394C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C20(Test_S7394C20, "S7394C20", ABISELECT(2144,1400));

#else // __cplusplus

extern void _ZN8S7394C20C1Ev();
extern void _ZN8S7394C20D1Ev();
Name_Map name_map_S7394C20[] = {
  NSPAIR(_ZN8S7394C20C1Ev),
  NSPAIR(_ZN8S7394C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
static Base_Class bases_S7394C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C20[];
extern void _ZN8S7394C20D1Ev();
extern void _ZN8S7394C20D0Ev();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void _ZN8S7394C202v8Ev();
static  VTBL_ENTRY vtc_S7394C20[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C20[0]),
  (VTBL_ENTRY)&_ZN8S7394C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C20D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  (VTBL_ENTRY)&_ZN8S7394C202v8Ev,
};
extern VTBL_ENTRY _ZTI8S7394C20[];
extern  VTBL_ENTRY _ZTV8S7394C20[];
Class_Descriptor cd_S7394C20 = {  "S7394C20", // class name
  bases_S7394C20, 1,
  &(vtc_S7394C20[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2144,1400), // object size
  NSPAIRA(_ZTI8S7394C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7394C20),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C21  : virtual S7394C8 , virtual S7394C11 {
  long s7394c21f0;
  int s7394c21f1;
  int s7394c21f2;
  __tsi64 s7394c21f3;
  char s7394c21f4:8;
  __tsi64 s7394c21f5;
  ::S7394C2 s7394c21f6;
  ::S7394C5 s7394c21f7;
  virtual  ~S7394C21(); // _ZN8S7394C21D2Ev
  virtual void  v9(); // _ZN8S7394C212v9Ev
  S7394C21(); // tgen
};
//SIG(1 S7394C21) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v2 v3 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} VBC7{ VBC2 vd v5 Fs FL FC5 FC3[5] FC2[8] FC4[5] FC4 Fp FL FL Fi[2]} vd v1 Fl Fi Fi FL Fc:8 FL FC4 FC5}


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

static void Test_S7394C21()
{
  extern Class_Descriptor cd_S7394C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1073,2780)];
    init_test(&cd_S7394C21, buf);
    S7394C21 *dp, &lv = *(dp=new (buf) S7394C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17152,11116), "sizeof(S7394C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C21)");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(1104,720), "S7394C21");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(1824,1184), "S7394C21");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(848,556), "S7394C21");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(1872,1216), "S7394C21");
    check_base_class_offset(lv, (S7394C8*), ABISELECT(848,556), "S7394C21");
    check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(848,556), "S7394C21");
    check_base_class_offset(lv, (S7394C11*), ABISELECT(2368,1540), "S7394C21");
    check_field_offset(lv, s7394c21f0, ABISELECT(8,4), "S7394C21.s7394c21f0");
    check_field_offset(lv, s7394c21f1, ABISELECT(16,8), "S7394C21.s7394c21f1");
    check_field_offset(lv, s7394c21f2, ABISELECT(20,12), "S7394C21.s7394c21f2");
    check_field_offset(lv, s7394c21f3, ABISELECT(24,16), "S7394C21.s7394c21f3");
    set_bf_and_test(lv, s7394c21f4, ABISELECT(32,24), 0, 8, 1, "S7394C21");
    set_bf_and_test(lv, s7394c21f4, ABISELECT(32,24), 0, 8, hide_sll(1LL<<7), "S7394C21");
    check_field_offset(lv, s7394c21f5, ABISELECT(40,28), "S7394C21.s7394c21f5");
    check_field_offset(lv, s7394c21f6, ABISELECT(48,36), "S7394C21.s7394c21f6");
    check_field_offset(lv, s7394c21f7, ABISELECT(352,232), "S7394C21.s7394c21f7");
    test_class_info(&lv, &cd_S7394C21);
    dp->~S7394C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C21(Test_S7394C21, "S7394C21", ABISELECT(17152,11116));

#else // __cplusplus

extern void _ZN8S7394C21C1Ev();
extern void _ZN8S7394C21D2Ev();
Name_Map name_map_S7394C21[] = {
  NSPAIR(_ZN8S7394C21C1Ev),
  NSPAIR(_ZN8S7394C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
static Base_Class bases_S7394C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(1104,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(1824,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, 1},
  {&cd_S7394C2,    ABISELECT(848,556), //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_S7394C5,    ABISELECT(1872,1216), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(848,556), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //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_S7394C11,    ABISELECT(2368,1540), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C21[];
extern void _ZN8S7394C21D1Ev();
extern void _ZN8S7394C21D0Ev();
extern void _ZN8S7394C212v9Ev();
extern void ABISELECT(_ZTv0_n40_N8S7394C21D1Ev,_ZTv0_n20_N8S7394C21D1Ev)();
extern void ABISELECT(_ZThn848_N8S7394C21D1Ev,_ZThn556_N8S7394C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C21D0Ev,_ZTv0_n20_N8S7394C21D0Ev)();
extern void ABISELECT(_ZThn848_N8S7394C21D0Ev,_ZThn556_N8S7394C21D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C21D1Ev,_ZTv0_n12_N8S7394C21D1Ev)();
extern void ABISELECT(_ZThn1872_N8S7394C21D1Ev,_ZThn1216_N8S7394C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C21D0Ev,_ZTv0_n12_N8S7394C21D0Ev)();
extern void ABISELECT(_ZThn1872_N8S7394C21D0Ev,_ZThn1216_N8S7394C21D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C21D1Ev,_ZTv0_n24_N8S7394C21D1Ev)();
extern void ABISELECT(_ZThn2368_N8S7394C21D1Ev,_ZThn1540_N8S7394C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C21D0Ev,_ZTv0_n24_N8S7394C21D0Ev)();
extern void ABISELECT(_ZThn2368_N8S7394C21D0Ev,_ZThn1540_N8S7394C21D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY vtc_S7394C21[] = {
  ABISELECT(2368,1540),
  ABISELECT(1872,1216),
  ABISELECT(1824,1184),
  ABISELECT(848,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C21[0]),
  (VTBL_ENTRY)&_ZN8S7394C21D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C21D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C212v9Ev,
  0,
  ABISELECT(-848,-556),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-848,-556),
  (VTBL_ENTRY)&(_ZTI8S7394C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C21D1Ev,_ZTv0_n20_N8S7394C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C21D0Ev,_ZTv0_n20_N8S7394C21D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-1872,-1216),
  ABISELECT(-1872,-1216),
  (VTBL_ENTRY)&(_ZTI8S7394C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C21D1Ev,_ZTv0_n12_N8S7394C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C21D0Ev,_ZTv0_n12_N8S7394C21D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  0,
  ABISELECT(-2368,-1540),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  ABISELECT(-2368,-1540),
  (VTBL_ENTRY)&(_ZTI8S7394C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C21D1Ev,_ZTv0_n24_N8S7394C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C21D0Ev,_ZTv0_n24_N8S7394C21D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern VTBL_ENTRY _ZTV8S7394C21[];
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C21[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C21[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C21[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C21[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__8S7394C21[] = {
  0,
  ABISELECT(1520,984),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(1520,984),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__8S7394C21[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C21[] = {
  {&(_ZTV8S7394C21[6]),  6,37},
  {&(_ZTV8S7394C21[15]),  15,37},
  {&(_ZTV8S7394C21[23]),  23,37},
  {&(_ZTV8S7394C21[34]),  34,37},
  {&(_tg__ZTV7S7394C8__8S7394C21[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C21[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C21[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C21[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__8S7394C21[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__8S7394C21[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S7394C21[];
extern  VTBL_ENTRY _ZTV8S7394C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C21[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C21D0Ev,_ZTv0_n24_N8S7394C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S7394C21D0Ev,_ZThn1540_N8S7394C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C21D1Ev,_ZTv0_n24_N8S7394C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S7394C21D1Ev,_ZThn1540_N8S7394C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C21D0Ev,_ZTv0_n12_N8S7394C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S7394C21D0Ev,_ZThn1216_N8S7394C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C21D1Ev,_ZTv0_n12_N8S7394C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S7394C21D1Ev,_ZThn1216_N8S7394C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C21D0Ev,_ZTv0_n20_N8S7394C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S7394C21D0Ev,_ZThn556_N8S7394C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C21D1Ev,_ZTv0_n20_N8S7394C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S7394C21D1Ev,_ZThn556_N8S7394C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C21 = {  "S7394C21", // class name
  bases_S7394C21, 6,
  &(vtc_S7394C21[0]), // expected_vtbl_contents
  &(vtt_S7394C21[0]), // expected_vtt_contents
  ABISELECT(17152,11116), // object size
  NSPAIRA(_ZTI8S7394C21),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7394C21),37, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C21),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C17  : virtual S7394C3 , S7394C18 , S7394C19 , S7394C11 , S7394C15 {
  __tsi64 s7394c17f0;
  int s7394c17f1;
  __tsi64 s7394c17f2;
  int s7394c17f3;
  char s7394c17f4;
  ::S7394C20 s7394c17f5;
  void *s7394c17f6;
  __tsi64 s7394c17f7[6];
  __tsi64 s7394c17f8;
  __tsi64 s7394c17f9[10];
  ::S7394C21 s7394c17f10[5];
  int s7394c17f11;
  virtual  ~S7394C17(); // _ZN8S7394C17D2Ev
  S7394C17(); // tgen
};
//SIG(-1 S7394C17) C1{ VBC2{ m FD[2] Fc[8]} BC3{ VBC4{ VBC5{ BC2 BC6{ VBC2 FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]} VBC7{ vd v1 v2 FC6 Fp FL Fi Fp FU8{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU8 FC7 FD Fs:0 FC2 FD Fp} vd v4 Fs FL FC7 FC2[5] FC5[8] FC6[5] FC6 Fp FL FL Fi[2]} vd Fc:0 FL:64 Fi} BC9{ VBC3 BC10{ VBC11{ VBC5 BC12{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} BC5 VBC4 VBC6 vd FL FD Fp[6]} BC13{ VBC11 vd v5 FC7 Fi Fi FU8} vd Fi Fi FC6 FC2 Fi FL Fi FL[3] FL FL FL:25} BC4 BC14{ BC5 vd FC6 Fp[5] Fi FL[9] FC15{} FL[6] Fc:0 FL FD FU8 FC2 Fi Fi Fl} vd FL Fi FL Fi Fc FC16{ BC7 v6 Fp Fi FC11} Fp FL[6] FL FL[10] FC17{ VBC5 VBC4 vd v7 Fl Fi Fi FL Fc:8 FL FC6 FC7}[5] Fi}


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

static void Test_S7394C17()
{
  extern Class_Descriptor cd_S7394C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7702,19984)];
    init_test(&cd_S7394C17, buf);
    S7394C17 *dp, &lv = *(dp=new (buf) S7394C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(123216,79932), "sizeof(S7394C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C17)");
    /*is_ambiguous_... S7394C17::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*), ABISELECT(106512,69108), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(106512,69108), "S7394C17");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(106512,69108), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*), ABISELECT(106512,69108), "S7394C17");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C15*), ABISELECT(106512,69108), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(121600,78880), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(121344,78716), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(122320,79344), "S7394C17");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(122320,79344), "S7394C17");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C15*), ABISELECT(122320,79344), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(121344,78716), "S7394C17");
    check_base_class_offset(lv, (S7394C8*)(S7394C7*), ABISELECT(121344,78716), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(121344,78716), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C18*), ABISELECT(106560,69140), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C18*), ABISELECT(106560,69140), "S7394C17");
    check_base_class_offset(lv, (S7394C11*)(S7394C10*)(S7394C19*), ABISELECT(106560,69140), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C18*), 0, "S7394C17");
    check_base_class_offset(lv, (S7394C18*)(S7394C19*), ABISELECT(122816,79668), "S7394C17");
    check_base_class_offset(lv, (S7394C9*)(S7394C7*), ABISELECT(122856,79688), "S7394C17");
    check_base_class_offset(lv, (S7394C7*)(S7394C10*)(S7394C19*), ABISELECT(122848,79684), "S7394C17");
    check_base_class_offset(lv, (S7394C7*)(S7394C14*)(S7394C19*), ABISELECT(122848,79684), "S7394C17");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(288,180), "S7394C17");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(32,16), "S7394C17");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(32,16), "S7394C17");
    /*is_ambiguous_... S7394C10::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C10*)(S7394C19*), ABISELECT(122960,79768), "S7394C17");
    check_base_class_offset(lv, (S7394C10*)(S7394C19*), ABISELECT(32,16), "S7394C17");
    check_base_class_offset(lv, (S7394C14*)(S7394C19*), ABISELECT(1072,688), "S7394C17");
    check_base_class_offset(lv, (S7394C19*), ABISELECT(32,16), "S7394C17");
    /*is_ambiguous_... S7394C17::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C11*), ABISELECT(2064,1332), "S7394C17");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C15*), ABISELECT(17104,11072), "S7394C17");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C15*), ABISELECT(16848,10908), "S7394C17");
    check_base_class_offset(lv, (S7394C8*)(S7394C15*), ABISELECT(16848,10908), "S7394C17");
    check_base_class_offset(lv, (S7394C15*), ABISELECT(16848,10908), "S7394C17");
    check_field_offset(lv, s7394c17f0, ABISELECT(18416,11956), "S7394C17.s7394c17f0");
    check_field_offset(lv, s7394c17f1, ABISELECT(18424,11964), "S7394C17.s7394c17f1");
    check_field_offset(lv, s7394c17f2, ABISELECT(18432,11968), "S7394C17.s7394c17f2");
    check_field_offset(lv, s7394c17f3, ABISELECT(18440,11976), "S7394C17.s7394c17f3");
    check_field_offset(lv, s7394c17f4, ABISELECT(18444,11980), "S7394C17.s7394c17f4");
    check_field_offset(lv, s7394c17f5, ABISELECT(18448,11984), "S7394C17.s7394c17f5");
    check_field_offset(lv, s7394c17f6, ABISELECT(20592,13384), "S7394C17.s7394c17f6");
    check_field_offset(lv, s7394c17f7, ABISELECT(20600,13388), "S7394C17.s7394c17f7");
    check_field_offset(lv, s7394c17f8, ABISELECT(20648,13436), "S7394C17.s7394c17f8");
    check_field_offset(lv, s7394c17f9, ABISELECT(20656,13444), "S7394C17.s7394c17f9");
    check_field_offset(lv, s7394c17f10, ABISELECT(20736,13524), "S7394C17.s7394c17f10");
    check_field_offset(lv, s7394c17f11, ABISELECT(106496,69104), "S7394C17.s7394c17f11");
    test_class_info(&lv, &cd_S7394C17);
    dp->~S7394C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C17(Test_S7394C17, "S7394C17", ABISELECT(123216,79932));

#else // __cplusplus

extern void _ZN8S7394C17C1Ev();
extern void _ZN8S7394C17D2Ev();
Name_Map name_map_S7394C17[] = {
  NSPAIR(_ZN8S7394C17C1Ev),
  NSPAIR(_ZN8S7394C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
extern Class_Descriptor cd_S7394C18;
extern VTBL_ENTRY _ZTI8S7394C18[];
extern  VTBL_ENTRY _ZTV8S7394C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C18[];
extern Class_Descriptor cd_S7394C18;
extern VTBL_ENTRY _ZTI8S7394C18[];
extern  VTBL_ENTRY _ZTV8S7394C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C18[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C7;
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C10;
extern VTBL_ENTRY _ZTI8S7394C10[];
extern  VTBL_ENTRY _ZTV8S7394C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C10[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
extern Class_Descriptor cd_S7394C19;
extern VTBL_ENTRY _ZTI8S7394C19[];
extern  VTBL_ENTRY _ZTV8S7394C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C19[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C15;
extern VTBL_ENTRY _ZTI8S7394C15[];
extern  VTBL_ENTRY _ZTV8S7394C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C15[];
static Base_Class bases_S7394C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(106512,69108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7394C3,    ABISELECT(121600,78880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(121344,78716), //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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(122320,79344), //bcp->offset
    66, //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
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(121344,78716), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7394C11,    ABISELECT(106560,69140), //bcp->offset
    47, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7394C18,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C18,    ABISELECT(122816,79668), //bcp->offset
    75, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(122856,79688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C7,    ABISELECT(122848,79684), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7394C3,    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
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7394C2,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7394C8,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7394C2,    ABISELECT(122960,79768), //bcp->offset
    92, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7394C10,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7394C14,    ABISELECT(1072,688), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7394C19,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C11,    ABISELECT(2064,1332), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C3,    ABISELECT(17104,11072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(16848,10908), //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(16848,10908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7394C15,    ABISELECT(16848,10908), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C17[];
extern void _ZN8S7394C17D1Ev();
extern void _ZN8S7394C17D0Ev();
extern void ABISELECT(_ZThn32_N8S7394C17D1Ev,_ZThn16_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S7394C17D0Ev,_ZThn16_N8S7394C17D0Ev)();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZThn1072_N8S7394C17D1Ev,_ZThn688_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn1072_N8S7394C17D0Ev,_ZThn688_N8S7394C17D0Ev)();
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZThn2064_N8S7394C17D1Ev,_ZThn1332_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn2064_N8S7394C17D0Ev,_ZThn1332_N8S7394C17D0Ev)();
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZThn16848_N8S7394C17D1Ev,_ZThn10908_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn16848_N8S7394C17D0Ev,_ZThn10908_N8S7394C17D0Ev)();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn106560_N8S7394C17D1Ev,_ZThn69140_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn106560_N8S7394C17D0Ev,_ZThn69140_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn121344_N8S7394C17D1Ev,_ZThn78716_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn121344_N8S7394C17D0Ev,_ZThn78716_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn122320_N8S7394C17D1Ev,_ZThn79344_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn122320_N8S7394C17D0Ev,_ZThn79344_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn122816_N8S7394C17D1Ev,_ZThn79668_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn122816_N8S7394C17D0Ev,_ZThn79668_N8S7394C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn122848_N8S7394C17D1Ev,_ZThn79684_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn122848_N8S7394C17D0Ev,_ZThn79684_N8S7394C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7394C17[] = {
  ABISELECT(122960,79768),
  ABISELECT(122848,79684),
  ABISELECT(122816,79668),
  ABISELECT(122320,79344),
  ABISELECT(106512,69108),
  ABISELECT(121344,78716),
  ABISELECT(106560,69140),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&_ZN8S7394C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C17D0Ev,
  ABISELECT(122784,79652),
  ABISELECT(122928,79752),
  ABISELECT(106528,69124),
  ABISELECT(121312,78700),
  ABISELECT(122816,79668),
  ABISELECT(122288,79328),
  ABISELECT(106480,69092),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C17D1Ev,_ZThn16_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C17D0Ev,_ZThn16_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(121248,78656),
  ABISELECT(105440,68420),
  ABISELECT(120272,78028),
  ABISELECT(121776,78996),
  ABISELECT(-1072,-688),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C17D1Ev,_ZThn688_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C17D0Ev,_ZThn688_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(120256,78012),
  ABISELECT(104448,67776),
  ABISELECT(119280,77384),
  ABISELECT(-2064,-1332),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C17D1Ev,_ZThn1332_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C17D0Ev,_ZThn1332_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  ABISELECT(105472,68436),
  ABISELECT(89664,58200),
  ABISELECT(-16848,-10908),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C17D1Ev,_ZThn10908_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C17D0Ev,_ZThn10908_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  ABISELECT(-106560,-69140),
  ABISELECT(15760,10204),
  ABISELECT(-48,-32),
  ABISELECT(14784,9576),
  ABISELECT(-106560,-69140),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  0,
  ABISELECT(-121344,-78716),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(-121344,-78716),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-122320,-79344),
  ABISELECT(-122320,-79344),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  ABISELECT(-122816,-79668),
  ABISELECT(-496,-324),
  ABISELECT(-16304,-10560),
  ABISELECT(-1472,-952),
  ABISELECT(-16256,-10528),
  ABISELECT(-122816,-79668),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev),
  ABISELECT(-122848,-79684),
  ABISELECT(-528,-340),
  ABISELECT(-16336,-10576),
  ABISELECT(-1504,-968),
  ABISELECT(-122848,-79684),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev),
  ABISELECT(-16448,-10660),
  ABISELECT(-122960,-79768),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
};
extern VTBL_ENTRY _ZTV8S7394C17[];
extern void _ZN8S7394C18D1Ev();
extern void _ZN8S7394C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C18__A__8S7394C17[] = {
  ABISELECT(122320,79344),
  ABISELECT(106512,69108),
  ABISELECT(121344,78716),
  ABISELECT(106560,69140),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&_ZN8S7394C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C18D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn106560_N8S7394C18D1Ev,_ZThn69140_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn106560_N8S7394C18D0Ev,_ZThn69140_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C18__A__8S7394C17[] = {
  0,
  ABISELECT(-106560,-69140),
  ABISELECT(15760,10204),
  ABISELECT(-48,-32),
  ABISELECT(14784,9576),
  ABISELECT(-106560,-69140),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn121344_N8S7394C18D1Ev,_ZThn78716_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn121344_N8S7394C18D0Ev,_ZThn78716_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C18__A__8S7394C17[] = {
  0,
  ABISELECT(-121344,-78716),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(-121344,-78716),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn122320_N8S7394C18D1Ev,_ZThn79344_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn122320_N8S7394C18D0Ev,_ZThn79344_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C18__A__8S7394C17[] = {
  0,
  0,
  ABISELECT(-122320,-79344),
  ABISELECT(-122320,-79344),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C19D1Ev();
extern void _ZN8S7394C19D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C19__8S7394C17[] = {
  ABISELECT(122784,79652),
  ABISELECT(122928,79752),
  ABISELECT(106528,69124),
  ABISELECT(121312,78700),
  ABISELECT(122816,79668),
  ABISELECT(122288,79328),
  ABISELECT(106480,69092),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&_ZN8S7394C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C19D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN8S7394C10D1Ev();
extern void _ZN8S7394C10D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C108S7394C19__8S7394C17[] = {
  ABISELECT(122928,79752),
  ABISELECT(106528,69124),
  ABISELECT(121312,78700),
  ABISELECT(122816,79668),
  ABISELECT(122288,79328),
  ABISELECT(106480,69092),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&_ZN8S7394C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C10D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C108S7394C19__A1__8S7394C17[] = {
  ABISELECT(122288,79328),
  ABISELECT(106480,69092),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C108S7394C19__A1__8S7394C17[] = {
  ABISELECT(106480,69092),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn122288_N7S7394C8D1Ev,_ZThn79328_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn122288_N7S7394C8D0Ev,_ZThn79328_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C108S7394C19__A1__8S7394C17[] = {
  0,
  0,
  ABISELECT(-122288,-79328),
  ABISELECT(-122288,-79328),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn122816_N8S7394C10D1Ev,_ZThn79668_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn122816_N8S7394C10D0Ev,_ZThn79668_N8S7394C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C108S7394C19__8S7394C17[] = {
  ABISELECT(-122816,-79668),
  ABISELECT(-528,-340),
  ABISELECT(-16336,-10576),
  ABISELECT(-1504,-968),
  ABISELECT(-122816,-79668),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn121312_N8S7394C10D1Ev,_ZThn78700_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn121312_N8S7394C10D0Ev,_ZThn78700_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C108S7394C19__8S7394C17[] = {
  0,
  ABISELECT(-121312,-78700),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(-121312,-78700),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn122288_N8S7394C10D1Ev,_ZThn79328_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn122288_N8S7394C10D0Ev,_ZThn79328_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C108S7394C19__8S7394C17[] = {
  0,
  0,
  ABISELECT(-122288,-79328),
  ABISELECT(-122288,-79328),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn106528_N8S7394C10D1Ev,_ZThn69124_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn106528_N8S7394C10D0Ev,_ZThn69124_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C108S7394C19__8S7394C17[] = {
  0,
  ABISELECT(-106528,-69124),
  ABISELECT(15760,10204),
  ABISELECT(-48,-32),
  ABISELECT(14784,9576),
  ABISELECT(-106528,-69124),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C108S7394C19__8S7394C17[] = {
  ABISELECT(-16448,-10660),
  ABISELECT(-122928,-79752),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
};
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C19__8S7394C17[] = {
  ABISELECT(121248,78656),
  ABISELECT(105440,68420),
  ABISELECT(120272,78028),
  ABISELECT(121776,78996),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn121776_N8S7394C14D1Ev,_ZThn78996_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn121776_N8S7394C14D0Ev,_ZThn78996_N8S7394C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C148S7394C19__8S7394C17[] = {
  ABISELECT(-121776,-78996),
  ABISELECT(-528,-340),
  ABISELECT(-16336,-10576),
  ABISELECT(-1504,-968),
  ABISELECT(-121776,-78996),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn120272_N8S7394C14D1Ev,_ZThn78028_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn120272_N8S7394C14D0Ev,_ZThn78028_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C148S7394C19__8S7394C17[] = {
  0,
  ABISELECT(-120272,-78028),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(-120272,-78028),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn121248_N8S7394C14D1Ev,_ZThn78656_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn121248_N8S7394C14D0Ev,_ZThn78656_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C148S7394C19__8S7394C17[] = {
  0,
  0,
  ABISELECT(-121248,-78656),
  ABISELECT(-121248,-78656),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn122784_N8S7394C19D1Ev,_ZThn79652_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn122784_N8S7394C19D0Ev,_ZThn79652_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C18__8S7394C19__8S7394C17[] = {
  ABISELECT(-122784,-79652),
  ABISELECT(-496,-324),
  ABISELECT(-16304,-10560),
  ABISELECT(-1472,-952),
  ABISELECT(-16256,-10528),
  ABISELECT(-122784,-79652),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn106528_N8S7394C19D1Ev,_ZThn69124_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn106528_N8S7394C19D0Ev,_ZThn69124_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C19__8S7394C17[] = {
  0,
  ABISELECT(-106528,-69124),
  ABISELECT(15760,10204),
  ABISELECT(-48,-32),
  ABISELECT(14784,9576),
  ABISELECT(-106528,-69124),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn121312_N8S7394C19D1Ev,_ZThn78700_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn121312_N8S7394C19D0Ev,_ZThn78700_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C19__8S7394C17[] = {
  0,
  ABISELECT(-121312,-78700),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(-121312,-78700),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn122288_N8S7394C19D1Ev,_ZThn79328_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn122288_N8S7394C19D0Ev,_ZThn79328_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C19__8S7394C17[] = {
  0,
  0,
  ABISELECT(-122288,-79328),
  ABISELECT(-122288,-79328),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn122816_N8S7394C19D1Ev,_ZThn79668_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn122816_N8S7394C19D0Ev,_ZThn79668_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C19__8S7394C17[] = {
  ABISELECT(-122816,-79668),
  ABISELECT(-528,-340),
  ABISELECT(-16336,-10576),
  ABISELECT(-1504,-968),
  ABISELECT(-122816,-79668),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C19__8S7394C17[] = {
  ABISELECT(-16448,-10660),
  ABISELECT(-122928,-79752),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
};
extern void ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C19__8S7394C17[] = {
  ABISELECT(121248,78656),
  ABISELECT(105440,68420),
  ABISELECT(120272,78028),
  ABISELECT(121776,78996),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__A__8S7394C17[] = {
  ABISELECT(120256,78012),
  ABISELECT(104448,67776),
  ABISELECT(119280,77384),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn119280_N8S7394C11D1Ev,_ZThn77384_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn119280_N8S7394C11D0Ev,_ZThn77384_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__A__8S7394C17[] = {
  0,
  ABISELECT(-119280,-77384),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(-119280,-77384),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn120256_N8S7394C11D1Ev,_ZThn78012_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn120256_N8S7394C11D0Ev,_ZThn78012_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__A__8S7394C17[] = {
  0,
  0,
  ABISELECT(-120256,-78012),
  ABISELECT(-120256,-78012),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C15D1Ev();
extern void _ZN8S7394C15D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__8S7394C17[] = {
  ABISELECT(105472,68436),
  ABISELECT(89664,58200),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&_ZN8S7394C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C15D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C15__A2__8S7394C17[] = {
  ABISELECT(105472,68436),
  ABISELECT(89664,58200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C15__A3__8S7394C17[] = {
  ABISELECT(89664,58200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn105472_N7S7394C8D1Ev,_ZThn68436_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn105472_N7S7394C8D0Ev,_ZThn68436_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C15__A2__8S7394C17[] = {
  0,
  0,
  ABISELECT(-105472,-68436),
  ABISELECT(-105472,-68436),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev)();
extern void ABISELECT(_ZThn105472_N8S7394C15D1Ev,_ZThn68436_N8S7394C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev)();
extern void ABISELECT(_ZThn105472_N8S7394C15D0Ev,_ZThn68436_N8S7394C15D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C15__8S7394C17[] = {
  0,
  0,
  ABISELECT(-105472,-68436),
  ABISELECT(-105472,-68436),
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C17[] = {
  ABISELECT(15760,10204),
  ABISELECT(-48,-32),
  ABISELECT(14784,9576),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn14784_N8S7394C11D1Ev,_ZThn9576_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn14784_N8S7394C11D0Ev,_ZThn9576_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__8S7394C17[] = {
  0,
  ABISELECT(-14784,-9576),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(-14784,-9576),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn15760_N8S7394C11D1Ev,_ZThn10204_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn15760_N8S7394C11D0Ev,_ZThn10204_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__8S7394C17[] = {
  0,
  0,
  ABISELECT(-15760,-10204),
  ABISELECT(-15760,-10204),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C17[] = {
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C17[] = {
  ABISELECT(-14832,-9608),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn976_N7S7394C8D1Ev,_ZThn628_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn976_N7S7394C8D0Ev,_ZThn628_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C17[] = {
  0,
  0,
  ABISELECT(-976,-628),
  ABISELECT(-976,-628),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C18D1Ev();
extern void _ZN8S7394C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C18__A1__8S7394C17[] = {
  ABISELECT(-496,-324),
  ABISELECT(-16304,-10560),
  ABISELECT(-1472,-952),
  ABISELECT(-16256,-10528),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&_ZN8S7394C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C18D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev)();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C18__A1__8S7394C17[] = {
  0,
  ABISELECT(16256,10528),
  ABISELECT(15760,10204),
  ABISELECT(-48,-32),
  ABISELECT(14784,9576),
  ABISELECT(16256,10528),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C18__A1__8S7394C17[] = {
  0,
  ABISELECT(1472,952),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(1472,952),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C18__A1__8S7394C17[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C17[] = {
  ABISELECT(-528,-340),
  ABISELECT(-16336,-10576),
  ABISELECT(-1504,-968),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7__8S7394C17[] = {
  0,
  ABISELECT(1504,968),
  ABISELECT(976,628),
  ABISELECT(-14832,-9608),
  ABISELECT(1504,968),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C7__8S7394C17[] = {
  0,
  0,
  ABISELECT(528,340),
  ABISELECT(528,340),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C17[] = {
  ABISELECT(-16448,-10660),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
static  VTT_ENTRY vtt_S7394C17[] = {
  {&(_ZTV8S7394C17[9]),  9,95},
  {&(_tg__ZTV8S7394C18__A__8S7394C17[6]),  6,8},
  {&(_tg__ZTV8S7394C11__8S7394C18__A__8S7394C17[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C18__A__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C18__A__8S7394C17[5]),  5,9},
  {&(_tg__ZTV8S7394C19__8S7394C17[9]),  9,12},
  {&(_tg__ZTV8S7394C108S7394C19__8S7394C17[8]),  8,11},
  {&(_tg__ZTV7S7394C88S7394C108S7394C19__A1__8S7394C17[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C108S7394C19__A1__8S7394C17[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C108S7394C19__A1__8S7394C17[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C108S7394C19__8S7394C17[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C108S7394C19__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C108S7394C19__8S7394C17[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C108S7394C19__8S7394C17[7]),  7,10},
  {&(_tg__ZTV7S7394C2__A2__8S7394C108S7394C19__8S7394C17[3]),  3,3},
  {&(_tg__ZTV8S7394C148S7394C19__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C148S7394C19__8S7394C17[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C148S7394C19__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C148S7394C19__8S7394C17[5]),  5,9},
  {&(_tg__ZTV8S7394C18__8S7394C19__8S7394C17[7]),  7,9},
  {&(_tg__ZTV8S7394C11__8S7394C19__8S7394C17[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C19__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C19__8S7394C17[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C19__8S7394C17[6]),  6,8},
  {&(_tg__ZTV7S7394C2__A2__8S7394C19__8S7394C17[3]),  3,3},
  {&(_tg__ZTV8S7394C14__8S7394C19__8S7394C17[6]),  6,9},
  {&(_tg__ZTV8S7394C11__A__8S7394C17[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__A__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__A__8S7394C17[5]),  5,9},
  {&(_tg__ZTV8S7394C15__8S7394C17[4]),  4,7},
  {&(_tg__ZTV7S7394C88S7394C15__A2__8S7394C17[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C15__A3__8S7394C17[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C15__A2__8S7394C17[5]),  5,9},
  {&(_tg__ZTV7S7394C5__8S7394C15__8S7394C17[5]),  5,9},
  {&(_ZTV8S7394C17[54]),  54,95},
  {&(_ZTV8S7394C17[63]),  63,95},
  {&(_ZTV8S7394C17[71]),  71,95},
  {&(_ZTV8S7394C17[20]),  20,95},
  {&(_ZTV8S7394C17[82]),  82,95},
  {&(_ZTV8S7394C17[90]),  90,95},
  {&(_ZTV8S7394C17[95]),  95,95},
  {&(_ZTV8S7394C17[29]),  29,95},
  {&(_ZTV8S7394C17[37]),  37,95},
  {&(_ZTV8S7394C17[44]),  44,95},
  {&(_tg__ZTV8S7394C11__8S7394C17[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__8S7394C17[5]),  5,9},
  {&(_tg__ZTV7S7394C8__8S7394C17[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C17[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C17[5]),  5,9},
  {&(_tg__ZTV8S7394C18__A1__8S7394C17[6]),  6,8},
  {&(_tg__ZTV8S7394C11__8S7394C18__A1__8S7394C17[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C18__A1__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C18__A1__8S7394C17[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C17[5]),  5,7},
  {&(_tg__ZTV7S7394C8__7S7394C7__8S7394C17[6]),  6,9},
  {&(_tg__ZTV7S7394C5__7S7394C7__8S7394C17[5]),  5,9},
  {&(_tg__ZTV7S7394C2__A2__8S7394C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7394C17[];
extern  VTBL_ENTRY _ZTV8S7394C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C17[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn105472_N8S7394C15D0Ev,_ZThn68436_N8S7394C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn105472_N8S7394C15D1Ev,_ZThn68436_N8S7394C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15760_N8S7394C11D0Ev,_ZThn10204_N8S7394C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120256_N8S7394C11D0Ev,_ZThn78012_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15760_N8S7394C11D1Ev,_ZThn10204_N8S7394C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120256_N8S7394C11D1Ev,_ZThn78012_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N8S7394C11D0Ev,_ZThn9576_N8S7394C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn119280_N8S7394C11D0Ev,_ZThn77384_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N8S7394C11D1Ev,_ZThn9576_N8S7394C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn119280_N8S7394C11D1Ev,_ZThn77384_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122288_N8S7394C19D0Ev,_ZThn79328_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122288_N8S7394C19D1Ev,_ZThn79328_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121312_N8S7394C19D0Ev,_ZThn78700_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121312_N8S7394C19D1Ev,_ZThn78700_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122816_N8S7394C19D0Ev,_ZThn79668_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn106528_N8S7394C19D0Ev,_ZThn69124_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122816_N8S7394C19D1Ev,_ZThn79668_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn106528_N8S7394C19D1Ev,_ZThn69124_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122784_N8S7394C19D0Ev,_ZThn79652_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122784_N8S7394C19D1Ev,_ZThn79652_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121248_N8S7394C14D0Ev,_ZThn78656_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121248_N8S7394C14D1Ev,_ZThn78656_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120272_N8S7394C14D0Ev,_ZThn78028_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120272_N8S7394C14D1Ev,_ZThn78028_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121776_N8S7394C14D0Ev,_ZThn78996_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121776_N8S7394C14D1Ev,_ZThn78996_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122288_N8S7394C10D0Ev,_ZThn79328_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122288_N8S7394C10D1Ev,_ZThn79328_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121312_N8S7394C10D0Ev,_ZThn78700_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121312_N8S7394C10D1Ev,_ZThn78700_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn106528_N8S7394C10D0Ev,_ZThn69124_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn122816_N8S7394C10D0Ev,_ZThn79668_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn106528_N8S7394C10D1Ev,_ZThn69124_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn122816_N8S7394C10D1Ev,_ZThn79668_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N7S7394C8D0Ev,_ZThn628_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn105472_N7S7394C8D0Ev,_ZThn68436_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn122288_N7S7394C8D0Ev,_ZThn79328_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N7S7394C8D1Ev,_ZThn628_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn105472_N7S7394C8D1Ev,_ZThn68436_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn122288_N7S7394C8D1Ev,_ZThn79328_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122320_N8S7394C18D0Ev,_ZThn79344_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122320_N8S7394C18D1Ev,_ZThn79344_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121344_N8S7394C18D0Ev,_ZThn78716_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121344_N8S7394C18D1Ev,_ZThn78716_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn106560_N8S7394C18D0Ev,_ZThn69140_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn106560_N8S7394C18D1Ev,_ZThn69140_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122816_N8S7394C17D0Ev,_ZThn79668_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122816_N8S7394C17D1Ev,_ZThn79668_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122320_N8S7394C17D0Ev,_ZThn79344_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122320_N8S7394C17D1Ev,_ZThn79344_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121344_N8S7394C17D0Ev,_ZThn78716_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn121344_N8S7394C17D1Ev,_ZThn78716_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122848_N8S7394C17D0Ev,_ZThn79684_N8S7394C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn106560_N8S7394C17D0Ev,_ZThn69140_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn122848_N8S7394C17D1Ev,_ZThn79684_N8S7394C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn106560_N8S7394C17D1Ev,_ZThn69140_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C17 = {  "S7394C17", // class name
  bases_S7394C17, 22,
  &(vtc_S7394C17[0]), // expected_vtbl_contents
  &(vtt_S7394C17[0]), // expected_vtt_contents
  ABISELECT(123216,79932), // object size
  NSPAIRA(_ZTI8S7394C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7394C17),95, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C17),58, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C12  : virtual S7394C13 , virtual S7394C2 , S7394C17 , S7394C19 {
  __tsi64 s7394c12f0:4;
  long double s7394c12f1;
  __tsi64 s7394c12f2;
  ::S7394C3 s7394c12f3;
  int s7394c12f4[9];
  virtual  ~S7394C12(); // _ZN8S7394C12D2Ev
  S7394C12(); // tgen
};
//SIG(-1 S7394C12) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m FD[2] Fc[8]} BC7{ VBC6 FL[4] FC6 Fi FC6 FL Fp FC6 Fp[4]} VBC8{ vd v1 v2 FC7 Fp FL Fi Fp FU9{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU9 FC8 FD Fs:0 FC6 FD Fp} BC10{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} vd v4 FC8 Fi Fi FU9} VBC11{ BC5 vd FC7 Fp[5] Fi FL[9] FC12{} FL[6] Fc:0 FL FD FU9 FC6 Fi Fi Fl} VBC13{ VBC5 vd v5 Fs FL FC8 FC6[5] FC5[8] FC7[5] FC7 Fp FL FL Fi[2]} v6 Fi Fi FC13 FL Fi FD Fp Fi} VBC7 BC14{ VBC6 BC15{ VBC13 vd Fc:0 FL:64 Fi} BC16{ VBC15 BC17{ VBC4 BC5 VBC13 VBC7 vd FL FD Fp[6]} BC3 vd Fi Fi FC7 FC6 Fi FL Fi FL[3] FL FL FL:25} BC13 BC11 vd FL Fi FL Fi Fc FC18{ BC8 v7 Fp Fi FC4} Fp FL[6] FL FL[10] FC19{ VBC5 VBC13 vd v8 Fl Fi Fi FL Fc:8 FL FC7 FC8}[5] Fi} BC16 vd FL:4 FD FL FC6 Fi[9]}


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

static void Test_S7394C12()
{
  extern Class_Descriptor cd_S7394C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8992,23336)];
    init_test(&cd_S7394C12, buf);
    S7394C12 *dp, &lv = *(dp=new (buf) S7394C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(143856,93340), "sizeof(S7394C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C12)");
    /*is_ambiguous_... S7394C12::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(125952,81716), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(126672,82180), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C15*), ABISELECT(126672,82180), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*), ABISELECT(126672,82180), "S7394C12");
    /*is_ambiguous_... S7394C17::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C17*), ABISELECT(126672,82180), "S7394C12");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(126672,82180), "S7394C12");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C15*)(S7394C17*), ABISELECT(126672,82180), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(126672,82180), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(125696,81552), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(126720,82212), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C15*), ABISELECT(126720,82212), "S7394C12");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(126720,82212), "S7394C12");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C15*)(S7394C17*), ABISELECT(126720,82212), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(126720,82212), "S7394C12");
    check_base_class_offset(lv, (S7394C8*)(S7394C7*), ABISELECT(125696,81552), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(125696,81552), "S7394C12");
    /*is_ambiguous_... S7394C17::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C11*)(S7394C17*), ABISELECT(125696,81552), "S7394C12");
    check_base_class_offset(lv, (S7394C9*)(S7394C7*), ABISELECT(125592,81472), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C14 */ AMB_check_base_class_offset(lv, (S7394C7*)(S7394C14*), ABISELECT(125584,81468), "S7394C12");
    check_base_class_offset(lv, (S7394C7*)(S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(125584,81468), "S7394C12");
    check_base_class_offset(lv, (S7394C7*)(S7394C14*)(S7394C19*)(S7394C17*), ABISELECT(125584,81468), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C7*)(S7394C10*)(S7394C19*), ABISELECT(125584,81468), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C7*)(S7394C14*)(S7394C19*), ABISELECT(125584,81468), "S7394C12");
    check_base_class_offset(lv, (S7394C14*)(S7394C13*), ABISELECT(125040,81120), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C15*), ABISELECT(127472,82700), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C15*), ABISELECT(127216,82536), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C15*), ABISELECT(127216,82536), "S7394C12");
    check_base_class_offset(lv, (S7394C15*)(S7394C13*), ABISELECT(127216,82536), "S7394C12");
    check_base_class_offset(lv, (S7394C11*)(S7394C13*), ABISELECT(128784,83584), "S7394C12");
    /*is_ambiguous_... S7394C17::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C18*)(S7394C17*), ABISELECT(128784,83584), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C18*), ABISELECT(128784,83584), "S7394C12");
    check_base_class_offset(lv, (S7394C11*)(S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(128784,83584), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C10*)(S7394C19*), ABISELECT(128784,83584), "S7394C12");
    check_base_class_offset(lv, (S7394C13*), ABISELECT(108672,70516), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C2*), ABISELECT(143568,93160), "S7394C12");
    /*is_ambiguous_... S7394C10::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(143568,93160), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C10*)(S7394C19*), ABISELECT(143568,93160), "S7394C12");
    /*is_ambiguous_... S7394C17::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C18*)(S7394C17*), 0, "S7394C12");
    check_base_class_offset(lv, (S7394C18*)(S7394C19*)(S7394C17*), ABISELECT(143824,93324), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C18*)(S7394C19*), ABISELECT(143824,93324), "S7394C12");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(288,180), "S7394C12");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(32,16), "S7394C12");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(32,16), "S7394C12");
    check_base_class_offset(lv, (S7394C10*)(S7394C19*)(S7394C17*), ABISELECT(32,16), "S7394C12");
    check_base_class_offset(lv, (S7394C14*)(S7394C19*)(S7394C17*), ABISELECT(1072,688), "S7394C12");
    check_base_class_offset(lv, (S7394C19*)(S7394C17*), ABISELECT(32,16), "S7394C12");
    /*is_ambiguous_... S7394C17::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C17*), ABISELECT(2064,1332), "S7394C12");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C15*)(S7394C17*), ABISELECT(17104,11072), "S7394C12");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C15*)(S7394C17*), ABISELECT(16848,10908), "S7394C12");
    check_base_class_offset(lv, (S7394C8*)(S7394C15*)(S7394C17*), ABISELECT(16848,10908), "S7394C12");
    check_base_class_offset(lv, (S7394C15*)(S7394C17*), ABISELECT(16848,10908), "S7394C12");
    check_base_class_offset(lv, (S7394C17*), 0, "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(106768,69272), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(106512,69108), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C10*)(S7394C19*), ABISELECT(106512,69108), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C10*)(S7394C19*), ABISELECT(106512,69108), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C14*)(S7394C19*), ABISELECT(107552,69780), "S7394C12");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C19*), ABISELECT(106512,69108), "S7394C12");
    set_bf_and_test(lv, s7394c12f0, ABISELECT(108532,70424), 0, 4, 1, "S7394C12");
    set_bf_and_test(lv, s7394c12f0, ABISELECT(108532,70424), 0, 4, hide_sll(1LL<<3), "S7394C12");
    check_field_offset(lv, s7394c12f1, ABISELECT(108544,70428), "S7394C12.s7394c12f1");
    check_field_offset(lv, s7394c12f2, ABISELECT(108560,70440), "S7394C12.s7394c12f2");
    check_field_offset(lv, s7394c12f3, ABISELECT(108576,70448), "S7394C12.s7394c12f3");
    check_field_offset(lv, s7394c12f4, ABISELECT(108624,70480), "S7394C12.s7394c12f4");
    test_class_info(&lv, &cd_S7394C12);
    dp->~S7394C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C12(Test_S7394C12, "S7394C12", ABISELECT(143856,93340));

#else // __cplusplus

extern void _ZN8S7394C12C1Ev();
extern void _ZN8S7394C12D2Ev();
Name_Map name_map_S7394C12[] = {
  NSPAIR(_ZN8S7394C12C1Ev),
  NSPAIR(_ZN8S7394C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C7;
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C15;
extern VTBL_ENTRY _ZTI8S7394C15[];
extern  VTBL_ENTRY _ZTV8S7394C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C15[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
extern Class_Descriptor cd_S7394C13;
extern VTBL_ENTRY _ZTI8S7394C13[];
extern  VTBL_ENTRY _ZTV8S7394C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C13[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C18;
extern VTBL_ENTRY _ZTI8S7394C18[];
extern  VTBL_ENTRY _ZTV8S7394C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C18[];
extern Class_Descriptor cd_S7394C18;
extern VTBL_ENTRY _ZTI8S7394C18[];
extern  VTBL_ENTRY _ZTV8S7394C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C18[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C10;
extern VTBL_ENTRY _ZTI8S7394C10[];
extern  VTBL_ENTRY _ZTV8S7394C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C10[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
extern Class_Descriptor cd_S7394C19;
extern VTBL_ENTRY _ZTI8S7394C19[];
extern  VTBL_ENTRY _ZTV8S7394C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C19[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C15;
extern VTBL_ENTRY _ZTI8S7394C15[];
extern  VTBL_ENTRY _ZTV8S7394C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C15[];
extern Class_Descriptor cd_S7394C17;
extern VTBL_ENTRY _ZTI8S7394C17[];
extern  VTBL_ENTRY _ZTV8S7394C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C17[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C10;
extern VTBL_ENTRY _ZTI8S7394C10[];
extern  VTBL_ENTRY _ZTV8S7394C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C10[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
extern Class_Descriptor cd_S7394C19;
extern VTBL_ENTRY _ZTI8S7394C19[];
extern  VTBL_ENTRY _ZTV8S7394C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C19[];
static Base_Class bases_S7394C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(125952,81716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(126672,82180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    ABISELECT(125696,81552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(126720,82212), //bcp->offset
    113, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    71, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(125696,81552), //bcp->offset
    104, //bcp->virtual_function_table_offset
    6, //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
    6, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(125592,81472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C7,    ABISELECT(125584,81468), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7394C14,    ABISELECT(125040,81120), //bcp->offset
    85, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7394C3,    ABISELECT(127472,82700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(127216,82536), //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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(127216,82536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7394C15,    ABISELECT(127216,82536), //bcp->offset
    122, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    72, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7394C11,    ABISELECT(128784,83584), //bcp->offset
    131, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    73, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7394C13,    ABISELECT(108672,70516), //bcp->offset
    71, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C2,    ABISELECT(143568,93160), //bcp->offset
    141, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    74, //bcp->index_in_construction_vtbl_array
    107, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7394C18,    ABISELECT(143824,93324), //bcp->offset
    144, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    76, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S7394C3,    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
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7394C2,    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
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7394C8,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7394C10,    ABISELECT(32,16), //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
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7394C14,    ABISELECT(1072,688), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    77, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7394C19,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    75, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7394C11,    ABISELECT(2064,1332), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    78, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(17104,11072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(16848,10908), //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
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(16848,10908), //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
    21, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7394C15,    ABISELECT(16848,10908), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    79, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7394C17,    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
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C3,    ABISELECT(106768,69272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(106512,69108), //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
    24, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(106512,69108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7394C10,    ABISELECT(106512,69108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7394C14,    ABISELECT(107552,69780), //bcp->offset
    62, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    81, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7394C19,    ABISELECT(106512,69108), //bcp->offset
    50, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    80, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7394C12[];
extern void _ZN8S7394C12D1Ev();
extern void _ZN8S7394C12D0Ev();
extern void ABISELECT(_ZThn32_N8S7394C12D1Ev,_ZThn16_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn32_N8S7394C12D0Ev,_ZThn16_N8S7394C12D0Ev)();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZThn1072_N8S7394C12D1Ev,_ZThn688_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn1072_N8S7394C12D0Ev,_ZThn688_N8S7394C12D0Ev)();
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZThn2064_N8S7394C12D1Ev,_ZThn1332_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn2064_N8S7394C12D0Ev,_ZThn1332_N8S7394C12D0Ev)();
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZThn16848_N8S7394C12D1Ev,_ZThn10908_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn16848_N8S7394C12D0Ev,_ZThn10908_N8S7394C12D0Ev)();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZThn106512_N8S7394C12D1Ev,_ZThn69108_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn106512_N8S7394C12D0Ev,_ZThn69108_N8S7394C12D0Ev)();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZThn107552_N8S7394C12D1Ev,_ZThn69780_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn107552_N8S7394C12D0Ev,_ZThn69780_N8S7394C12D0Ev)();
extern void _ZN8S7394C142v5Ev();
extern void _ZN8S7394C132v7Ev();
extern void ABISELECT(_ZTv0_n88_N8S7394C12D1Ev,_ZTv0_n44_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn108672_N8S7394C12D1Ev,_ZThn70516_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S7394C12D0Ev,_ZTv0_n44_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn108672_N8S7394C12D0Ev,_ZThn70516_N8S7394C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn125040_N8S7394C12D1Ev,_ZThn81120_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn125040_N8S7394C12D0Ev,_ZThn81120_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn125584_N8S7394C12D1Ev,_ZThn81468_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn125584_N8S7394C12D0Ev,_ZThn81468_N8S7394C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn125696_N8S7394C12D1Ev,_ZThn81552_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn125696_N8S7394C12D0Ev,_ZThn81552_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7394C12D1Ev,_ZTv0_n12_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn126720_N8S7394C12D1Ev,_ZThn82212_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C12D0Ev,_ZTv0_n12_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn126720_N8S7394C12D0Ev,_ZThn82212_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn127216_N8S7394C12D1Ev,_ZThn82536_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn127216_N8S7394C12D0Ev,_ZThn82536_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C12D1Ev,_ZThn83584_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C12D0Ev,_ZThn83584_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn143824_N8S7394C12D1Ev,_ZThn93324_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn143824_N8S7394C12D0Ev,_ZThn93324_N8S7394C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7394C12[] = {
  ABISELECT(127216,82536),
  ABISELECT(125040,81120),
  ABISELECT(108672,70516),
  ABISELECT(143568,93160),
  ABISELECT(125584,81468),
  ABISELECT(143824,93324),
  ABISELECT(126720,82212),
  ABISELECT(126672,82180),
  ABISELECT(125696,81552),
  ABISELECT(128784,83584),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&_ZN8S7394C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C12D0Ev,
  ABISELECT(143792,93308),
  ABISELECT(143536,93144),
  ABISELECT(128752,83568),
  ABISELECT(125664,81536),
  ABISELECT(125552,81452),
  ABISELECT(126688,82196),
  ABISELECT(126640,82164),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C12D1Ev,_ZThn16_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C12D0Ev,_ZThn16_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(125648,81524),
  ABISELECT(125600,81492),
  ABISELECT(124624,80864),
  ABISELECT(124512,80780),
  ABISELECT(-1072,-688),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C12D1Ev,_ZThn688_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C12D0Ev,_ZThn688_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(124656,80880),
  ABISELECT(124608,80848),
  ABISELECT(123632,80220),
  ABISELECT(-2064,-1332),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C12D1Ev,_ZThn1332_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C12D0Ev,_ZThn1332_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  ABISELECT(109872,71304),
  ABISELECT(109824,71272),
  ABISELECT(-16848,-10908),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C12D1Ev,_ZThn10908_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C12D0Ev,_ZThn10908_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(37312,24216),
  ABISELECT(37056,24052),
  ABISELECT(22272,14476),
  ABISELECT(19184,12444),
  ABISELECT(19072,12360),
  ABISELECT(20208,13104),
  ABISELECT(20160,13072),
  ABISELECT(-106512,-69108),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn106512_N8S7394C12D1Ev,_ZThn69108_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn106512_N8S7394C12D0Ev,_ZThn69108_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(19168,12432),
  ABISELECT(19120,12400),
  ABISELECT(18144,11772),
  ABISELECT(18032,11688),
  ABISELECT(-107552,-69780),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn107552_N8S7394C12D1Ev,_ZThn69780_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn107552_N8S7394C12D0Ev,_ZThn69780_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(-108672,-70516),
  0,
  ABISELECT(20112,13068),
  ABISELECT(18544,12020),
  ABISELECT(18048,11696),
  ABISELECT(18000,11664),
  ABISELECT(17024,11036),
  ABISELECT(16912,10952),
  ABISELECT(16368,10604),
  ABISELECT(-108672,-70516),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&_ZN8S7394C132v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S7394C12D1Ev,_ZTv0_n44_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S7394C12D0Ev,_ZTv0_n44_N8S7394C12D0Ev),
  0,
  ABISELECT(-125040,-81120),
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  ABISELECT(-125040,-81120),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(-125584,-81468),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-125584,-81468),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev),
  0,
  ABISELECT(-125696,-81552),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-125696,-81552),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-126720,-82212),
  ABISELECT(-126720,-82212),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C12D1Ev,_ZTv0_n12_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C12D0Ev,_ZTv0_n12_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  0,
  ABISELECT(-127216,-82536),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-127216,-82536),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  ABISELECT(-128784,-83584),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-128784,-83584),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  ABISELECT(-16896,-10980),
  ABISELECT(-143568,-93160),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  ABISELECT(-143824,-93324),
  ABISELECT(-17104,-11112),
  ABISELECT(-17152,-11144),
  ABISELECT(-18128,-11772),
  ABISELECT(-15040,-9740),
  ABISELECT(-143824,-93324),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7394C12[];
extern void _ZN8S7394C17D1Ev();
extern void _ZN8S7394C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C17__8S7394C12[] = {
  ABISELECT(143568,93160),
  ABISELECT(125584,81468),
  ABISELECT(143824,93324),
  ABISELECT(126720,82212),
  ABISELECT(126672,82180),
  ABISELECT(125696,81552),
  ABISELECT(128784,83584),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&_ZN8S7394C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C17D0Ev,
};
extern void _ZN8S7394C18D1Ev();
extern void _ZN8S7394C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C188S7394C17__8S7394C12[] = {
  ABISELECT(126720,82212),
  ABISELECT(126672,82180),
  ABISELECT(125696,81552),
  ABISELECT(128784,83584),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&_ZN8S7394C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C18D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C18D1Ev,_ZThn83584_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C18D0Ev,_ZThn83584_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C188S7394C17__8S7394C12[] = {
  0,
  ABISELECT(-128784,-83584),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-128784,-83584),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn125696_N8S7394C18D1Ev,_ZThn81552_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn125696_N8S7394C18D0Ev,_ZThn81552_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C188S7394C17__8S7394C12[] = {
  0,
  ABISELECT(-125696,-81552),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-125696,-81552),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn126720_N8S7394C18D1Ev,_ZThn82212_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn126720_N8S7394C18D0Ev,_ZThn82212_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C188S7394C17__8S7394C12[] = {
  0,
  0,
  ABISELECT(-126720,-82212),
  ABISELECT(-126720,-82212),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C19D1Ev();
extern void _ZN8S7394C19D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C198S7394C17__8S7394C12[] = {
  ABISELECT(143792,93308),
  ABISELECT(143536,93144),
  ABISELECT(128752,83568),
  ABISELECT(125664,81536),
  ABISELECT(125552,81452),
  ABISELECT(126688,82196),
  ABISELECT(126640,82164),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&_ZN8S7394C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C19D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN8S7394C10D1Ev();
extern void _ZN8S7394C10D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C108S7394C198S7394C17__8S7394C12[] = {
  ABISELECT(143536,93144),
  ABISELECT(128752,83568),
  ABISELECT(125664,81536),
  ABISELECT(125552,81452),
  ABISELECT(126688,82196),
  ABISELECT(126640,82164),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&_ZN8S7394C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C10D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C108S7394C198S7394C17__A2__8S7394C12[] = {
  ABISELECT(126688,82196),
  ABISELECT(126640,82164),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C108S7394C198S7394C17__A3__8S7394C12[] = {
  ABISELECT(126640,82164),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn126688_N7S7394C8D1Ev,_ZThn82196_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn126688_N7S7394C8D0Ev,_ZThn82196_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C108S7394C198S7394C17__A2__8S7394C12[] = {
  0,
  0,
  ABISELECT(-126688,-82196),
  ABISELECT(-126688,-82196),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn125552_N8S7394C10D1Ev,_ZThn81452_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn125552_N8S7394C10D0Ev,_ZThn81452_N8S7394C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C108S7394C198S7394C17__8S7394C12[] = {
  ABISELECT(-125552,-81452),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-125552,-81452),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn125664_N8S7394C10D1Ev,_ZThn81536_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn125664_N8S7394C10D0Ev,_ZThn81536_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C108S7394C198S7394C17__8S7394C12[] = {
  0,
  ABISELECT(-125664,-81536),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-125664,-81536),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn126688_N8S7394C10D1Ev,_ZThn82196_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn126688_N8S7394C10D0Ev,_ZThn82196_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C108S7394C198S7394C17__8S7394C12[] = {
  0,
  0,
  ABISELECT(-126688,-82196),
  ABISELECT(-126688,-82196),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn128752_N8S7394C10D1Ev,_ZThn83568_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn128752_N8S7394C10D0Ev,_ZThn83568_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C108S7394C198S7394C17__8S7394C12[] = {
  0,
  ABISELECT(-128752,-83568),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-128752,-83568),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C108S7394C198S7394C17__8S7394C12[] = {
  ABISELECT(-16896,-10980),
  ABISELECT(-143536,-93144),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
};
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C198S7394C17__A1__8S7394C12[] = {
  ABISELECT(125648,81524),
  ABISELECT(125600,81492),
  ABISELECT(124624,80864),
  ABISELECT(124512,80780),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn124512_N8S7394C14D1Ev,_ZThn80780_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn124512_N8S7394C14D0Ev,_ZThn80780_N8S7394C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C148S7394C198S7394C17__A1__8S7394C12[] = {
  ABISELECT(-124512,-80780),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-124512,-80780),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn124624_N8S7394C14D1Ev,_ZThn80864_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn124624_N8S7394C14D0Ev,_ZThn80864_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C148S7394C198S7394C17__A1__8S7394C12[] = {
  0,
  ABISELECT(-124624,-80864),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-124624,-80864),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn125648_N8S7394C14D1Ev,_ZThn81524_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn125648_N8S7394C14D0Ev,_ZThn81524_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C148S7394C198S7394C17__A1__8S7394C12[] = {
  0,
  0,
  ABISELECT(-125648,-81524),
  ABISELECT(-125648,-81524),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn143792_N8S7394C19D1Ev,_ZThn93308_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn143792_N8S7394C19D0Ev,_ZThn93308_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C18__8S7394C198S7394C17__8S7394C12[] = {
  ABISELECT(-143792,-93308),
  ABISELECT(-17104,-11112),
  ABISELECT(-17152,-11144),
  ABISELECT(-18128,-11772),
  ABISELECT(-15040,-9740),
  ABISELECT(-143792,-93308),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn128752_N8S7394C19D1Ev,_ZThn83568_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn128752_N8S7394C19D0Ev,_ZThn83568_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C198S7394C17__8S7394C12[] = {
  0,
  ABISELECT(-128752,-83568),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-128752,-83568),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn125664_N8S7394C19D1Ev,_ZThn81536_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn125664_N8S7394C19D0Ev,_ZThn81536_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C198S7394C17__8S7394C12[] = {
  0,
  ABISELECT(-125664,-81536),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-125664,-81536),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn126688_N8S7394C19D1Ev,_ZThn82196_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn126688_N8S7394C19D0Ev,_ZThn82196_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C198S7394C17__8S7394C12[] = {
  0,
  0,
  ABISELECT(-126688,-82196),
  ABISELECT(-126688,-82196),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn125552_N8S7394C19D1Ev,_ZThn81452_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn125552_N8S7394C19D0Ev,_ZThn81452_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C198S7394C17__8S7394C12[] = {
  ABISELECT(-125552,-81452),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-125552,-81452),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C198S7394C17__8S7394C12[] = {
  ABISELECT(-16896,-10980),
  ABISELECT(-143536,-93144),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
};
extern void ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C198S7394C17__8S7394C12[] = {
  ABISELECT(125648,81524),
  ABISELECT(125600,81492),
  ABISELECT(124624,80864),
  ABISELECT(124512,80780),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C118S7394C17__A1__8S7394C12[] = {
  ABISELECT(124656,80880),
  ABISELECT(124608,80848),
  ABISELECT(123632,80220),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn123632_N8S7394C11D1Ev,_ZThn80220_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn123632_N8S7394C11D0Ev,_ZThn80220_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C118S7394C17__A1__8S7394C12[] = {
  0,
  ABISELECT(-123632,-80220),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-123632,-80220),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn124656_N8S7394C11D1Ev,_ZThn80880_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn124656_N8S7394C11D0Ev,_ZThn80880_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C118S7394C17__A1__8S7394C12[] = {
  0,
  0,
  ABISELECT(-124656,-80880),
  ABISELECT(-124656,-80880),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C15D1Ev();
extern void _ZN8S7394C15D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C158S7394C17__A1__8S7394C12[] = {
  ABISELECT(109872,71304),
  ABISELECT(109824,71272),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&_ZN8S7394C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C15D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C158S7394C17__A3__8S7394C12[] = {
  ABISELECT(109872,71304),
  ABISELECT(109824,71272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C158S7394C17__A4__8S7394C12[] = {
  ABISELECT(109824,71272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn109872_N7S7394C8D1Ev,_ZThn71304_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn109872_N7S7394C8D0Ev,_ZThn71304_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C158S7394C17__A3__8S7394C12[] = {
  0,
  0,
  ABISELECT(-109872,-71304),
  ABISELECT(-109872,-71304),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev)();
extern void ABISELECT(_ZThn109872_N8S7394C15D1Ev,_ZThn71304_N8S7394C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev)();
extern void ABISELECT(_ZThn109872_N8S7394C15D0Ev,_ZThn71304_N8S7394C15D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C158S7394C17__A1__8S7394C12[] = {
  0,
  0,
  ABISELECT(-109872,-71304),
  ABISELECT(-109872,-71304),
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C17D1Ev,_ZThn83584_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C17D0Ev,_ZThn83584_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C17__8S7394C12[] = {
  0,
  ABISELECT(-128784,-83584),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-128784,-83584),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn125696_N8S7394C17D1Ev,_ZThn81552_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn125696_N8S7394C17D0Ev,_ZThn81552_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C17__8S7394C12[] = {
  0,
  ABISELECT(-125696,-81552),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-125696,-81552),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn126720_N8S7394C17D1Ev,_ZThn82212_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn126720_N8S7394C17D0Ev,_ZThn82212_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C17__8S7394C12[] = {
  0,
  0,
  ABISELECT(-126720,-82212),
  ABISELECT(-126720,-82212),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZThn32_N8S7394C17D1Ev,_ZThn16_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S7394C17D0Ev,_ZThn16_N8S7394C17D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C19__8S7394C17__8S7394C12[] = {
  ABISELECT(143792,93308),
  ABISELECT(143536,93144),
  ABISELECT(128752,83568),
  ABISELECT(125664,81536),
  ABISELECT(125552,81452),
  ABISELECT(126688,82196),
  ABISELECT(126640,82164),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C17D1Ev,_ZThn16_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C17D0Ev,_ZThn16_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn143824_N8S7394C17D1Ev,_ZThn93324_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn143824_N8S7394C17D0Ev,_ZThn93324_N8S7394C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C18__A1__8S7394C17__8S7394C12[] = {
  ABISELECT(-143824,-93324),
  ABISELECT(-17104,-11112),
  ABISELECT(-17152,-11144),
  ABISELECT(-18128,-11772),
  ABISELECT(-15040,-9740),
  ABISELECT(-143824,-93324),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn125584_N8S7394C17D1Ev,_ZThn81468_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn125584_N8S7394C17D0Ev,_ZThn81468_N8S7394C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C17__8S7394C12[] = {
  ABISELECT(-125584,-81468),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-125584,-81468),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C17__8S7394C12[] = {
  ABISELECT(-16896,-10980),
  ABISELECT(-143568,-93160),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
};
extern void ABISELECT(_ZThn1072_N8S7394C17D1Ev,_ZThn688_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn1072_N8S7394C17D0Ev,_ZThn688_N8S7394C17D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C19__8S7394C17__8S7394C12[] = {
  ABISELECT(125648,81524),
  ABISELECT(125600,81492),
  ABISELECT(124624,80864),
  ABISELECT(124512,80780),
  ABISELECT(-1072,-688),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C17D1Ev,_ZThn688_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C17D0Ev,_ZThn688_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZThn2064_N8S7394C17D1Ev,_ZThn1332_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn2064_N8S7394C17D0Ev,_ZThn1332_N8S7394C17D0Ev)();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__A__8S7394C17__8S7394C12[] = {
  ABISELECT(124656,80880),
  ABISELECT(124608,80848),
  ABISELECT(123632,80220),
  ABISELECT(-2064,-1332),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C17D1Ev,_ZThn1332_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C17D0Ev,_ZThn1332_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZThn16848_N8S7394C17D1Ev,_ZThn10908_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn16848_N8S7394C17D0Ev,_ZThn10908_N8S7394C17D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__8S7394C17__8S7394C12[] = {
  ABISELECT(109872,71304),
  ABISELECT(109824,71272),
  ABISELECT(-16848,-10908),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C17D1Ev,_ZThn10908_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C17D0Ev,_ZThn10908_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN8S7394C19D1Ev();
extern void _ZN8S7394C19D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C19__A1__8S7394C12[] = {
  ABISELECT(37312,24216),
  ABISELECT(37056,24052),
  ABISELECT(22272,14476),
  ABISELECT(19184,12444),
  ABISELECT(19072,12360),
  ABISELECT(20208,13104),
  ABISELECT(20160,13072),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&_ZN8S7394C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C19D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN8S7394C10D1Ev();
extern void _ZN8S7394C10D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C108S7394C19__A1__8S7394C12[] = {
  ABISELECT(37056,24052),
  ABISELECT(22272,14476),
  ABISELECT(19184,12444),
  ABISELECT(19072,12360),
  ABISELECT(20208,13104),
  ABISELECT(20160,13072),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&_ZN8S7394C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C10D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C108S7394C19__A4__8S7394C12[] = {
  ABISELECT(20208,13104),
  ABISELECT(20160,13072),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C108S7394C19__A5__8S7394C12[] = {
  ABISELECT(20160,13072),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn20208_N7S7394C8D1Ev,_ZThn13104_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn20208_N7S7394C8D0Ev,_ZThn13104_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C108S7394C19__A4__8S7394C12[] = {
  0,
  0,
  ABISELECT(-20208,-13104),
  ABISELECT(-20208,-13104),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn19072_N8S7394C10D1Ev,_ZThn12360_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn19072_N8S7394C10D0Ev,_ZThn12360_N8S7394C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C108S7394C19__A1__8S7394C12[] = {
  ABISELECT(-19072,-12360),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-19072,-12360),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn19184_N8S7394C10D1Ev,_ZThn12444_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn19184_N8S7394C10D0Ev,_ZThn12444_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C108S7394C19__A1__8S7394C12[] = {
  0,
  ABISELECT(-19184,-12444),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-19184,-12444),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn20208_N8S7394C10D1Ev,_ZThn13104_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn20208_N8S7394C10D0Ev,_ZThn13104_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C108S7394C19__A1__8S7394C12[] = {
  0,
  0,
  ABISELECT(-20208,-13104),
  ABISELECT(-20208,-13104),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn22272_N8S7394C10D1Ev,_ZThn14476_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn22272_N8S7394C10D0Ev,_ZThn14476_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C108S7394C19__A1__8S7394C12[] = {
  0,
  ABISELECT(-22272,-14476),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-22272,-14476),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C108S7394C19__A1__8S7394C12[] = {
  ABISELECT(-16896,-10980),
  ABISELECT(-37056,-24052),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
};
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C19__A2__8S7394C12[] = {
  ABISELECT(19168,12432),
  ABISELECT(19120,12400),
  ABISELECT(18144,11772),
  ABISELECT(18032,11688),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn18032_N8S7394C14D1Ev,_ZThn11688_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn18032_N8S7394C14D0Ev,_ZThn11688_N8S7394C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C148S7394C19__A2__8S7394C12[] = {
  ABISELECT(-18032,-11688),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-18032,-11688),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn18144_N8S7394C14D1Ev,_ZThn11772_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn18144_N8S7394C14D0Ev,_ZThn11772_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C148S7394C19__A2__8S7394C12[] = {
  0,
  ABISELECT(-18144,-11772),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-18144,-11772),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn19168_N8S7394C14D1Ev,_ZThn12432_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn19168_N8S7394C14D0Ev,_ZThn12432_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C148S7394C19__A2__8S7394C12[] = {
  0,
  0,
  ABISELECT(-19168,-12432),
  ABISELECT(-19168,-12432),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn37312_N8S7394C19D1Ev,_ZThn24216_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn37312_N8S7394C19D0Ev,_ZThn24216_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C18__8S7394C19__A1__8S7394C12[] = {
  ABISELECT(-37312,-24216),
  ABISELECT(-17104,-11112),
  ABISELECT(-17152,-11144),
  ABISELECT(-18128,-11772),
  ABISELECT(-15040,-9740),
  ABISELECT(-37312,-24216),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn22272_N8S7394C19D1Ev,_ZThn14476_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn22272_N8S7394C19D0Ev,_ZThn14476_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C19__A1__8S7394C12[] = {
  0,
  ABISELECT(-22272,-14476),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-22272,-14476),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn19184_N8S7394C19D1Ev,_ZThn12444_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn19184_N8S7394C19D0Ev,_ZThn12444_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C19__A1__8S7394C12[] = {
  0,
  ABISELECT(-19184,-12444),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-19184,-12444),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn20208_N8S7394C19D1Ev,_ZThn13104_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn20208_N8S7394C19D0Ev,_ZThn13104_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C19__A1__8S7394C12[] = {
  0,
  0,
  ABISELECT(-20208,-13104),
  ABISELECT(-20208,-13104),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn19072_N8S7394C19D1Ev,_ZThn12360_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn19072_N8S7394C19D0Ev,_ZThn12360_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C19__A1__8S7394C12[] = {
  ABISELECT(-19072,-12360),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-19072,-12360),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C19__A1__8S7394C12[] = {
  ABISELECT(-16896,-10980),
  ABISELECT(-37056,-24052),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
};
extern void ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C19__A1__8S7394C12[] = {
  ABISELECT(19168,12432),
  ABISELECT(19120,12400),
  ABISELECT(18144,11772),
  ABISELECT(18032,11688),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void _ZN8S7394C132v7Ev();
extern void _ZN8S7394C13D1Ev();
extern void _ZN8S7394C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C13__8S7394C12[] = {
  ABISELECT(20112,13068),
  ABISELECT(18544,12020),
  ABISELECT(18048,11696),
  ABISELECT(18000,11664),
  ABISELECT(17024,11036),
  ABISELECT(16912,10952),
  ABISELECT(16368,10604),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&_ZN8S7394C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7394C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C13D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn16368_N8S7394C13D1Ev,_ZThn10604_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn16368_N8S7394C13D0Ev,_ZThn10604_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C13__8S7394C12[] = {
  0,
  ABISELECT(-16368,-10604),
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  ABISELECT(-16368,-10604),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn16912_N8S7394C13D1Ev,_ZThn10952_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn16912_N8S7394C13D0Ev,_ZThn10952_N8S7394C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C13__8S7394C12[] = {
  ABISELECT(-16912,-10952),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-16912,-10952),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn17024_N8S7394C13D1Ev,_ZThn11036_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn17024_N8S7394C13D0Ev,_ZThn11036_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C13__8S7394C12[] = {
  0,
  ABISELECT(-17024,-11036),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-17024,-11036),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C13D1Ev,_ZTv0_n12_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn18048_N8S7394C13D1Ev,_ZThn11696_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C13D0Ev,_ZTv0_n12_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn18048_N8S7394C13D0Ev,_ZThn11696_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C13__8S7394C12[] = {
  0,
  0,
  ABISELECT(-18048,-11696),
  ABISELECT(-18048,-11696),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C13D1Ev,_ZTv0_n12_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C13D0Ev,_ZTv0_n12_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn18544_N8S7394C13D1Ev,_ZThn12020_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn18544_N8S7394C13D0Ev,_ZThn12020_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__8S7394C13__8S7394C12[] = {
  0,
  ABISELECT(-18544,-12020),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-18544,-12020),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn20112_N8S7394C13D1Ev,_ZThn13068_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn20112_N8S7394C13D0Ev,_ZThn13068_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C13__8S7394C12[] = {
  0,
  ABISELECT(-20112,-13068),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-20112,-13068),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C12[] = {
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn544_N8S7394C14D1Ev,_ZThn348_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn544_N8S7394C14D0Ev,_ZThn348_N8S7394C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C14__8S7394C12[] = {
  ABISELECT(-544,-348),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-544,-348),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn656_N8S7394C14D1Ev,_ZThn432_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn656_N8S7394C14D0Ev,_ZThn432_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C14__8S7394C12[] = {
  0,
  ABISELECT(-656,-432),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-656,-432),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn1680_N8S7394C14D1Ev,_ZThn1092_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn1680_N8S7394C14D0Ev,_ZThn1092_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C14__8S7394C12[] = {
  0,
  0,
  ABISELECT(-1680,-1092),
  ABISELECT(-1680,-1092),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C12[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7__8S7394C12[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C7__8S7394C12[] = {
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C12[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__8S7394C12[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__8S7394C12[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C15D1Ev();
extern void _ZN8S7394C15D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__8S7394C12[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&_ZN8S7394C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C15D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C15__A1__8S7394C12[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C15__A1__8S7394C12[] = {
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C15__A1__8S7394C12[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C15__8S7394C12[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C12[] = {
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__8S7394C12[] = {
  0,
  ABISELECT(3088,2032),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(3088,2032),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__8S7394C12[] = {
  0,
  0,
  ABISELECT(2064,1372),
  ABISELECT(2064,1372),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C12[] = {
  ABISELECT(-16896,-10980),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void _ZN8S7394C18D1Ev();
extern void _ZN8S7394C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C18__A1__8S7394C12[] = {
  ABISELECT(-17104,-11112),
  ABISELECT(-17152,-11144),
  ABISELECT(-18128,-11772),
  ABISELECT(-15040,-9740),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&_ZN8S7394C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C18D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev)();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C18__A1__8S7394C12[] = {
  0,
  ABISELECT(15040,9740),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(15040,9740),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C18__A1__8S7394C12[] = {
  0,
  ABISELECT(18128,11772),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(18128,11772),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C18__A1__8S7394C12[] = {
  0,
  0,
  ABISELECT(17104,11112),
  ABISELECT(17104,11112),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTT_ENTRY vtt_S7394C12[] = {
  {&(_ZTV8S7394C12[12]),  12,153},
  {&(_tg__ZTV8S7394C17__8S7394C12[9]),  9,11},
  {&(_tg__ZTV8S7394C188S7394C17__8S7394C12[6]),  6,8},
  {&(_tg__ZTV8S7394C11__8S7394C188S7394C17__8S7394C12[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C188S7394C17__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C188S7394C17__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C198S7394C17__8S7394C12[9]),  9,12},
  {&(_tg__ZTV8S7394C108S7394C198S7394C17__8S7394C12[8]),  8,11},
  {&(_tg__ZTV7S7394C88S7394C108S7394C198S7394C17__A2__8S7394C12[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C108S7394C198S7394C17__A3__8S7394C12[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C108S7394C198S7394C17__A2__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C108S7394C198S7394C17__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C108S7394C198S7394C17__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C108S7394C198S7394C17__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C108S7394C198S7394C17__8S7394C12[7]),  7,10},
  {&(_tg__ZTV7S7394C2__A2__8S7394C108S7394C198S7394C17__8S7394C12[3]),  3,3},
  {&(_tg__ZTV8S7394C148S7394C198S7394C17__A1__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C148S7394C198S7394C17__A1__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C148S7394C198S7394C17__A1__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C148S7394C198S7394C17__A1__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C18__8S7394C198S7394C17__8S7394C12[7]),  7,9},
  {&(_tg__ZTV8S7394C11__8S7394C198S7394C17__8S7394C12[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C198S7394C17__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C198S7394C17__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C198S7394C17__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C2__A2__8S7394C198S7394C17__8S7394C12[3]),  3,3},
  {&(_tg__ZTV8S7394C14__8S7394C198S7394C17__8S7394C12[6]),  6,9},
  {&(_tg__ZTV8S7394C118S7394C17__A1__8S7394C12[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C118S7394C17__A1__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C118S7394C17__A1__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C158S7394C17__A1__8S7394C12[4]),  4,7},
  {&(_tg__ZTV7S7394C88S7394C158S7394C17__A3__8S7394C12[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C158S7394C17__A4__8S7394C12[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C158S7394C17__A3__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C5__8S7394C158S7394C17__A1__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C17__8S7394C12[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C17__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C17__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C19__8S7394C17__8S7394C12[9]),  9,12},
  {&(_tg__ZTV8S7394C18__A1__8S7394C17__8S7394C12[7]),  7,9},
  {&(_tg__ZTV7S7394C7__8S7394C17__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C2__A2__8S7394C17__8S7394C12[3]),  3,3},
  {&(_tg__ZTV8S7394C148S7394C19__8S7394C17__8S7394C12[6]),  6,9},
  {&(_tg__ZTV8S7394C11__A__8S7394C17__8S7394C12[5]),  5,8},
  {&(_tg__ZTV8S7394C15__8S7394C17__8S7394C12[4]),  4,7},
  {&(_tg__ZTV8S7394C19__A1__8S7394C12[9]),  9,12},
  {&(_tg__ZTV8S7394C108S7394C19__A1__8S7394C12[8]),  8,11},
  {&(_tg__ZTV7S7394C88S7394C108S7394C19__A4__8S7394C12[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C108S7394C19__A5__8S7394C12[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C108S7394C19__A4__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C108S7394C19__A1__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C108S7394C19__A1__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C108S7394C19__A1__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C108S7394C19__A1__8S7394C12[7]),  7,10},
  {&(_tg__ZTV7S7394C2__A2__8S7394C108S7394C19__A1__8S7394C12[3]),  3,3},
  {&(_tg__ZTV8S7394C148S7394C19__A2__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C148S7394C19__A2__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C148S7394C19__A2__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C148S7394C19__A2__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C18__8S7394C19__A1__8S7394C12[7]),  7,9},
  {&(_tg__ZTV8S7394C11__8S7394C19__A1__8S7394C12[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C19__A1__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C19__A1__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C19__A1__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C2__A2__8S7394C19__A1__8S7394C12[3]),  3,3},
  {&(_tg__ZTV8S7394C14__8S7394C19__A1__8S7394C12[6]),  6,9},
  {&(_ZTV8S7394C12[82]),  82,153},
  {&(_ZTV8S7394C12[93]),  93,153},
  {&(_ZTV8S7394C12[102]),  102,153},
  {&(_ZTV8S7394C12[110]),  110,153},
  {&(_ZTV8S7394C12[118]),  118,153},
  {&(_ZTV8S7394C12[128]),  128,153},
  {&(_ZTV8S7394C12[138]),  138,153},
  {&(_ZTV8S7394C12[144]),  144,153},
  {&(_ZTV8S7394C12[23]),  23,153},
  {&(_ZTV8S7394C12[151]),  151,153},
  {&(_ZTV8S7394C12[32]),  32,153},
  {&(_ZTV8S7394C12[40]),  40,153},
  {&(_ZTV8S7394C12[47]),  47,153},
  {&(_ZTV8S7394C12[59]),  59,153},
  {&(_ZTV8S7394C12[68]),  68,153},
  {&(_tg__ZTV8S7394C13__8S7394C12[9]),  9,12},
  {&(_tg__ZTV8S7394C14__8S7394C13__8S7394C12[8]),  8,11},
  {&(_tg__ZTV7S7394C7__8S7394C13__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C13__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C13__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C15__8S7394C13__8S7394C12[6]),  6,9},
  {&(_tg__ZTV8S7394C11__8S7394C13__8S7394C12[7]),  7,10},
  {&(_tg__ZTV8S7394C14__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C14__8S7394C12[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C14__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C14__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C12[5]),  5,7},
  {&(_tg__ZTV7S7394C8__7S7394C7__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__7S7394C7__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C8__8S7394C12[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__8S7394C12[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C15__8S7394C12[4]),  4,7},
  {&(_tg__ZTV7S7394C88S7394C15__A1__8S7394C12[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C15__A1__8S7394C12[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C15__A1__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C5__8S7394C15__8S7394C12[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C12[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__8S7394C12[5]),  5,9},
  {&(_tg__ZTV7S7394C2__A2__8S7394C12[3]),  3,3},
  {&(_tg__ZTV8S7394C18__A1__8S7394C12[6]),  6,8},
  {&(_tg__ZTV8S7394C11__8S7394C18__A1__8S7394C12[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C18__A1__8S7394C12[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C18__A1__8S7394C12[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S7394C12[];
extern  VTBL_ENTRY _ZTV8S7394C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C12[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D0Ev,_ZThn744_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S7394C7D1Ev,_ZThn744_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C13D0Ev,_ZTv0_n12_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N8S7394C13D0Ev,_ZThn11696_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C13D1Ev,_ZTv0_n12_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N8S7394C13D1Ev,_ZThn11696_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18544_N8S7394C13D0Ev,_ZThn12020_N8S7394C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17024_N8S7394C13D0Ev,_ZThn11036_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18544_N8S7394C13D1Ev,_ZThn12020_N8S7394C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17024_N8S7394C13D1Ev,_ZThn11036_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20112_N8S7394C13D0Ev,_ZThn13068_N8S7394C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N8S7394C13D0Ev,_ZThn10952_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20112_N8S7394C13D1Ev,_ZThn13068_N8S7394C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N8S7394C13D1Ev,_ZThn10952_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N8S7394C13D0Ev,_ZThn10604_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N8S7394C13D1Ev,_ZThn10604_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn143824_N8S7394C17D0Ev,_ZThn93324_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn143824_N8S7394C17D1Ev,_ZThn93324_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126720_N8S7394C17D0Ev,_ZThn82212_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126720_N8S7394C17D1Ev,_ZThn82212_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125696_N8S7394C17D0Ev,_ZThn81552_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125696_N8S7394C17D1Ev,_ZThn81552_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125584_N8S7394C17D0Ev,_ZThn81468_N8S7394C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C17D0Ev,_ZThn83584_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125584_N8S7394C17D1Ev,_ZThn81468_N8S7394C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C17D1Ev,_ZThn83584_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn109872_N8S7394C15D0Ev,_ZThn71304_N8S7394C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn109872_N8S7394C15D1Ev,_ZThn71304_N8S7394C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn124656_N8S7394C11D0Ev,_ZThn80880_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn124656_N8S7394C11D1Ev,_ZThn80880_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn123632_N8S7394C11D0Ev,_ZThn80220_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn123632_N8S7394C11D1Ev,_ZThn80220_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20208_N8S7394C19D0Ev,_ZThn13104_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn126688_N8S7394C19D0Ev,_ZThn82196_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20208_N8S7394C19D1Ev,_ZThn13104_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn126688_N8S7394C19D1Ev,_ZThn82196_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19184_N8S7394C19D0Ev,_ZThn12444_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125664_N8S7394C19D0Ev,_ZThn81536_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19184_N8S7394C19D1Ev,_ZThn12444_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125664_N8S7394C19D1Ev,_ZThn81536_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19072_N8S7394C19D0Ev,_ZThn12360_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22272_N8S7394C19D0Ev,_ZThn14476_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125552_N8S7394C19D0Ev,_ZThn81452_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128752_N8S7394C19D0Ev,_ZThn83568_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19072_N8S7394C19D1Ev,_ZThn12360_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22272_N8S7394C19D1Ev,_ZThn14476_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125552_N8S7394C19D1Ev,_ZThn81452_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128752_N8S7394C19D1Ev,_ZThn83568_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37312_N8S7394C19D0Ev,_ZThn24216_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn143792_N8S7394C19D0Ev,_ZThn93308_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37312_N8S7394C19D1Ev,_ZThn24216_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn143792_N8S7394C19D1Ev,_ZThn93308_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S7394C14D0Ev,_ZThn1092_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn19168_N8S7394C14D0Ev,_ZThn12432_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125648_N8S7394C14D0Ev,_ZThn81524_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S7394C14D1Ev,_ZThn1092_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn19168_N8S7394C14D1Ev,_ZThn12432_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125648_N8S7394C14D1Ev,_ZThn81524_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S7394C14D0Ev,_ZThn432_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18144_N8S7394C14D0Ev,_ZThn11772_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn124624_N8S7394C14D0Ev,_ZThn80864_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S7394C14D1Ev,_ZThn432_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18144_N8S7394C14D1Ev,_ZThn11772_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn124624_N8S7394C14D1Ev,_ZThn80864_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S7394C14D0Ev,_ZThn348_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18032_N8S7394C14D0Ev,_ZThn11688_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn124512_N8S7394C14D0Ev,_ZThn80780_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S7394C14D1Ev,_ZThn348_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18032_N8S7394C14D1Ev,_ZThn11688_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn124512_N8S7394C14D1Ev,_ZThn80780_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20208_N8S7394C10D0Ev,_ZThn13104_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn126688_N8S7394C10D0Ev,_ZThn82196_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20208_N8S7394C10D1Ev,_ZThn13104_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn126688_N8S7394C10D1Ev,_ZThn82196_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19184_N8S7394C10D0Ev,_ZThn12444_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125664_N8S7394C10D0Ev,_ZThn81536_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19184_N8S7394C10D1Ev,_ZThn12444_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125664_N8S7394C10D1Ev,_ZThn81536_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22272_N8S7394C10D0Ev,_ZThn14476_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn19072_N8S7394C10D0Ev,_ZThn12360_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128752_N8S7394C10D0Ev,_ZThn83568_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125552_N8S7394C10D0Ev,_ZThn81452_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22272_N8S7394C10D1Ev,_ZThn14476_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn19072_N8S7394C10D1Ev,_ZThn12360_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128752_N8S7394C10D1Ev,_ZThn83568_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125552_N8S7394C10D1Ev,_ZThn81452_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D0Ev,_ZThn660_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn20208_N7S7394C8D0Ev,_ZThn13104_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn109872_N7S7394C8D0Ev,_ZThn71304_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn126688_N7S7394C8D0Ev,_ZThn82196_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7394C8D1Ev,_ZThn660_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn20208_N7S7394C8D1Ev,_ZThn13104_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn109872_N7S7394C8D1Ev,_ZThn71304_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn126688_N7S7394C8D1Ev,_ZThn82196_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126720_N8S7394C18D0Ev,_ZThn82212_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126720_N8S7394C18D1Ev,_ZThn82212_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125696_N8S7394C18D0Ev,_ZThn81552_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125696_N8S7394C18D1Ev,_ZThn81552_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C18D0Ev,_ZThn83584_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C18D1Ev,_ZThn83584_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C12D0Ev,_ZTv0_n12_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126720_N8S7394C12D0Ev,_ZThn82212_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C12D1Ev,_ZTv0_n12_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126720_N8S7394C12D1Ev,_ZThn82212_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn127216_N8S7394C12D0Ev,_ZThn82536_N8S7394C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125696_N8S7394C12D0Ev,_ZThn81552_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn127216_N8S7394C12D1Ev,_ZThn82536_N8S7394C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125696_N8S7394C12D1Ev,_ZThn81552_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C12D0Ev,_ZThn83584_N8S7394C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125584_N8S7394C12D0Ev,_ZThn81468_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C12D1Ev,_ZThn83584_N8S7394C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125584_N8S7394C12D1Ev,_ZThn81468_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn143824_N8S7394C12D0Ev,_ZThn93324_N8S7394C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125040_N8S7394C12D0Ev,_ZThn81120_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn143824_N8S7394C12D1Ev,_ZThn93324_N8S7394C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn125040_N8S7394C12D1Ev,_ZThn81120_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S7394C12D0Ev,_ZTv0_n44_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108672_N8S7394C12D0Ev,_ZThn70516_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S7394C12D1Ev,_ZTv0_n44_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108672_N8S7394C12D1Ev,_ZThn70516_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C12 = {  "S7394C12", // class name
  bases_S7394C12, 35,
  &(vtc_S7394C12[0]), // expected_vtbl_contents
  &(vtt_S7394C12[0]), // expected_vtt_contents
  ABISELECT(143856,93340), // object size
  NSPAIRA(_ZTI8S7394C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7394C12),153, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C12),111, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C22  : S7394C9 , virtual S7394C3 , S7394C2 {
  void *s7394c22f0;
  ~S7394C22(); // tgen
  S7394C22(); // tgen
};
//SIG(-1 S7394C22) C1{ BC2{ m FL[4] Fc:1 FL[2] FL:4} VBC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} Fp}


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

static void Test_S7394C22()
{
  extern Class_Descriptor cd_S7394C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,65)];
    init_test(&cd_S7394C22, buf);
    S7394C22 *dp, &lv = *(dp=new (buf) S7394C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,256), "sizeof(S7394C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C22)");
    check_base_class_offset(lv, (S7394C9*), ABISELECT(256,164), "S7394C22");
    check_base_class_offset(lv, (S7394C3*), ABISELECT(336,224), "S7394C22");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*), ABISELECT(336,224), "S7394C22");
    check_base_class_offset(lv, (S7394C2*), 0, "S7394C22");
    check_field_offset(lv, s7394c22f0, ABISELECT(320,220), "S7394C22.s7394c22f0");
    test_class_info(&lv, &cd_S7394C22);
    dp->~S7394C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C22(Test_S7394C22, "S7394C22", ABISELECT(384,256));

#else // __cplusplus

extern void _ZN8S7394C22C1Ev();
extern void _ZN8S7394C22D1Ev();
Name_Map name_map_S7394C22[] = {
  NSPAIR(_ZN8S7394C22C1Ev),
  NSPAIR(_ZN8S7394C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
static Base_Class bases_S7394C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C9,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C3,    ABISELECT(336,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7394C2,    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 _ZTI8S7394C22[];
static  VTBL_ENTRY vtc_S7394C22[] = {
  ABISELECT(336,224),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C22[0]),
};
extern VTBL_ENTRY _ZTV8S7394C22[];
static  VTBL_ENTRY _tg__ZTV7S7394C2__8S7394C22[] = {
  ABISELECT(336,224),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
static  VTT_ENTRY vtt_S7394C22[] = {
  {&(_ZTV8S7394C22[3]),  3,3},
  {&(_tg__ZTV7S7394C2__8S7394C22[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7394C22[];
extern  VTBL_ENTRY _ZTV8S7394C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C22[];
Class_Descriptor cd_S7394C22 = {  "S7394C22", // class name
  bases_S7394C22, 3,
  &(vtc_S7394C22[0]), // expected_vtbl_contents
  &(vtt_S7394C22[0]), // expected_vtt_contents
  ABISELECT(384,256), // object size
  NSPAIRA(_ZTI8S7394C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7394C22),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7394C22),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7394C1  : S7394C2 , S7394C4 , S7394C12 , virtual S7394C22 {
  __tsi64 s7394c1f0;
  void *s7394c1f1;
  void *s7394c1f2;
  __tsi64 s7394c1f3;
  int s7394c1f4:13;
  ~S7394C1(); // tgen
  S7394C1(); // tgen
};
//SIG(1 S7394C1) C1{ BC2{ VBC3{ m FD[2] Fc[8]} FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} BC4{ BC5{ vd v1 v2 FC2 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} VBC7{ VBC8{ BC3 BC2 VBC5 vd v3 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} BC9{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} v4 FL FC10{ VBC7 BC8 VBC11{ VBC8 vd v6 Fs FL FC5 FC3[5] FC8[8] FC2[5] FC2 Fp FL FL Fi[2]} VBC2 vd FL FD Fp[6]}} BC12{ VBC13{ VBC14{ VBC7 vd v5 FC5 Fi Fi FU6} VBC15{ BC8 vd FC2 Fp[5] Fi FL[9] FC16{} FL[6] Fc:0 FL FD FU6 FC3 Fi Fi Fl} VBC11 v7 Fi Fi FC11 FL Fi FD Fp Fi} VBC2 BC17{ VBC3 BC18{ VBC11 vd Fc:0 FL:64 Fi} BC19{ VBC18 BC10 BC14 vd Fi Fi FC2 FC3 Fi FL Fi FL[3] FL FL FL:25} BC11 BC15 vd FL Fi FL Fi Fc FC20{ BC5 v8 Fp Fi FC7} Fp FL[6] FL FL[10] FC21{ VBC8 VBC11 vd v9 Fl Fi Fi FL Fc:8 FL FC2 FC5}[5] Fi} BC19 vd FL:4 FD FL FC3 Fi[9]} VBC22{ BC9 VBC3 BC2 Fp} FL Fp Fp FL Fi:13}


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

static void Test_S7394C1()
{
  extern Class_Descriptor cd_S7394C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10170,26393)];
    init_test(&cd_S7394C1, buf);
    S7394C1 *dp, &lv = *(dp=new (buf) S7394C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(162704,105568), "sizeof(S7394C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7394C1)");
    /*is_ambiguous_... S7394C1::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*), ABISELECT(127184,82520), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*), ABISELECT(127184,82520), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C15*), ABISELECT(127184,82520), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*), ABISELECT(127184,82520), "S7394C1");
    /*is_ambiguous_... S7394C17::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C17*)(S7394C12*), ABISELECT(127184,82520), "S7394C1");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(127184,82520), "S7394C1");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C15*)(S7394C17*)(S7394C12*), ABISELECT(127184,82520), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(127184,82520), "S7394C1");
    check_base_class_offset(lv, (S7394C3*)(S7394C22*), ABISELECT(127184,82520), "S7394C1");
    check_base_class_offset(lv, (S7394C3*)(S7394C2*)(S7394C22*), ABISELECT(127184,82520), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C2*), 0, "S7394C1");
    /*is_ambiguous_... S7394C4::S7394C5 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C4*), ABISELECT(256,164), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*), ABISELECT(127600,82800), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*), ABISELECT(127344,82636), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*), ABISELECT(128320,83264), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C15*), ABISELECT(128320,83264), "S7394C1");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(128320,83264), "S7394C1");
    check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C15*)(S7394C17*)(S7394C12*), ABISELECT(128320,83264), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C5*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(128320,83264), "S7394C1");
    check_base_class_offset(lv, (S7394C8*)(S7394C7*), ABISELECT(127344,82636), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C11*), ABISELECT(127344,82636), "S7394C1");
    /*is_ambiguous_... S7394C17::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C11*)(S7394C17*)(S7394C12*), ABISELECT(127344,82636), "S7394C1");
    check_base_class_offset(lv, (S7394C9*)(S7394C7*), ABISELECT(127240,82556), "S7394C1");
    check_base_class_offset(lv, (S7394C7*)(S7394C4*), ABISELECT(127232,82552), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C14 */ AMB_check_base_class_offset(lv, (S7394C7*)(S7394C14*), ABISELECT(127232,82552), "S7394C1");
    check_base_class_offset(lv, (S7394C7*)(S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(127232,82552), "S7394C1");
    check_base_class_offset(lv, (S7394C7*)(S7394C14*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(127232,82552), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C7*)(S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(127232,82552), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C7*)(S7394C14*)(S7394C19*)(S7394C12*), ABISELECT(127232,82552), "S7394C1");
    check_base_class_offset(lv, (S7394C4*), ABISELECT(256,164), "S7394C1");
    check_base_class_offset(lv, (S7394C14*)(S7394C13*), ABISELECT(145184,94192), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C15*), ABISELECT(145984,94704), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C15*), ABISELECT(145728,94540), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C15 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C15*), ABISELECT(145728,94540), "S7394C1");
    check_base_class_offset(lv, (S7394C15*)(S7394C13*), ABISELECT(145728,94540), "S7394C1");
    check_base_class_offset(lv, (S7394C11*)(S7394C13*), ABISELECT(147296,95588), "S7394C1");
    /*is_ambiguous_... S7394C17::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C18*)(S7394C17*)(S7394C12*), ABISELECT(147296,95588), "S7394C1");
    /*is_ambiguous_... S7394C1::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C18*), ABISELECT(147296,95588), "S7394C1");
    check_base_class_offset(lv, (S7394C11*)(S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(147296,95588), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(147296,95588), "S7394C1");
    check_base_class_offset(lv, (S7394C13*)(S7394C12*), ABISELECT(128816,83588), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C12*), ABISELECT(162080,105164), "S7394C1");
    /*is_ambiguous_... S7394C10::S7394C2 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(162080,105164), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(162080,105164), "S7394C1");
    /*is_ambiguous_... S7394C17::S7394C18 */ AMB_check_base_class_offset(lv, (S7394C18*)(S7394C17*)(S7394C12*), ABISELECT(18480,11976), "S7394C1");
    check_base_class_offset(lv, (S7394C18*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(162336,105328), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C18*)(S7394C19*)(S7394C12*), ABISELECT(162336,105328), "S7394C1");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(18768,12156), "S7394C1");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(18512,11992), "S7394C1");
    /*is_ambiguous_... S7394C10::S7394C8 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(18512,11992), "S7394C1");
    check_base_class_offset(lv, (S7394C10*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(18512,11992), "S7394C1");
    check_base_class_offset(lv, (S7394C14*)(S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(19552,12664), "S7394C1");
    check_base_class_offset(lv, (S7394C19*)(S7394C17*)(S7394C12*), ABISELECT(18512,11992), "S7394C1");
    /*is_ambiguous_... S7394C17::S7394C11 */ AMB_check_base_class_offset(lv, (S7394C11*)(S7394C17*)(S7394C12*), ABISELECT(20544,13308), "S7394C1");
    /*is_ambiguous_... S7394C8::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C15*)(S7394C17*)(S7394C12*), ABISELECT(35584,23048), "S7394C1");
    check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C15*)(S7394C17*)(S7394C12*), ABISELECT(35328,22884), "S7394C1");
    check_base_class_offset(lv, (S7394C8*)(S7394C15*)(S7394C17*)(S7394C12*), ABISELECT(35328,22884), "S7394C1");
    check_base_class_offset(lv, (S7394C15*)(S7394C17*)(S7394C12*), ABISELECT(35328,22884), "S7394C1");
    check_base_class_offset(lv, (S7394C17*)(S7394C12*), ABISELECT(18480,11976), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C3*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(125248,81248), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C2*)(S7394C8*)(S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(124992,81084), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C8*)(S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(124992,81084), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C10*)(S7394C19*)(S7394C12*), ABISELECT(124992,81084), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C14*)(S7394C19*)(S7394C12*), ABISELECT(126032,81756), "S7394C1");
    /*is_ambiguous_... S7394C12::S7394C19 */ AMB_check_base_class_offset(lv, (S7394C19*)(S7394C12*), ABISELECT(124992,81084), "S7394C1");
    check_base_class_offset(lv, (S7394C12*), ABISELECT(18480,11976), "S7394C1");
    check_base_class_offset(lv, (S7394C9*)(S7394C22*), ABISELECT(162624,105508), "S7394C1");
    check_base_class_offset(lv, (S7394C2*)(S7394C22*), ABISELECT(162368,105344), "S7394C1");
    check_base_class_offset(lv, (S7394C22*), ABISELECT(162368,105344), "S7394C1");
    check_field_offset(lv, s7394c1f0, ABISELECT(127144,82492), "S7394C1.s7394c1f0");
    check_field_offset(lv, s7394c1f1, ABISELECT(127152,82500), "S7394C1.s7394c1f1");
    check_field_offset(lv, s7394c1f2, ABISELECT(127160,82504), "S7394C1.s7394c1f2");
    check_field_offset(lv, s7394c1f3, ABISELECT(127168,82508), "S7394C1.s7394c1f3");
    set_bf_and_test(lv, s7394c1f4, ABISELECT(127176,82516), 0, 13, 1, "S7394C1");
    set_bf_and_test(lv, s7394c1f4, ABISELECT(127176,82516), 0, 13, hide_sll(1LL<<12), "S7394C1");
    test_class_info(&lv, &cd_S7394C1);
    dp->~S7394C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7394C1(Test_S7394C1, "S7394C1", ABISELECT(162704,105568));

#else // __cplusplus

extern void _ZN7S7394C1C1Ev();
extern void _ZN7S7394C1D1Ev();
Name_Map name_map_S7394C1[] = {
  NSPAIR(_ZN7S7394C1C1Ev),
  NSPAIR(_ZN7S7394C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C5;
extern VTBL_ENTRY _ZTI7S7394C5[];
extern  VTBL_ENTRY _ZTV7S7394C5[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C7;
extern VTBL_ENTRY _ZTI7S7394C7[];
extern  VTBL_ENTRY _ZTV7S7394C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C7[];
extern Class_Descriptor cd_S7394C4;
extern VTBL_ENTRY _ZTI7S7394C4[];
extern  VTBL_ENTRY _ZTV7S7394C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C4[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C15;
extern VTBL_ENTRY _ZTI8S7394C15[];
extern  VTBL_ENTRY _ZTV8S7394C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C15[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
extern Class_Descriptor cd_S7394C13;
extern VTBL_ENTRY _ZTI8S7394C13[];
extern  VTBL_ENTRY _ZTV8S7394C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C13[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C18;
extern VTBL_ENTRY _ZTI8S7394C18[];
extern  VTBL_ENTRY _ZTV8S7394C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C18[];
extern Class_Descriptor cd_S7394C18;
extern VTBL_ENTRY _ZTI8S7394C18[];
extern  VTBL_ENTRY _ZTV8S7394C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C18[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C10;
extern VTBL_ENTRY _ZTI8S7394C10[];
extern  VTBL_ENTRY _ZTV8S7394C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C10[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
extern Class_Descriptor cd_S7394C19;
extern VTBL_ENTRY _ZTI8S7394C19[];
extern  VTBL_ENTRY _ZTV8S7394C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C19[];
extern Class_Descriptor cd_S7394C11;
extern VTBL_ENTRY _ZTI8S7394C11[];
extern  VTBL_ENTRY _ZTV8S7394C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C11[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C15;
extern VTBL_ENTRY _ZTI8S7394C15[];
extern  VTBL_ENTRY _ZTV8S7394C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C15[];
extern Class_Descriptor cd_S7394C17;
extern VTBL_ENTRY _ZTI8S7394C17[];
extern  VTBL_ENTRY _ZTV8S7394C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C17[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C8;
extern VTBL_ENTRY _ZTI7S7394C8[];
extern  VTBL_ENTRY _ZTV7S7394C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C8[];
extern Class_Descriptor cd_S7394C10;
extern VTBL_ENTRY _ZTI8S7394C10[];
extern  VTBL_ENTRY _ZTV8S7394C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C10[];
extern Class_Descriptor cd_S7394C14;
extern VTBL_ENTRY _ZTI8S7394C14[];
extern  VTBL_ENTRY _ZTV8S7394C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C14[];
extern Class_Descriptor cd_S7394C19;
extern VTBL_ENTRY _ZTI8S7394C19[];
extern  VTBL_ENTRY _ZTV8S7394C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C19[];
extern Class_Descriptor cd_S7394C12;
extern VTBL_ENTRY _ZTI8S7394C12[];
extern  VTBL_ENTRY _ZTV8S7394C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C12[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S7394C2;
extern VTBL_ENTRY _ZTI7S7394C2[];
extern  VTBL_ENTRY _ZTV7S7394C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C2[];
extern Class_Descriptor cd_S7394C22;
extern VTBL_ENTRY _ZTI8S7394C22[];
extern  VTBL_ENTRY _ZTV8S7394C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7394C22[];
static Base_Class bases_S7394C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(127184,82520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7394C2,    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_S7394C5,    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
    16, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(127600,82800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(127344,82636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7394C5,    ABISELECT(128320,83264), //bcp->offset
    114, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    91, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7394C8,    ABISELECT(127344,82636), //bcp->offset
    105, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    90, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(127240,82556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C7,    ABISELECT(127232,82552), //bcp->offset
    97, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    89, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7394C4,    ABISELECT(256,164), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    88, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C14,    ABISELECT(145184,94192), //bcp->offset
    137, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    94, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7394C3,    ABISELECT(145984,94704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(145728,94540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(145728,94540), //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
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7394C15,    ABISELECT(145728,94540), //bcp->offset
    148, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    95, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7394C11,    ABISELECT(147296,95588), //bcp->offset
    157, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    96, //bcp->index_in_construction_vtbl_array
    128, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7394C13,    ABISELECT(128816,83588), //bcp->offset
    123, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    93, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S7394C2,    ABISELECT(162080,105164), //bcp->offset
    167, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    97, //bcp->index_in_construction_vtbl_array
    131, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S7394C18,    ABISELECT(18480,11976), //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
    18, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7394C18,    ABISELECT(162336,105328), //bcp->offset
    170, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    99, //bcp->index_in_construction_vtbl_array
    132, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7394C3,    ABISELECT(18768,12156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(18512,11992), //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
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(18512,11992), //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
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7394C10,    ABISELECT(18512,11992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7394C14,    ABISELECT(19552,12664), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    100, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7394C19,    ABISELECT(18512,11992), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    98, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7394C11,    ABISELECT(20544,13308), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    101, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(35584,23048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(35328,22884), //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
    25, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(35328,22884), //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
    26, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7394C15,    ABISELECT(35328,22884), //bcp->offset
    69, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    102, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7394C17,    ABISELECT(18480,11976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(125248,81248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(124992,81084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7394C8,    ABISELECT(124992,81084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7394C10,    ABISELECT(124992,81084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7394C14,    ABISELECT(126032,81756), //bcp->offset
    88, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    104, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7394C19,    ABISELECT(124992,81084), //bcp->offset
    76, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    103, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7394C12,    ABISELECT(18480,11976), //bcp->offset
    26, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    92, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C9,    ABISELECT(162624,105508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C2,    ABISELECT(162368,105344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7394C22,    ABISELECT(162368,105344), //bcp->offset
    179, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    105, //bcp->index_in_construction_vtbl_array
    136, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7394C1[];
extern void _ZN7S7394C1D1Ev();
extern void _ZN7S7394C1D0Ev();
extern void ABISELECT(_ZThn256_N7S7394C1D1Ev,_ZThn164_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S7394C1D0Ev,_ZThn164_N7S7394C1D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void _ZN7S7394C42v4Ev();
extern void ABISELECT(_ZThn18480_N7S7394C1D1Ev,_ZThn11976_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn18480_N7S7394C1D0Ev,_ZThn11976_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn18512_N7S7394C1D1Ev,_ZThn11992_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn18512_N7S7394C1D0Ev,_ZThn11992_N7S7394C1D0Ev)();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZThn19552_N7S7394C1D1Ev,_ZThn12664_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn19552_N7S7394C1D0Ev,_ZThn12664_N7S7394C1D0Ev)();
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZThn20544_N7S7394C1D1Ev,_ZThn13308_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn20544_N7S7394C1D0Ev,_ZThn13308_N7S7394C1D0Ev)();
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZThn35328_N7S7394C1D1Ev,_ZThn22884_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn35328_N7S7394C1D0Ev,_ZThn22884_N7S7394C1D0Ev)();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZThn124992_N7S7394C1D1Ev,_ZThn81084_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn124992_N7S7394C1D0Ev,_ZThn81084_N7S7394C1D0Ev)();
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZThn126032_N7S7394C1D1Ev,_ZThn81756_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn126032_N7S7394C1D0Ev,_ZThn81756_N7S7394C1D0Ev)();
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7394C1D1Ev,_ZTv0_n24_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn127232_N7S7394C1D1Ev,_ZThn82552_N7S7394C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7394C1D0Ev,_ZTv0_n24_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn127232_N7S7394C1D0Ev,_ZThn82552_N7S7394C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C1D1Ev,_ZTv0_n20_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn127344_N7S7394C1D1Ev,_ZThn82636_N7S7394C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C1D0Ev,_ZTv0_n20_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn127344_N7S7394C1D0Ev,_ZThn82636_N7S7394C1D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7394C1D1Ev,_ZTv0_n12_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn128320_N7S7394C1D1Ev,_ZThn83264_N7S7394C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C1D0Ev,_ZTv0_n12_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn128320_N7S7394C1D0Ev,_ZThn83264_N7S7394C1D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void _ZN8S7394C132v7Ev();
extern void ABISELECT(_ZTv0_n88_N7S7394C1D1Ev,_ZTv0_n44_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn128816_N7S7394C1D1Ev,_ZThn83588_N7S7394C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7394C1D0Ev,_ZTv0_n44_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn128816_N7S7394C1D0Ev,_ZThn83588_N7S7394C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7394C1D1Ev,_ZTv0_n28_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn145184_N7S7394C1D1Ev,_ZThn94192_N7S7394C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7394C1D0Ev,_ZTv0_n28_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn145184_N7S7394C1D0Ev,_ZThn94192_N7S7394C1D0Ev)() __attribute__((weak));
extern void _ZN8S7394C142v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S7394C1D1Ev,_ZTv0_n20_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn145728_N7S7394C1D1Ev,_ZThn94540_N7S7394C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C1D0Ev,_ZTv0_n20_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn145728_N7S7394C1D0Ev,_ZThn94540_N7S7394C1D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S7394C1D1Ev,_ZTv0_n24_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn147296_N7S7394C1D1Ev,_ZThn95588_N7S7394C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7394C1D0Ev,_ZTv0_n24_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn147296_N7S7394C1D0Ev,_ZThn95588_N7S7394C1D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
extern void ABISELECT(_ZTv0_n56_N7S7394C1D1Ev,_ZTv0_n28_N7S7394C1D1Ev)();
extern void ABISELECT(_ZThn162336_N7S7394C1D1Ev,_ZThn105328_N7S7394C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7394C1D0Ev,_ZTv0_n28_N7S7394C1D0Ev)();
extern void ABISELECT(_ZThn162336_N7S7394C1D0Ev,_ZThn105328_N7S7394C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7394C1[] = {
  ABISELECT(162368,105344),
  ABISELECT(162336,105328),
  ABISELECT(162080,105164),
  ABISELECT(147296,95588),
  ABISELECT(145728,94540),
  ABISELECT(145184,94192),
  ABISELECT(128816,83588),
  ABISELECT(128320,83264),
  ABISELECT(127344,82636),
  ABISELECT(127232,82552),
  ABISELECT(127184,82520),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&_ZN7S7394C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C1D0Ev,
  ABISELECT(128064,83100),
  ABISELECT(126928,82356),
  ABISELECT(127088,82472),
  ABISELECT(126976,82388),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7394C1D1Ev,_ZThn164_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7394C1D0Ev,_ZThn164_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7394C42v4Ev,
  ABISELECT(127248,82564),
  ABISELECT(126704,82216),
  ABISELECT(110336,71612),
  ABISELECT(143600,93188),
  ABISELECT(108752,70576),
  ABISELECT(143856,93352),
  ABISELECT(109840,71288),
  ABISELECT(108704,70544),
  ABISELECT(108864,70660),
  ABISELECT(128816,83612),
  ABISELECT(-18480,-11976),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn18480_N7S7394C1D1Ev,_ZThn11976_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn18480_N7S7394C1D0Ev,_ZThn11976_N7S7394C1D0Ev),
  ABISELECT(143824,93336),
  ABISELECT(143568,93172),
  ABISELECT(128784,83596),
  ABISELECT(108832,70644),
  ABISELECT(108720,70560),
  ABISELECT(109808,71272),
  ABISELECT(108672,70528),
  ABISELECT(-18512,-11992),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn18512_N7S7394C1D1Ev,_ZThn11992_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn18512_N7S7394C1D0Ev,_ZThn11992_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(108768,70600),
  ABISELECT(107632,69856),
  ABISELECT(107792,69972),
  ABISELECT(107680,69888),
  ABISELECT(-19552,-12664),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn19552_N7S7394C1D1Ev,_ZThn12664_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn19552_N7S7394C1D0Ev,_ZThn12664_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(107776,69956),
  ABISELECT(106640,69212),
  ABISELECT(106800,69328),
  ABISELECT(-20544,-13308),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn20544_N7S7394C1D1Ev,_ZThn13308_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn20544_N7S7394C1D0Ev,_ZThn13308_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  ABISELECT(92992,60380),
  ABISELECT(91856,59636),
  ABISELECT(-35328,-22884),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn35328_N7S7394C1D1Ev,_ZThn22884_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn35328_N7S7394C1D0Ev,_ZThn22884_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(37344,24244),
  ABISELECT(37088,24080),
  ABISELECT(22304,14504),
  ABISELECT(2352,1552),
  ABISELECT(2240,1468),
  ABISELECT(3328,2180),
  ABISELECT(2192,1436),
  ABISELECT(-124992,-81084),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn124992_N7S7394C1D1Ev,_ZThn81084_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn124992_N7S7394C1D0Ev,_ZThn81084_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  ABISELECT(2288,1508),
  ABISELECT(1152,764),
  ABISELECT(1312,880),
  ABISELECT(1200,796),
  ABISELECT(-126032,-81756),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn126032_N7S7394C1D1Ev,_ZThn81756_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn126032_N7S7394C1D0Ev,_ZThn81756_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  ABISELECT(-127232,-82552),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-127232,-82552),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7394C1D1Ev,_ZTv0_n24_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7394C1D0Ev,_ZTv0_n24_N7S7394C1D0Ev),
  0,
  ABISELECT(-127344,-82636),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-127344,-82636),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C1D1Ev,_ZTv0_n20_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C1D0Ev,_ZTv0_n20_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  0,
  ABISELECT(-128320,-83264),
  ABISELECT(-128320,-83264),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C1D1Ev,_ZTv0_n12_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C1D0Ev,_ZTv0_n12_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  ABISELECT(-128816,-83588),
  0,
  ABISELECT(18480,12000),
  ABISELECT(16912,10952),
  ABISELECT(-496,-324),
  ABISELECT(-1632,-1068),
  ABISELECT(-1472,-952),
  ABISELECT(-1584,-1036),
  ABISELECT(16368,10604),
  ABISELECT(-128816,-83588),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&_ZN8S7394C132v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7394C1D1Ev,_ZTv0_n44_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7394C1D0Ev,_ZTv0_n44_N7S7394C1D0Ev),
  0,
  ABISELECT(-145184,-94192),
  ABISELECT(-16864,-10928),
  ABISELECT(-18000,-11672),
  ABISELECT(-17840,-11556),
  ABISELECT(-17952,-11640),
  ABISELECT(-145184,-94192),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7394C1D1Ev,_ZTv0_n28_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7394C1D0Ev,_ZTv0_n28_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
  0,
  ABISELECT(-145728,-94540),
  ABISELECT(-17408,-11276),
  ABISELECT(-18544,-12020),
  ABISELECT(-145728,-94540),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C1D1Ev,_ZTv0_n20_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C1D0Ev,_ZTv0_n20_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
  0,
  ABISELECT(-147296,-95588),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-147296,-95588),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7394C1D1Ev,_ZTv0_n24_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7394C1D0Ev,_ZTv0_n24_N7S7394C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
  ABISELECT(-34896,-22644),
  ABISELECT(-162080,-105164),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  ABISELECT(-162336,-105328),
  ABISELECT(-34016,-22064),
  ABISELECT(-35152,-22808),
  ABISELECT(-34992,-22692),
  ABISELECT(-15040,-9740),
  ABISELECT(-162336,-105328),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7394C1D1Ev,_ZTv0_n28_N7S7394C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7394C1D0Ev,_ZTv0_n28_N7S7394C1D0Ev),
  ABISELECT(-35184,-22824),
  ABISELECT(-162368,-105344),
  (VTBL_ENTRY)&(_ZTI7S7394C1[0]),
};
extern VTBL_ENTRY _ZTV7S7394C1[];
static  VTBL_ENTRY _tg__ZTV7S7394C2__A__7S7394C1[] = {
  ABISELECT(127184,82520),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void _ZN7S7394C4D1Ev();
extern void _ZN7S7394C4D0Ev();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
extern void _ZN7S7394C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C4__7S7394C1[] = {
  ABISELECT(128064,83100),
  ABISELECT(126928,82356),
  ABISELECT(127088,82472),
  ABISELECT(126976,82388),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C4[0]),
  (VTBL_ENTRY)&_ZN7S7394C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7394C42v4Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7394C4D1Ev,_ZTv0_n24_N7S7394C4D1Ev)();
extern void ABISELECT(_ZThn126976_N7S7394C4D1Ev,_ZThn82388_N7S7394C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7394C4D0Ev,_ZTv0_n24_N7S7394C4D0Ev)();
extern void ABISELECT(_ZThn126976_N7S7394C4D0Ev,_ZThn82388_N7S7394C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__7S7394C4__7S7394C1[] = {
  ABISELECT(-126976,-82388),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-126976,-82388),
  (VTBL_ENTRY)&(_ZTI7S7394C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7394C4D1Ev,_ZTv0_n24_N7S7394C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7394C4D0Ev,_ZTv0_n24_N7S7394C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7394C4D1Ev,_ZTv0_n20_N7S7394C4D1Ev)();
extern void ABISELECT(_ZThn127088_N7S7394C4D1Ev,_ZThn82472_N7S7394C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C4D0Ev,_ZTv0_n20_N7S7394C4D0Ev)();
extern void ABISELECT(_ZThn127088_N7S7394C4D0Ev,_ZThn82472_N7S7394C4D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C4__7S7394C1[] = {
  0,
  ABISELECT(-127088,-82472),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-127088,-82472),
  (VTBL_ENTRY)&(_ZTI7S7394C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C4D1Ev,_ZTv0_n20_N7S7394C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C4D0Ev,_ZTv0_n20_N7S7394C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C4D1Ev,_ZTv0_n12_N7S7394C4D1Ev)();
extern void ABISELECT(_ZThn128064_N7S7394C4D1Ev,_ZThn83100_N7S7394C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C4D0Ev,_ZTv0_n12_N7S7394C4D0Ev)();
extern void ABISELECT(_ZThn128064_N7S7394C4D0Ev,_ZThn83100_N7S7394C4D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__A1__7S7394C4__7S7394C1[] = {
  0,
  0,
  ABISELECT(-128064,-83100),
  ABISELECT(-128064,-83100),
  (VTBL_ENTRY)&(_ZTI7S7394C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C4D1Ev,_ZTv0_n12_N7S7394C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C4D0Ev,_ZTv0_n12_N7S7394C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C12D1Ev();
extern void _ZN8S7394C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C12__7S7394C1[] = {
  ABISELECT(127248,82564),
  ABISELECT(126704,82216),
  ABISELECT(110336,71612),
  ABISELECT(143600,93188),
  ABISELECT(108752,70576),
  ABISELECT(143856,93352),
  ABISELECT(109840,71288),
  ABISELECT(108704,70544),
  ABISELECT(108864,70660),
  ABISELECT(128816,83612),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&_ZN8S7394C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C12D0Ev,
};
extern void _ZN8S7394C17D1Ev();
extern void _ZN8S7394C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(143600,93188),
  ABISELECT(108752,70576),
  ABISELECT(143856,93352),
  ABISELECT(109840,71288),
  ABISELECT(108704,70544),
  ABISELECT(108864,70660),
  ABISELECT(128816,83612),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&_ZN8S7394C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C17D0Ev,
};
extern void _ZN8S7394C18D1Ev();
extern void _ZN8S7394C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C188S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(109840,71288),
  ABISELECT(108704,70544),
  ABISELECT(108864,70660),
  ABISELECT(128816,83612),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&_ZN8S7394C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C18D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn128816_N8S7394C18D1Ev,_ZThn83612_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn128816_N8S7394C18D0Ev,_ZThn83612_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C188S7394C178S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-128816,-83612),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-128816,-83612),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn108864_N8S7394C18D1Ev,_ZThn70660_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn108864_N8S7394C18D0Ev,_ZThn70660_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C188S7394C178S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-108864,-70660),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-108864,-70660),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev)();
extern void ABISELECT(_ZThn109840_N8S7394C18D1Ev,_ZThn71288_N8S7394C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev)();
extern void ABISELECT(_ZThn109840_N8S7394C18D0Ev,_ZThn71288_N8S7394C18D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C188S7394C178S7394C12__7S7394C1[] = {
  0,
  0,
  ABISELECT(-109840,-71288),
  ABISELECT(-109840,-71288),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C19D1Ev();
extern void _ZN8S7394C19D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C198S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(143824,93336),
  ABISELECT(143568,93172),
  ABISELECT(128784,83596),
  ABISELECT(108832,70644),
  ABISELECT(108720,70560),
  ABISELECT(109808,71272),
  ABISELECT(108672,70528),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&_ZN8S7394C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C19D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN8S7394C10D1Ev();
extern void _ZN8S7394C10D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C108S7394C198S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(143568,93172),
  ABISELECT(128784,83596),
  ABISELECT(108832,70644),
  ABISELECT(108720,70560),
  ABISELECT(109808,71272),
  ABISELECT(108672,70528),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&_ZN8S7394C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C10D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C108S7394C198S7394C178S7394C12__A2__7S7394C1[] = {
  ABISELECT(109808,71272),
  ABISELECT(108672,70528),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C108S7394C198S7394C178S7394C12__A4__7S7394C1[] = {
  ABISELECT(108672,70528),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn109808_N7S7394C8D1Ev,_ZThn71272_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn109808_N7S7394C8D0Ev,_ZThn71272_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C108S7394C198S7394C178S7394C12__A2__7S7394C1[] = {
  0,
  0,
  ABISELECT(-109808,-71272),
  ABISELECT(-109808,-71272),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn108720_N8S7394C10D1Ev,_ZThn70560_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn108720_N8S7394C10D0Ev,_ZThn70560_N8S7394C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(-108720,-70560),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-108720,-70560),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn108832_N8S7394C10D1Ev,_ZThn70644_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn108832_N8S7394C10D0Ev,_ZThn70644_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-108832,-70644),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-108832,-70644),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn109808_N8S7394C10D1Ev,_ZThn71272_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn109808_N8S7394C10D0Ev,_ZThn71272_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[] = {
  0,
  0,
  ABISELECT(-109808,-71272),
  ABISELECT(-109808,-71272),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C10D1Ev,_ZThn83596_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C10D0Ev,_ZThn83596_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-128784,-83596),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-128784,-83596),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(-34896,-22644),
  ABISELECT(-143568,-93172),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
};
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C198S7394C178S7394C12__A1__7S7394C1[] = {
  ABISELECT(108768,70600),
  ABISELECT(107632,69856),
  ABISELECT(107792,69972),
  ABISELECT(107680,69888),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn107680_N8S7394C14D1Ev,_ZThn69888_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn107680_N8S7394C14D0Ev,_ZThn69888_N8S7394C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C148S7394C198S7394C178S7394C12__A1__7S7394C1[] = {
  ABISELECT(-107680,-69888),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-107680,-69888),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn107792_N8S7394C14D1Ev,_ZThn69972_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn107792_N8S7394C14D0Ev,_ZThn69972_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C148S7394C198S7394C178S7394C12__A1__7S7394C1[] = {
  0,
  ABISELECT(-107792,-69972),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-107792,-69972),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn108768_N8S7394C14D1Ev,_ZThn70600_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn108768_N8S7394C14D0Ev,_ZThn70600_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C148S7394C198S7394C178S7394C12__A1__7S7394C1[] = {
  0,
  0,
  ABISELECT(-108768,-70600),
  ABISELECT(-108768,-70600),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn143824_N8S7394C19D1Ev,_ZThn93336_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn143824_N8S7394C19D0Ev,_ZThn93336_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C18__8S7394C198S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(-143824,-93336),
  ABISELECT(-34016,-22064),
  ABISELECT(-35152,-22808),
  ABISELECT(-34992,-22692),
  ABISELECT(-15040,-9740),
  ABISELECT(-143824,-93336),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C19D1Ev,_ZThn83596_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn128784_N8S7394C19D0Ev,_ZThn83596_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C198S7394C178S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-128784,-83596),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-128784,-83596),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn108832_N8S7394C19D1Ev,_ZThn70644_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn108832_N8S7394C19D0Ev,_ZThn70644_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C198S7394C178S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-108832,-70644),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-108832,-70644),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn109808_N8S7394C19D1Ev,_ZThn71272_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn109808_N8S7394C19D0Ev,_ZThn71272_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C198S7394C178S7394C12__7S7394C1[] = {
  0,
  0,
  ABISELECT(-109808,-71272),
  ABISELECT(-109808,-71272),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn108720_N8S7394C19D1Ev,_ZThn70560_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn108720_N8S7394C19D0Ev,_ZThn70560_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C198S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(-108720,-70560),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-108720,-70560),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C198S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(-34896,-22644),
  ABISELECT(-143568,-93172),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
};
extern void ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C198S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(108768,70600),
  ABISELECT(107632,69856),
  ABISELECT(107792,69972),
  ABISELECT(107680,69888),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C118S7394C178S7394C12__A1__7S7394C1[] = {
  ABISELECT(107776,69956),
  ABISELECT(106640,69212),
  ABISELECT(106800,69328),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn106800_N8S7394C11D1Ev,_ZThn69328_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn106800_N8S7394C11D0Ev,_ZThn69328_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C118S7394C178S7394C12__A1__7S7394C1[] = {
  0,
  ABISELECT(-106800,-69328),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-106800,-69328),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZThn107776_N8S7394C11D1Ev,_ZThn69956_N8S7394C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void ABISELECT(_ZThn107776_N8S7394C11D0Ev,_ZThn69956_N8S7394C11D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C118S7394C178S7394C12__A1__7S7394C1[] = {
  0,
  0,
  ABISELECT(-107776,-69956),
  ABISELECT(-107776,-69956),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C15D1Ev();
extern void _ZN8S7394C15D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C158S7394C178S7394C12__A1__7S7394C1[] = {
  ABISELECT(92992,60380),
  ABISELECT(91856,59636),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&_ZN8S7394C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C15D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C158S7394C178S7394C12__A3__7S7394C1[] = {
  ABISELECT(92992,60380),
  ABISELECT(91856,59636),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C158S7394C178S7394C12__A5__7S7394C1[] = {
  ABISELECT(91856,59636),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn92992_N7S7394C8D1Ev,_ZThn60380_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn92992_N7S7394C8D0Ev,_ZThn60380_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C158S7394C178S7394C12__A3__7S7394C1[] = {
  0,
  0,
  ABISELECT(-92992,-60380),
  ABISELECT(-92992,-60380),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev)();
extern void ABISELECT(_ZThn92992_N8S7394C15D1Ev,_ZThn60380_N8S7394C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev)();
extern void ABISELECT(_ZThn92992_N8S7394C15D0Ev,_ZThn60380_N8S7394C15D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C158S7394C178S7394C12__A1__7S7394C1[] = {
  0,
  0,
  ABISELECT(-92992,-60380),
  ABISELECT(-92992,-60380),
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn128816_N8S7394C17D1Ev,_ZThn83612_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn128816_N8S7394C17D0Ev,_ZThn83612_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C178S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-128816,-83612),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-128816,-83612),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn108864_N8S7394C17D1Ev,_ZThn70660_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn108864_N8S7394C17D0Ev,_ZThn70660_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C178S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-108864,-70660),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-108864,-70660),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn109840_N8S7394C17D1Ev,_ZThn71288_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn109840_N8S7394C17D0Ev,_ZThn71288_N8S7394C17D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C178S7394C12__7S7394C1[] = {
  0,
  0,
  ABISELECT(-109840,-71288),
  ABISELECT(-109840,-71288),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZThn32_N8S7394C17D1Ev,_ZThn16_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S7394C17D0Ev,_ZThn16_N8S7394C17D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C19__8S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(143824,93336),
  ABISELECT(143568,93172),
  ABISELECT(128784,83596),
  ABISELECT(108832,70644),
  ABISELECT(108720,70560),
  ABISELECT(109808,71272),
  ABISELECT(108672,70528),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C17D1Ev,_ZThn16_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C17D0Ev,_ZThn16_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn143856_N8S7394C17D1Ev,_ZThn93352_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn143856_N8S7394C17D0Ev,_ZThn93352_N8S7394C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C18__A1__8S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(-143856,-93352),
  ABISELECT(-34016,-22064),
  ABISELECT(-35152,-22808),
  ABISELECT(-34992,-22692),
  ABISELECT(-15040,-9740),
  ABISELECT(-143856,-93352),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn108752_N8S7394C17D1Ev,_ZThn70576_N8S7394C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev)();
extern void ABISELECT(_ZThn108752_N8S7394C17D0Ev,_ZThn70576_N8S7394C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(-108752,-70576),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-108752,-70576),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(-34896,-22644),
  ABISELECT(-143600,-93188),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
};
extern void ABISELECT(_ZThn1072_N8S7394C17D1Ev,_ZThn688_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn1072_N8S7394C17D0Ev,_ZThn688_N8S7394C17D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C19__8S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(108768,70600),
  ABISELECT(107632,69856),
  ABISELECT(107792,69972),
  ABISELECT(107680,69888),
  ABISELECT(-1072,-688),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C17D1Ev,_ZThn688_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C17D0Ev,_ZThn688_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZThn2064_N8S7394C17D1Ev,_ZThn1332_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn2064_N8S7394C17D0Ev,_ZThn1332_N8S7394C17D0Ev)();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__A__8S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(107776,69956),
  ABISELECT(106640,69212),
  ABISELECT(106800,69328),
  ABISELECT(-2064,-1332),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C17D1Ev,_ZThn1332_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C17D0Ev,_ZThn1332_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZThn16848_N8S7394C17D1Ev,_ZThn10908_N8S7394C17D1Ev)();
extern void ABISELECT(_ZThn16848_N8S7394C17D0Ev,_ZThn10908_N8S7394C17D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__8S7394C178S7394C12__7S7394C1[] = {
  ABISELECT(92992,60380),
  ABISELECT(91856,59636),
  ABISELECT(-16848,-10908),
  (VTBL_ENTRY)&(_ZTI8S7394C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C17D1Ev,_ZThn10908_N8S7394C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C17D0Ev,_ZThn10908_N8S7394C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN8S7394C19D1Ev();
extern void _ZN8S7394C19D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C198S7394C12__A1__7S7394C1[] = {
  ABISELECT(37344,24244),
  ABISELECT(37088,24080),
  ABISELECT(22304,14504),
  ABISELECT(2352,1552),
  ABISELECT(2240,1468),
  ABISELECT(3328,2180),
  ABISELECT(2192,1436),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&_ZN8S7394C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C19D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN8S7394C10D1Ev();
extern void _ZN8S7394C10D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C108S7394C198S7394C12__A1__7S7394C1[] = {
  ABISELECT(37088,24080),
  ABISELECT(22304,14504),
  ABISELECT(2352,1552),
  ABISELECT(2240,1468),
  ABISELECT(3328,2180),
  ABISELECT(2192,1436),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&_ZN8S7394C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C10D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C108S7394C198S7394C12__A4__7S7394C1[] = {
  ABISELECT(3328,2180),
  ABISELECT(2192,1436),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C108S7394C198S7394C12__A6__7S7394C1[] = {
  ABISELECT(2192,1436),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn3328_N7S7394C8D1Ev,_ZThn2180_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn3328_N7S7394C8D0Ev,_ZThn2180_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C108S7394C198S7394C12__A4__7S7394C1[] = {
  0,
  0,
  ABISELECT(-3328,-2180),
  ABISELECT(-3328,-2180),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn2240_N8S7394C10D1Ev,_ZThn1468_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn2240_N8S7394C10D0Ev,_ZThn1468_N8S7394C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C108S7394C198S7394C12__A1__7S7394C1[] = {
  ABISELECT(-2240,-1468),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-2240,-1468),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn2352_N8S7394C10D1Ev,_ZThn1552_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn2352_N8S7394C10D0Ev,_ZThn1552_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C108S7394C198S7394C12__A1__7S7394C1[] = {
  0,
  ABISELECT(-2352,-1552),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-2352,-1552),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn3328_N8S7394C10D1Ev,_ZThn2180_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn3328_N8S7394C10D0Ev,_ZThn2180_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C108S7394C198S7394C12__A1__7S7394C1[] = {
  0,
  0,
  ABISELECT(-3328,-2180),
  ABISELECT(-3328,-2180),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev)();
extern void ABISELECT(_ZThn22304_N8S7394C10D1Ev,_ZThn14504_N8S7394C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev)();
extern void ABISELECT(_ZThn22304_N8S7394C10D0Ev,_ZThn14504_N8S7394C10D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C108S7394C198S7394C12__A1__7S7394C1[] = {
  0,
  ABISELECT(-22304,-14504),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-22304,-14504),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C108S7394C198S7394C12__A1__7S7394C1[] = {
  ABISELECT(-34896,-22644),
  ABISELECT(-37088,-24080),
  (VTBL_ENTRY)&(_ZTI8S7394C10[0]),
};
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C198S7394C12__A2__7S7394C1[] = {
  ABISELECT(2288,1508),
  ABISELECT(1152,764),
  ABISELECT(1312,880),
  ABISELECT(1200,796),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn1200_N8S7394C14D1Ev,_ZThn796_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn1200_N8S7394C14D0Ev,_ZThn796_N8S7394C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C148S7394C198S7394C12__A2__7S7394C1[] = {
  ABISELECT(-1200,-796),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-1200,-796),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn1312_N8S7394C14D1Ev,_ZThn880_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn1312_N8S7394C14D0Ev,_ZThn880_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C148S7394C198S7394C12__A2__7S7394C1[] = {
  0,
  ABISELECT(-1312,-880),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-1312,-880),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZThn2288_N8S7394C14D1Ev,_ZThn1508_N8S7394C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void ABISELECT(_ZThn2288_N8S7394C14D0Ev,_ZThn1508_N8S7394C14D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C148S7394C198S7394C12__A2__7S7394C1[] = {
  0,
  0,
  ABISELECT(-2288,-1508),
  ABISELECT(-2288,-1508),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn37344_N8S7394C19D1Ev,_ZThn24244_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn37344_N8S7394C19D0Ev,_ZThn24244_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C18__8S7394C198S7394C12__A1__7S7394C1[] = {
  ABISELECT(-37344,-24244),
  ABISELECT(-34016,-22064),
  ABISELECT(-35152,-22808),
  ABISELECT(-34992,-22692),
  ABISELECT(-15040,-9740),
  ABISELECT(-37344,-24244),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn22304_N8S7394C19D1Ev,_ZThn14504_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn22304_N8S7394C19D0Ev,_ZThn14504_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C198S7394C12__A1__7S7394C1[] = {
  0,
  ABISELECT(-22304,-14504),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-22304,-14504),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn2352_N8S7394C19D1Ev,_ZThn1552_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn2352_N8S7394C19D0Ev,_ZThn1552_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C198S7394C12__A1__7S7394C1[] = {
  0,
  ABISELECT(-2352,-1552),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-2352,-1552),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn3328_N8S7394C19D1Ev,_ZThn2180_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn3328_N8S7394C19D0Ev,_ZThn2180_N8S7394C19D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C198S7394C12__A1__7S7394C1[] = {
  0,
  0,
  ABISELECT(-3328,-2180),
  ABISELECT(-3328,-2180),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn2240_N8S7394C19D1Ev,_ZThn1468_N8S7394C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev)();
extern void ABISELECT(_ZThn2240_N8S7394C19D0Ev,_ZThn1468_N8S7394C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C198S7394C12__A1__7S7394C1[] = {
  ABISELECT(-2240,-1468),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-2240,-1468),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C198S7394C12__A1__7S7394C1[] = {
  ABISELECT(-34896,-22644),
  ABISELECT(-37088,-24080),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
};
extern void ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev)();
extern void ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C198S7394C12__A1__7S7394C1[] = {
  ABISELECT(2288,1508),
  ABISELECT(1152,764),
  ABISELECT(1312,880),
  ABISELECT(1200,796),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S7394C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D1Ev,_ZThn672_N8S7394C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S7394C19D0Ev,_ZThn672_N8S7394C19D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void _ZN8S7394C132v7Ev();
extern void ABISELECT(_ZTv0_n88_N8S7394C12D1Ev,_ZTv0_n44_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn110336_N8S7394C12D1Ev,_ZThn71612_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S7394C12D0Ev,_ZTv0_n44_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn110336_N8S7394C12D0Ev,_ZThn71612_N8S7394C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C13__8S7394C12__7S7394C1[] = {
  ABISELECT(-110336,-71612),
  0,
  ABISELECT(18480,12000),
  ABISELECT(16912,10952),
  ABISELECT(-496,-324),
  ABISELECT(-1632,-1068),
  ABISELECT(-1472,-952),
  ABISELECT(-1584,-1036),
  ABISELECT(16368,10604),
  ABISELECT(-110336,-71612),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&_ZN8S7394C132v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S7394C12D1Ev,_ZTv0_n44_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S7394C12D0Ev,_ZTv0_n44_N8S7394C12D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn126704_N8S7394C12D1Ev,_ZThn82216_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn126704_N8S7394C12D0Ev,_ZThn82216_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-126704,-82216),
  ABISELECT(-16864,-10928),
  ABISELECT(-18000,-11672),
  ABISELECT(-17840,-11556),
  ABISELECT(-17952,-11640),
  ABISELECT(-126704,-82216),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn108752_N8S7394C12D1Ev,_ZThn70576_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn108752_N8S7394C12D0Ev,_ZThn70576_N8S7394C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C12__7S7394C1[] = {
  ABISELECT(-108752,-70576),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(-108752,-70576),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn108864_N8S7394C12D1Ev,_ZThn70660_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn108864_N8S7394C12D0Ev,_ZThn70660_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-108864,-70660),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-108864,-70660),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C12D1Ev,_ZTv0_n12_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn109840_N8S7394C12D1Ev,_ZThn71288_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7394C12D0Ev,_ZTv0_n12_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn109840_N8S7394C12D0Ev,_ZThn71288_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C12__7S7394C1[] = {
  0,
  0,
  ABISELECT(-109840,-71288),
  ABISELECT(-109840,-71288),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C12D1Ev,_ZTv0_n12_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C12D0Ev,_ZTv0_n12_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn127248_N8S7394C12D1Ev,_ZThn82564_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn127248_N8S7394C12D0Ev,_ZThn82564_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__8S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-127248,-82564),
  ABISELECT(-17408,-11276),
  ABISELECT(-18544,-12020),
  ABISELECT(-127248,-82564),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn128816_N8S7394C12D1Ev,_ZThn83612_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn128816_N8S7394C12D0Ev,_ZThn83612_N8S7394C12D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C12__7S7394C1[] = {
  0,
  ABISELECT(-128816,-83612),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-128816,-83612),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A2__8S7394C12__7S7394C1[] = {
  ABISELECT(-34896,-22644),
  ABISELECT(-143600,-93188),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
};
extern void ABISELECT(_ZThn32_N8S7394C12D1Ev,_ZThn16_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn32_N8S7394C12D0Ev,_ZThn16_N8S7394C12D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C198S7394C17__8S7394C12__7S7394C1[] = {
  ABISELECT(143824,93336),
  ABISELECT(143568,93172),
  ABISELECT(128784,83596),
  ABISELECT(108832,70644),
  ABISELECT(108720,70560),
  ABISELECT(109808,71272),
  ABISELECT(108672,70528),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C12D1Ev,_ZThn16_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7394C12D0Ev,_ZThn16_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn143856_N8S7394C12D1Ev,_ZThn93352_N8S7394C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev)();
extern void ABISELECT(_ZThn143856_N8S7394C12D0Ev,_ZThn93352_N8S7394C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7394C18__A1__8S7394C12__7S7394C1[] = {
  ABISELECT(-143856,-93352),
  ABISELECT(-34016,-22064),
  ABISELECT(-35152,-22808),
  ABISELECT(-34992,-22692),
  ABISELECT(-15040,-9740),
  ABISELECT(-143856,-93352),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev),
};
extern void ABISELECT(_ZThn1072_N8S7394C12D1Ev,_ZThn688_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn1072_N8S7394C12D0Ev,_ZThn688_N8S7394C12D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C198S7394C17__A1__8S7394C12__7S7394C1[] = {
  ABISELECT(108768,70600),
  ABISELECT(107632,69856),
  ABISELECT(107792,69972),
  ABISELECT(107680,69888),
  ABISELECT(-1072,-688),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C12D1Ev,_ZThn688_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S7394C12D0Ev,_ZThn688_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZThn2064_N8S7394C12D1Ev,_ZThn1332_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn2064_N8S7394C12D0Ev,_ZThn1332_N8S7394C12D0Ev)();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C118S7394C17__A1__8S7394C12__7S7394C1[] = {
  ABISELECT(107776,69956),
  ABISELECT(106640,69212),
  ABISELECT(106800,69328),
  ABISELECT(-2064,-1332),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C12D1Ev,_ZThn1332_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2064_N8S7394C12D0Ev,_ZThn1332_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZThn16848_N8S7394C12D1Ev,_ZThn10908_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn16848_N8S7394C12D0Ev,_ZThn10908_N8S7394C12D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C158S7394C17__A1__8S7394C12__7S7394C1[] = {
  ABISELECT(92992,60380),
  ABISELECT(91856,59636),
  ABISELECT(-16848,-10908),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C12D1Ev,_ZThn10908_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16848_N8S7394C12D0Ev,_ZThn10908_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZThn106512_N8S7394C12D1Ev,_ZThn69108_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn106512_N8S7394C12D0Ev,_ZThn69108_N8S7394C12D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C19__A1__8S7394C12__7S7394C1[] = {
  ABISELECT(37344,24244),
  ABISELECT(37088,24080),
  ABISELECT(22304,14504),
  ABISELECT(2352,1552),
  ABISELECT(2240,1468),
  ABISELECT(3328,2180),
  ABISELECT(2192,1436),
  ABISELECT(-106512,-69108),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn106512_N8S7394C12D1Ev,_ZThn69108_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn106512_N8S7394C12D0Ev,_ZThn69108_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZThn107552_N8S7394C12D1Ev,_ZThn69780_N8S7394C12D1Ev)();
extern void ABISELECT(_ZThn107552_N8S7394C12D0Ev,_ZThn69780_N8S7394C12D0Ev)();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C148S7394C19__A2__8S7394C12__7S7394C1[] = {
  ABISELECT(2288,1508),
  ABISELECT(1152,764),
  ABISELECT(1312,880),
  ABISELECT(1200,796),
  ABISELECT(-107552,-69780),
  (VTBL_ENTRY)&(_ZTI8S7394C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn107552_N8S7394C12D1Ev,_ZThn69780_N8S7394C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn107552_N8S7394C12D0Ev,_ZThn69780_N8S7394C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void _ZN7S7394C7D1Ev();
extern void _ZN7S7394C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C7__7S7394C1[] = {
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&_ZN7S7394C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C7__7S7394C1[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev)();
extern void ABISELECT(_ZThn1088_N7S7394C7D1Ev,_ZThn712_N7S7394C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev)();
extern void ABISELECT(_ZThn1088_N7S7394C7D0Ev,_ZThn712_N7S7394C7D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C7__7S7394C1[] = {
  0,
  0,
  ABISELECT(-1088,-712),
  ABISELECT(-1088,-712),
  (VTBL_ENTRY)&(_ZTI7S7394C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__7S7394C1[] = {
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C8__A1__7S7394C1[] = {
  ABISELECT(-160,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZThn976_N7S7394C8D1Ev,_ZThn628_N7S7394C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void ABISELECT(_ZThn976_N7S7394C8D0Ev,_ZThn628_N7S7394C8D0Ev)() __attribute__((weak));
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C8__7S7394C1[] = {
  0,
  0,
  ABISELECT(-976,-628),
  ABISELECT(-976,-628),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C132v7Ev();
extern void _ZN8S7394C13D1Ev();
extern void _ZN8S7394C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C13__7S7394C1[] = {
  ABISELECT(18480,12000),
  ABISELECT(16912,10952),
  ABISELECT(-496,-324),
  ABISELECT(-1632,-1068),
  ABISELECT(-1472,-952),
  ABISELECT(-1584,-1036),
  ABISELECT(16368,10604),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&_ZN8S7394C132v7Ev,
  (VTBL_ENTRY)&_ZN8S7394C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C13D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn16368_N8S7394C13D1Ev,_ZThn10604_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn16368_N8S7394C13D0Ev,_ZThn10604_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__8S7394C13__7S7394C1[] = {
  0,
  ABISELECT(-16368,-10604),
  ABISELECT(-16864,-10928),
  ABISELECT(-18000,-11672),
  ABISELECT(-17840,-11556),
  ABISELECT(-17952,-11640),
  ABISELECT(-16368,-10604),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C13__7S7394C1[] = {
  ABISELECT(1584,1036),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(1584,1036),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C13__7S7394C1[] = {
  0,
  ABISELECT(1472,952),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(1472,952),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C13D1Ev,_ZTv0_n12_N8S7394C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C13D0Ev,_ZTv0_n12_N8S7394C13D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C13__7S7394C1[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C13D1Ev,_ZTv0_n12_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C13D0Ev,_ZTv0_n12_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn16912_N8S7394C13D1Ev,_ZThn10952_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn16912_N8S7394C13D0Ev,_ZThn10952_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__8S7394C13__7S7394C1[] = {
  0,
  ABISELECT(-16912,-10952),
  ABISELECT(-17408,-11276),
  ABISELECT(-18544,-12020),
  ABISELECT(-16912,-10952),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev)();
extern void ABISELECT(_ZThn18480_N8S7394C13D1Ev,_ZThn12000_N8S7394C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev)();
extern void ABISELECT(_ZThn18480_N8S7394C13D0Ev,_ZThn12000_N8S7394C13D0Ev)() __attribute__((weak));
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C13__7S7394C1[] = {
  0,
  ABISELECT(-18480,-12000),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(-18480,-12000),
  (VTBL_ENTRY)&(_ZTI8S7394C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void _ZN8S7394C14D1Ev();
extern void _ZN8S7394C14D0Ev();
extern void _ZN8S7394C142v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C14__7S7394C1[] = {
  ABISELECT(-16864,-10928),
  ABISELECT(-18000,-11672),
  ABISELECT(-17840,-11556),
  ABISELECT(-17952,-11640),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&_ZN8S7394C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C142v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7394C7__8S7394C14__7S7394C1[] = {
  ABISELECT(17952,11640),
  ABISELECT(1088,712),
  ABISELECT(-48,-32),
  ABISELECT(112,84),
  ABISELECT(17952,11640),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C14__7S7394C1[] = {
  0,
  ABISELECT(17840,11556),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(17840,11556),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C14__7S7394C1[] = {
  0,
  0,
  ABISELECT(16864,10928),
  ABISELECT(16864,10928),
  (VTBL_ENTRY)&(_ZTI8S7394C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C15D1Ev();
extern void _ZN8S7394C15D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C15__7S7394C1[] = {
  ABISELECT(-17408,-11276),
  ABISELECT(-18544,-12020),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&_ZN8S7394C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C15D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void _ZN7S7394C8D1Ev();
extern void _ZN7S7394C8D0Ev();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C88S7394C15__A1__7S7394C1[] = {
  ABISELECT(-17408,-11276),
  ABISELECT(-18544,-12020),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&_ZN7S7394C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7394C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C27S7394C88S7394C15__A2__7S7394C1[] = {
  ABISELECT(-18544,-12020),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__7S7394C88S7394C15__A1__7S7394C1[] = {
  0,
  0,
  ABISELECT(17408,11276),
  ABISELECT(17408,11276),
  (VTBL_ENTRY)&(_ZTI7S7394C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C15__7S7394C1[] = {
  0,
  0,
  ABISELECT(17408,11276),
  ABISELECT(17408,11276),
  (VTBL_ENTRY)&(_ZTI8S7394C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
extern void _ZN8S7394C11D1Ev();
extern void _ZN8S7394C11D0Ev();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__7S7394C1[] = {
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&_ZN8S7394C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C11__7S7394C1[] = {
  0,
  ABISELECT(19952,12952),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(19952,12952),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C11__7S7394C1[] = {
  0,
  0,
  ABISELECT(18976,12324),
  ABISELECT(18976,12324),
  (VTBL_ENTRY)&(_ZTI8S7394C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7394C2__A3__7S7394C1[] = {
  ABISELECT(-34896,-22644),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
extern void _ZN8S7394C18D1Ev();
extern void _ZN8S7394C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C18__A1__7S7394C1[] = {
  ABISELECT(-34016,-22064),
  ABISELECT(-35152,-22808),
  ABISELECT(-34992,-22692),
  ABISELECT(-15040,-9740),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&_ZN8S7394C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7394C18D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev)();
extern void _ZN8S7394C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7394C11__8S7394C18__A1__7S7394C1[] = {
  0,
  ABISELECT(15040,9740),
  ABISELECT(-18976,-12324),
  ABISELECT(-20112,-13068),
  ABISELECT(-19952,-12952),
  ABISELECT(15040,9740),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN8S7394C112v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev)();
extern void _ZN7S7394C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C8__8S7394C18__A1__7S7394C1[] = {
  0,
  ABISELECT(34992,22692),
  ABISELECT(976,628),
  ABISELECT(-160,-116),
  ABISELECT(34992,22692),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev)();
extern void _ZN7S7394C52v1Ev();
extern void _ZN7S7394C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7394C5__8S7394C18__A1__7S7394C1[] = {
  0,
  0,
  ABISELECT(34016,22064),
  ABISELECT(34016,22064),
  (VTBL_ENTRY)&(_ZTI8S7394C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7394C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7394C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7394C22__7S7394C1[] = {
  ABISELECT(-35184,-22824),
  0,
  (VTBL_ENTRY)&(_ZTI8S7394C22[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7394C28S7394C22__A7__7S7394C1[] = {
  ABISELECT(-35184,-22824),
  0,
  (VTBL_ENTRY)&(_ZTI7S7394C2[0]),
};
static  VTT_ENTRY vtt_S7394C1[] = {
  {&(_ZTV7S7394C1[13]),  13,182},
  {&(_tg__ZTV7S7394C2__A__7S7394C1[3]),  3,3},
  {&(_tg__ZTV7S7394C4__7S7394C1[6]),  6,11},
  {&(_tg__ZTV7S7394C7__7S7394C4__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C8__7S7394C4__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__A1__7S7394C4__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C12__7S7394C1[12]),  12,14},
  {&(_tg__ZTV8S7394C178S7394C12__7S7394C1[9]),  9,11},
  {&(_tg__ZTV8S7394C188S7394C178S7394C12__7S7394C1[6]),  6,8},
  {&(_tg__ZTV8S7394C11__8S7394C188S7394C178S7394C12__7S7394C1[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C188S7394C178S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C188S7394C178S7394C12__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C198S7394C178S7394C12__7S7394C1[9]),  9,12},
  {&(_tg__ZTV8S7394C108S7394C198S7394C178S7394C12__7S7394C1[8]),  8,11},
  {&(_tg__ZTV7S7394C88S7394C108S7394C198S7394C178S7394C12__A2__7S7394C1[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C108S7394C198S7394C178S7394C12__A4__7S7394C1[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C108S7394C198S7394C178S7394C12__A2__7S7394C1[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[7]),  7,10},
  {&(_tg__ZTV7S7394C2__A2__8S7394C108S7394C198S7394C178S7394C12__7S7394C1[3]),  3,3},
  {&(_tg__ZTV8S7394C148S7394C198S7394C178S7394C12__A1__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C148S7394C198S7394C178S7394C12__A1__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C148S7394C198S7394C178S7394C12__A1__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C148S7394C198S7394C178S7394C12__A1__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C18__8S7394C198S7394C178S7394C12__7S7394C1[7]),  7,9},
  {&(_tg__ZTV8S7394C11__8S7394C198S7394C178S7394C12__7S7394C1[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C198S7394C178S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C198S7394C178S7394C12__7S7394C1[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C198S7394C178S7394C12__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C2__A2__8S7394C198S7394C178S7394C12__7S7394C1[3]),  3,3},
  {&(_tg__ZTV8S7394C14__8S7394C198S7394C178S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV8S7394C118S7394C178S7394C12__A1__7S7394C1[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C118S7394C178S7394C12__A1__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C118S7394C178S7394C12__A1__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C158S7394C178S7394C12__A1__7S7394C1[4]),  4,7},
  {&(_tg__ZTV7S7394C88S7394C158S7394C178S7394C12__A3__7S7394C1[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C158S7394C178S7394C12__A5__7S7394C1[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C158S7394C178S7394C12__A3__7S7394C1[5]),  5,9},
  {&(_tg__ZTV7S7394C5__8S7394C158S7394C178S7394C12__A1__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C178S7394C12__7S7394C1[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C178S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C178S7394C12__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C19__8S7394C178S7394C12__7S7394C1[9]),  9,12},
  {&(_tg__ZTV8S7394C18__A1__8S7394C178S7394C12__7S7394C1[7]),  7,9},
  {&(_tg__ZTV7S7394C7__8S7394C178S7394C12__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C2__A2__8S7394C178S7394C12__7S7394C1[3]),  3,3},
  {&(_tg__ZTV8S7394C148S7394C19__8S7394C178S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV8S7394C11__A__8S7394C178S7394C12__7S7394C1[5]),  5,8},
  {&(_tg__ZTV8S7394C15__8S7394C178S7394C12__7S7394C1[4]),  4,7},
  {&(_tg__ZTV8S7394C198S7394C12__A1__7S7394C1[9]),  9,12},
  {&(_tg__ZTV8S7394C108S7394C198S7394C12__A1__7S7394C1[8]),  8,11},
  {&(_tg__ZTV7S7394C88S7394C108S7394C198S7394C12__A4__7S7394C1[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C108S7394C198S7394C12__A6__7S7394C1[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C108S7394C198S7394C12__A4__7S7394C1[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C108S7394C198S7394C12__A1__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C108S7394C198S7394C12__A1__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C108S7394C198S7394C12__A1__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C11__8S7394C108S7394C198S7394C12__A1__7S7394C1[7]),  7,10},
  {&(_tg__ZTV7S7394C2__A2__8S7394C108S7394C198S7394C12__A1__7S7394C1[3]),  3,3},
  {&(_tg__ZTV8S7394C148S7394C198S7394C12__A2__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C148S7394C198S7394C12__A2__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C148S7394C198S7394C12__A2__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C148S7394C198S7394C12__A2__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C18__8S7394C198S7394C12__A1__7S7394C1[7]),  7,9},
  {&(_tg__ZTV8S7394C11__8S7394C198S7394C12__A1__7S7394C1[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C198S7394C12__A1__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C198S7394C12__A1__7S7394C1[5]),  5,9},
  {&(_tg__ZTV7S7394C7__8S7394C198S7394C12__A1__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C2__A2__8S7394C198S7394C12__A1__7S7394C1[3]),  3,3},
  {&(_tg__ZTV8S7394C14__8S7394C198S7394C12__A1__7S7394C1[6]),  6,9},
  {&(_tg__ZTV8S7394C13__8S7394C12__7S7394C1[11]),  11,14},
  {&(_tg__ZTV8S7394C14__8S7394C12__7S7394C1[8]),  8,11},
  {&(_tg__ZTV7S7394C7__8S7394C12__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C12__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C15__8S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV8S7394C11__8S7394C12__7S7394C1[7]),  7,10},
  {&(_tg__ZTV7S7394C2__A2__8S7394C12__7S7394C1[3]),  3,3},
  {&(_tg__ZTV8S7394C198S7394C17__8S7394C12__7S7394C1[9]),  9,12},
  {&(_tg__ZTV8S7394C18__A1__8S7394C12__7S7394C1[7]),  7,9},
  {&(_tg__ZTV8S7394C148S7394C198S7394C17__A1__8S7394C12__7S7394C1[6]),  6,9},
  {&(_tg__ZTV8S7394C118S7394C17__A1__8S7394C12__7S7394C1[5]),  5,8},
  {&(_tg__ZTV8S7394C158S7394C17__A1__8S7394C12__7S7394C1[4]),  4,7},
  {&(_tg__ZTV8S7394C19__A1__8S7394C12__7S7394C1[9]),  9,12},
  {&(_tg__ZTV8S7394C148S7394C19__A2__8S7394C12__7S7394C1[6]),  6,9},
  {&(_ZTV7S7394C1[21]),  21,182},
  {&(_ZTV7S7394C1[103]),  103,182},
  {&(_ZTV7S7394C1[111]),  111,182},
  {&(_ZTV7S7394C1[119]),  119,182},
  {&(_ZTV7S7394C1[38]),  38,182},
  {&(_ZTV7S7394C1[134]),  134,182},
  {&(_ZTV7S7394C1[145]),  145,182},
  {&(_ZTV7S7394C1[154]),  154,182},
  {&(_ZTV7S7394C1[164]),  164,182},
  {&(_ZTV7S7394C1[170]),  170,182},
  {&(_ZTV7S7394C1[49]),  49,182},
  {&(_ZTV7S7394C1[177]),  177,182},
  {&(_ZTV7S7394C1[58]),  58,182},
  {&(_ZTV7S7394C1[66]),  66,182},
  {&(_ZTV7S7394C1[73]),  73,182},
  {&(_ZTV7S7394C1[85]),  85,182},
  {&(_ZTV7S7394C1[94]),  94,182},
  {&(_ZTV7S7394C1[182]),  182,182},
  {&(_tg__ZTV7S7394C7__7S7394C1[5]),  5,7},
  {&(_tg__ZTV7S7394C8__7S7394C7__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__7S7394C7__7S7394C1[5]),  5,9},
  {&(_tg__ZTV7S7394C8__7S7394C1[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C8__A1__7S7394C1[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C8__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C13__7S7394C1[9]),  9,12},
  {&(_tg__ZTV8S7394C14__8S7394C13__7S7394C1[8]),  8,11},
  {&(_tg__ZTV7S7394C7__8S7394C13__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C13__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C13__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C15__8S7394C13__7S7394C1[6]),  6,9},
  {&(_tg__ZTV8S7394C11__8S7394C13__7S7394C1[7]),  7,10},
  {&(_tg__ZTV8S7394C14__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C7__8S7394C14__7S7394C1[6]),  6,8},
  {&(_tg__ZTV7S7394C8__8S7394C14__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C14__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C15__7S7394C1[4]),  4,7},
  {&(_tg__ZTV7S7394C88S7394C15__A1__7S7394C1[4]),  4,7},
  {&(_tg__ZTV7S7394C27S7394C88S7394C15__A2__7S7394C1[3]),  3,3},
  {&(_tg__ZTV7S7394C5__7S7394C88S7394C15__A1__7S7394C1[5]),  5,9},
  {&(_tg__ZTV7S7394C5__8S7394C15__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C11__7S7394C1[5]),  5,8},
  {&(_tg__ZTV7S7394C8__8S7394C11__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C11__7S7394C1[5]),  5,9},
  {&(_tg__ZTV7S7394C2__A3__7S7394C1[3]),  3,3},
  {&(_tg__ZTV8S7394C18__A1__7S7394C1[6]),  6,8},
  {&(_tg__ZTV8S7394C11__8S7394C18__A1__7S7394C1[7]),  7,10},
  {&(_tg__ZTV7S7394C8__8S7394C18__A1__7S7394C1[6]),  6,9},
  {&(_tg__ZTV7S7394C5__8S7394C18__A1__7S7394C1[5]),  5,9},
  {&(_tg__ZTV8S7394C22__7S7394C1[3]),  3,3},
  {&(_tg__ZTV7S7394C28S7394C22__A7__7S7394C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7394C1[];
extern  VTBL_ENTRY _ZTV7S7394C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7394C1[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C13D0Ev,_ZTv0_n24_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18480_N8S7394C13D0Ev,_ZThn12000_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C13D1Ev,_ZTv0_n24_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18480_N8S7394C13D1Ev,_ZThn12000_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C13D0Ev,_ZTv0_n20_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N8S7394C13D0Ev,_ZThn10952_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C13D1Ev,_ZTv0_n20_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N8S7394C13D1Ev,_ZThn10952_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C13D0Ev,_ZTv0_n28_N8S7394C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N8S7394C13D0Ev,_ZThn10604_N8S7394C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C13D1Ev,_ZTv0_n28_N8S7394C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N8S7394C13D1Ev,_ZThn10604_N8S7394C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D0Ev,_ZTv0_n12_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1088_N7S7394C7D0Ev,_ZThn712_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C7D1Ev,_ZTv0_n12_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1088_N7S7394C7D1Ev,_ZThn712_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D0Ev,_ZTv0_n20_N7S7394C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D0Ev,_ZThn84_N7S7394C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C7D1Ev,_ZTv0_n20_N7S7394C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7394C7D1Ev,_ZThn84_N7S7394C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C12D0Ev,_ZTv0_n12_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn109840_N8S7394C12D0Ev,_ZThn71288_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C12D1Ev,_ZTv0_n12_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn109840_N8S7394C12D1Ev,_ZThn71288_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C12D0Ev,_ZTv0_n20_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn127248_N8S7394C12D0Ev,_ZThn82564_N8S7394C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108864_N8S7394C12D0Ev,_ZThn70660_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C12D1Ev,_ZTv0_n20_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn127248_N8S7394C12D1Ev,_ZThn82564_N8S7394C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108864_N8S7394C12D1Ev,_ZThn70660_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C12D0Ev,_ZTv0_n24_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128816_N8S7394C12D0Ev,_ZThn83612_N8S7394C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108752_N8S7394C12D0Ev,_ZThn70576_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C12D1Ev,_ZTv0_n24_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128816_N8S7394C12D1Ev,_ZThn83612_N8S7394C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108752_N8S7394C12D1Ev,_ZThn70576_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C12D0Ev,_ZTv0_n28_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn143856_N8S7394C12D0Ev,_ZThn93352_N8S7394C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn126704_N8S7394C12D0Ev,_ZThn82216_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C12D1Ev,_ZTv0_n28_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn143856_N8S7394C12D1Ev,_ZThn93352_N8S7394C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn126704_N8S7394C12D1Ev,_ZThn82216_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S7394C12D0Ev,_ZTv0_n44_N8S7394C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn110336_N8S7394C12D0Ev,_ZThn71612_N8S7394C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S7394C12D1Ev,_ZTv0_n44_N8S7394C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn110336_N8S7394C12D1Ev,_ZThn71612_N8S7394C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C17D0Ev,_ZTv0_n28_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn143856_N8S7394C17D0Ev,_ZThn93352_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C17D1Ev,_ZTv0_n28_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn143856_N8S7394C17D1Ev,_ZThn93352_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C17D0Ev,_ZTv0_n12_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn109840_N8S7394C17D0Ev,_ZThn71288_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C17D1Ev,_ZTv0_n12_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn109840_N8S7394C17D1Ev,_ZThn71288_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C17D0Ev,_ZTv0_n20_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108864_N8S7394C17D0Ev,_ZThn70660_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C17D1Ev,_ZTv0_n20_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108864_N8S7394C17D1Ev,_ZThn70660_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C17D0Ev,_ZTv0_n24_N8S7394C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108752_N8S7394C17D0Ev,_ZThn70576_N8S7394C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128816_N8S7394C17D0Ev,_ZThn83612_N8S7394C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C17D1Ev,_ZTv0_n24_N8S7394C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108752_N8S7394C17D1Ev,_ZThn70576_N8S7394C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128816_N8S7394C17D1Ev,_ZThn83612_N8S7394C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C15D0Ev,_ZTv0_n12_N8S7394C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn92992_N8S7394C15D0Ev,_ZThn60380_N8S7394C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C15D1Ev,_ZTv0_n12_N8S7394C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn92992_N8S7394C15D1Ev,_ZThn60380_N8S7394C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D0Ev,_ZTv0_n12_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn107776_N8S7394C11D0Ev,_ZThn69956_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C11D1Ev,_ZTv0_n12_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn107776_N8S7394C11D1Ev,_ZThn69956_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D0Ev,_ZTv0_n20_N8S7394C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn106800_N8S7394C11D0Ev,_ZThn69328_N8S7394C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C11D1Ev,_ZTv0_n20_N8S7394C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn106800_N8S7394C11D1Ev,_ZThn69328_N8S7394C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C19D0Ev,_ZTv0_n12_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3328_N8S7394C19D0Ev,_ZThn2180_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn109808_N8S7394C19D0Ev,_ZThn71272_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C19D1Ev,_ZTv0_n12_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3328_N8S7394C19D1Ev,_ZThn2180_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn109808_N8S7394C19D1Ev,_ZThn71272_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C19D0Ev,_ZTv0_n20_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2352_N8S7394C19D0Ev,_ZThn1552_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108832_N8S7394C19D0Ev,_ZThn70644_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C19D1Ev,_ZTv0_n20_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2352_N8S7394C19D1Ev,_ZThn1552_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108832_N8S7394C19D1Ev,_ZThn70644_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C19D0Ev,_ZTv0_n24_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N8S7394C19D0Ev,_ZThn1468_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22304_N8S7394C19D0Ev,_ZThn14504_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108720_N8S7394C19D0Ev,_ZThn70560_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C19D0Ev,_ZThn83596_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C19D1Ev,_ZTv0_n24_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N8S7394C19D1Ev,_ZThn1468_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22304_N8S7394C19D1Ev,_ZThn14504_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108720_N8S7394C19D1Ev,_ZThn70560_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C19D1Ev,_ZThn83596_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C19D0Ev,_ZTv0_n28_N8S7394C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37344_N8S7394C19D0Ev,_ZThn24244_N8S7394C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn143824_N8S7394C19D0Ev,_ZThn93336_N8S7394C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7394C19D1Ev,_ZTv0_n28_N8S7394C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37344_N8S7394C19D1Ev,_ZThn24244_N8S7394C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn143824_N8S7394C19D1Ev,_ZThn93336_N8S7394C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D0Ev,_ZTv0_n12_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2288_N8S7394C14D0Ev,_ZThn1508_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108768_N8S7394C14D0Ev,_ZThn70600_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C14D1Ev,_ZTv0_n12_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2288_N8S7394C14D1Ev,_ZThn1508_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108768_N8S7394C14D1Ev,_ZThn70600_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D0Ev,_ZTv0_n20_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S7394C14D0Ev,_ZThn880_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn107792_N8S7394C14D0Ev,_ZThn69972_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C14D1Ev,_ZTv0_n20_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S7394C14D1Ev,_ZThn880_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn107792_N8S7394C14D1Ev,_ZThn69972_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D0Ev,_ZTv0_n24_N8S7394C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S7394C14D0Ev,_ZThn796_N8S7394C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn107680_N8S7394C14D0Ev,_ZThn69888_N8S7394C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C14D1Ev,_ZTv0_n24_N8S7394C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S7394C14D1Ev,_ZThn796_N8S7394C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn107680_N8S7394C14D1Ev,_ZThn69888_N8S7394C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D0Ev,_ZTv0_n12_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3328_N8S7394C10D0Ev,_ZThn2180_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn109808_N8S7394C10D0Ev,_ZThn71272_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C10D1Ev,_ZTv0_n12_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3328_N8S7394C10D1Ev,_ZThn2180_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn109808_N8S7394C10D1Ev,_ZThn71272_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D0Ev,_ZTv0_n20_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2352_N8S7394C10D0Ev,_ZThn1552_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108832_N8S7394C10D0Ev,_ZThn70644_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C10D1Ev,_ZTv0_n20_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2352_N8S7394C10D1Ev,_ZThn1552_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108832_N8S7394C10D1Ev,_ZThn70644_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D0Ev,_ZTv0_n24_N8S7394C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22304_N8S7394C10D0Ev,_ZThn14504_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N8S7394C10D0Ev,_ZThn1468_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C10D0Ev,_ZThn83596_N8S7394C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108720_N8S7394C10D0Ev,_ZThn70560_N8S7394C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C10D1Ev,_ZTv0_n24_N8S7394C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22304_N8S7394C10D1Ev,_ZThn14504_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N8S7394C10D1Ev,_ZThn1468_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128784_N8S7394C10D1Ev,_ZThn83596_N8S7394C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn108720_N8S7394C10D1Ev,_ZThn70560_N8S7394C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D0Ev,_ZTv0_n12_N7S7394C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N7S7394C8D0Ev,_ZThn628_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3328_N7S7394C8D0Ev,_ZThn2180_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn92992_N7S7394C8D0Ev,_ZThn60380_N7S7394C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn109808_N7S7394C8D0Ev,_ZThn71272_N7S7394C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C8D1Ev,_ZTv0_n12_N7S7394C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N7S7394C8D1Ev,_ZThn628_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3328_N7S7394C8D1Ev,_ZThn2180_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn92992_N7S7394C8D1Ev,_ZThn60380_N7S7394C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn109808_N7S7394C8D1Ev,_ZThn71272_N7S7394C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D0Ev,_ZTv0_n12_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn109840_N8S7394C18D0Ev,_ZThn71288_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7394C18D1Ev,_ZTv0_n12_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn109840_N8S7394C18D1Ev,_ZThn71288_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D0Ev,_ZTv0_n20_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108864_N8S7394C18D0Ev,_ZThn70660_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7394C18D1Ev,_ZTv0_n20_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108864_N8S7394C18D1Ev,_ZThn70660_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D0Ev,_ZTv0_n24_N8S7394C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128816_N8S7394C18D0Ev,_ZThn83612_N8S7394C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7394C18D1Ev,_ZTv0_n24_N8S7394C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128816_N8S7394C18D1Ev,_ZThn83612_N8S7394C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C4D0Ev,_ZTv0_n12_N7S7394C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128064_N7S7394C4D0Ev,_ZThn83100_N7S7394C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C4D1Ev,_ZTv0_n12_N7S7394C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128064_N7S7394C4D1Ev,_ZThn83100_N7S7394C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C4D0Ev,_ZTv0_n20_N7S7394C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn127088_N7S7394C4D0Ev,_ZThn82472_N7S7394C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C4D1Ev,_ZTv0_n20_N7S7394C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn127088_N7S7394C4D1Ev,_ZThn82472_N7S7394C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7394C4D0Ev,_ZTv0_n24_N7S7394C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126976_N7S7394C4D0Ev,_ZThn82388_N7S7394C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7394C4D1Ev,_ZTv0_n24_N7S7394C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126976_N7S7394C4D1Ev,_ZThn82388_N7S7394C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7394C1D0Ev,_ZTv0_n28_N7S7394C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn162336_N7S7394C1D0Ev,_ZThn105328_N7S7394C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn145184_N7S7394C1D0Ev,_ZThn94192_N7S7394C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7394C1D1Ev,_ZTv0_n28_N7S7394C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn162336_N7S7394C1D1Ev,_ZThn105328_N7S7394C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn145184_N7S7394C1D1Ev,_ZThn94192_N7S7394C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7394C1D0Ev,_ZTv0_n44_N7S7394C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128816_N7S7394C1D0Ev,_ZThn83588_N7S7394C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7394C1D1Ev,_ZTv0_n44_N7S7394C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128816_N7S7394C1D1Ev,_ZThn83588_N7S7394C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C1D0Ev,_ZTv0_n12_N7S7394C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128320_N7S7394C1D0Ev,_ZThn83264_N7S7394C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7394C1D1Ev,_ZTv0_n12_N7S7394C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128320_N7S7394C1D1Ev,_ZThn83264_N7S7394C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C1D0Ev,_ZTv0_n20_N7S7394C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn145728_N7S7394C1D0Ev,_ZThn94540_N7S7394C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn127344_N7S7394C1D0Ev,_ZThn82636_N7S7394C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7394C1D1Ev,_ZTv0_n20_N7S7394C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn145728_N7S7394C1D1Ev,_ZThn94540_N7S7394C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn127344_N7S7394C1D1Ev,_ZThn82636_N7S7394C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7394C1D0Ev,_ZTv0_n24_N7S7394C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn147296_N7S7394C1D0Ev,_ZThn95588_N7S7394C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn127232_N7S7394C1D0Ev,_ZThn82552_N7S7394C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7394C1D1Ev,_ZTv0_n24_N7S7394C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn147296_N7S7394C1D1Ev,_ZThn95588_N7S7394C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn127232_N7S7394C1D1Ev,_ZThn82552_N7S7394C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7394C1 = {  "S7394C1", // class name
  bases_S7394C1, 42,
  &(vtc_S7394C1[0]), // expected_vtbl_contents
  &(vtt_S7394C1[0]), // expected_vtt_contents
  ABISELECT(162704,105568), // object size
  NSPAIRA(_ZTI7S7394C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7394C1),182, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7394C1),137, //virtual table table var
  34, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C6  {
  int s20507c6f0[10];
  void *s20507c6f1[6];
  void  mf20507c6(); // _ZN8S20507C69mf20507c6Ev
};
//SIG(-1 S20507C6) C1{ m Fi[10] Fp[6]}


void  S20507C6 ::mf20507c6(){}

static void Test_S20507C6()
{
  {
    init_simple_test("S20507C6");
    S20507C6 lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S20507C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20507C6)");
    check_field_offset(lv, s20507c6f0, 0, "S20507C6.s20507c6f0");
    check_field_offset(lv, s20507c6f1, 40, "S20507C6.s20507c6f1");
  }
}
static Arrange_To_Call_Me vS20507C6(Test_S20507C6, "S20507C6", ABISELECT(88,64));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20507C6[];
VTBL_ENTRY *P__ZTI8S20507C6 = _ZTI8S20507C6; 
Class_Descriptor cd_S20507C6 = {  "S20507C6", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI8S20507C6),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  S20507C8  : S20507C6 {
  int s20507c8f0;
  long double s20507c8f1;
  int s20507c8f2;
  ::S20507C6 s20507c8f3;
  ::S20507C6 s20507c8f4;
  int s20507c8f5;
  long double s20507c8f6[8];
};
//SIG(-1 S20507C8) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S20507C8()
{
  extern Class_Descriptor cd_S20507C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S20507C8, buf);
    S20507C8 &lv = *(new (buf) S20507C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S20507C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C8)");
    check_base_class_offset(lv, (S20507C6*), 0, "S20507C8");
    check_field_offset(lv, s20507c8f0, ABISELECT(88,64), "S20507C8.s20507c8f0");
    check_field_offset(lv, s20507c8f1, ABISELECT(96,68), "S20507C8.s20507c8f1");
    check_field_offset(lv, s20507c8f2, ABISELECT(112,80), "S20507C8.s20507c8f2");
    check_field_offset(lv, s20507c8f3, ABISELECT(120,84), "S20507C8.s20507c8f3");
    check_field_offset(lv, s20507c8f4, ABISELECT(208,148), "S20507C8.s20507c8f4");
    check_field_offset(lv, s20507c8f5, ABISELECT(296,212), "S20507C8.s20507c8f5");
    check_field_offset(lv, s20507c8f6, ABISELECT(304,216), "S20507C8.s20507c8f6");
    test_class_info(&lv, &cd_S20507C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C8(Test_S20507C8, "S20507C8", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S20507C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20507C8[];
Class_Descriptor cd_S20507C8 = {  "S20507C8", // class name
  bases_S20507C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI8S20507C8),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  S20507C7  : S20507C8 , virtual S20507C6 {
  long double s20507c7f0[2];
  int s20507c7f1[2];
  long double s20507c7f2[3];
  virtual void  v4(); // _ZN8S20507C72v4Ev
  ~S20507C7(); // tgen
  S20507C7(); // tgen
};
//SIG(-1 S20507C7) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S20507C7()
{
  extern Class_Descriptor cd_S20507C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S20507C7, buf);
    S20507C7 *dp, &lv = *(dp=new (buf) S20507C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S20507C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C7)");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(16,4), "S20507C7");
    check_base_class_offset(lv, (S20507C8*), ABISELECT(16,4), "S20507C7");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S20507C7");
    check_field_offset(lv, s20507c7f0, ABISELECT(448,316), "S20507C7.s20507c7f0");
    check_field_offset(lv, s20507c7f1, ABISELECT(480,340), "S20507C7.s20507c7f1");
    check_field_offset(lv, s20507c7f2, ABISELECT(496,348), "S20507C7.s20507c7f2");
    test_class_info(&lv, &cd_S20507C7);
    dp->~S20507C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C7(Test_S20507C7, "S20507C7", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN8S20507C7C1Ev();
extern void _ZN8S20507C7D1Ev();
Name_Map name_map_S20507C7[] = {
  NSPAIR(_ZN8S20507C7C1Ev),
  NSPAIR(_ZN8S20507C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S20507C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20507C8,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20507C7[];
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY vtc_S20507C7[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern VTBL_ENTRY _ZTV8S20507C7[];
static  VTT_ENTRY vtt_S20507C7[] = {
  {&(_ZTV8S20507C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
Class_Descriptor cd_S20507C7 = {  "S20507C7", // class name
  bases_S20507C7, 3,
  &(vtc_S20507C7[0]), // expected_vtbl_contents
  &(vtt_S20507C7[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI8S20507C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20507C7),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20507C7),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  S20507C5  : virtual S20507C6 , virtual S20507C7 , virtual S20507C8 {
  ::S468C20_nt s20507c5f0;
  ~S20507C5(); // tgen
  S20507C5(); // tgen
};
//SIG(-1 S20507C5) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S20507C5()
{
  extern Class_Descriptor cd_S20507C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S20507C5, buf);
    S20507C5 *dp, &lv = *(dp=new (buf) S20507C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S20507C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C5)");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S20507C5");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(16,8), "S20507C5");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(128,76), "S20507C5");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(128,76), "S20507C5");
    check_base_class_offset(lv, (S20507C7*), ABISELECT(112,72), "S20507C5");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(656,456), "S20507C5");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*), ABISELECT(656,456), "S20507C5");
    check_field_offset(lv, s20507c5f0, ABISELECT(8,4), "S20507C5.s20507c5f0");
    test_class_info(&lv, &cd_S20507C5);
    dp->~S20507C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C5(Test_S20507C5, "S20507C5", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S20507C5C1Ev();
extern void _ZN8S20507C5D1Ev();
Name_Map name_map_S20507C5[] = {
  NSPAIR(_ZN8S20507C5C1Ev),
  NSPAIR(_ZN8S20507C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
static Base_Class bases_S20507C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20507C8,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20507C7,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20507C5[];
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY vtc_S20507C5[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern VTBL_ENTRY _ZTV8S20507C5[];
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTT_ENTRY vtt_S20507C5[] = {
  {&(_ZTV8S20507C5[5]),  5,10},
  {&(_ZTV8S20507C5[9]),  9,10},
  {&(_tg__ZTV8S20507C7__8S20507C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
Class_Descriptor cd_S20507C5 = {  "S20507C5", // class name
  bases_S20507C5, 6,
  &(vtc_S20507C5[0]), // expected_vtbl_contents
  &(vtt_S20507C5[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S20507C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20507C5),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20507C5),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  S20507C11  {
  void *s20507c11f0;
  long double s20507c11f1[5];
  void *s20507c11f2;
  long double s20507c11f3;
  void  mf20507c11(); // _ZN9S20507C1110mf20507c11Ev
  virtual  ~S20507C11(); // _ZN9S20507C11D1Ev
  S20507C11(); // tgen
};
//SIG(-1 S20507C11) C1{ vd m Fp FD[5] Fp FD}


void  S20507C11 ::mf20507c11(){}
 S20507C11 ::~S20507C11(){ note_dtor("S20507C11", this);}
S20507C11 ::S20507C11(){ note_ctor("S20507C11", this);} // tgen

static void Test_S20507C11()
{
  extern Class_Descriptor cd_S20507C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,22)];
    init_test(&cd_S20507C11, buf);
    S20507C11 *dp, &lv = *(dp=new (buf) S20507C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S20507C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C11)");
    check_field_offset(lv, s20507c11f0, ABISELECT(8,4), "S20507C11.s20507c11f0");
    check_field_offset(lv, s20507c11f1, ABISELECT(16,8), "S20507C11.s20507c11f1");
    check_field_offset(lv, s20507c11f2, ABISELECT(96,68), "S20507C11.s20507c11f2");
    check_field_offset(lv, s20507c11f3, ABISELECT(112,72), "S20507C11.s20507c11f3");
    test_class_info(&lv, &cd_S20507C11);
    dp->~S20507C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C11(Test_S20507C11, "S20507C11", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN9S20507C11C1Ev();
extern void _ZN9S20507C11D1Ev();
Name_Map name_map_S20507C11[] = {
  NSPAIR(_ZN9S20507C11C1Ev),
  NSPAIR(_ZN9S20507C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20507C11[];
extern void _ZN9S20507C11D1Ev();
extern void _ZN9S20507C11D0Ev();
static  VTBL_ENTRY vtc_S20507C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C11[0]),
  (VTBL_ENTRY)&_ZN9S20507C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C11D0Ev,
};
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
Class_Descriptor cd_S20507C11 = {  "S20507C11", // class name
  0,0,//no base classes
  &(vtc_S20507C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI9S20507C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20507C11),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  S20507C12  : S20507C6 , virtual S20507C8 , virtual S20507C7 {
  long double s20507c12f0;
  ~S20507C12(); // tgen
  S20507C12(); // tgen
};
//SIG(-1 S20507C12) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S20507C12()
{
  extern Class_Descriptor cd_S20507C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S20507C12, buf);
    S20507C12 *dp, &lv = *(dp=new (buf) S20507C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S20507C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C12)");
    /*is_ambiguous_... S20507C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S20507C12");
    /*is_ambiguous_... S20507C12::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(112,80), "S20507C12");
    /*is_ambiguous_... S20507C12::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*), ABISELECT(112,80), "S20507C12");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(560,396), "S20507C12");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(560,396), "S20507C12");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(1088,776), "S20507C12");
    check_base_class_offset(lv, (S20507C7*), ABISELECT(544,392), "S20507C12");
    check_field_offset(lv, s20507c12f0, ABISELECT(96,68), "S20507C12.s20507c12f0");
    test_class_info(&lv, &cd_S20507C12);
    dp->~S20507C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C12(Test_S20507C12, "S20507C12", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN9S20507C12C1Ev();
extern void _ZN9S20507C12D1Ev();
Name_Map name_map_S20507C12[] = {
  NSPAIR(_ZN9S20507C12C1Ev),
  NSPAIR(_ZN9S20507C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
static Base_Class bases_S20507C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20507C8,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S20507C12[];
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY vtc_S20507C12[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern VTBL_ENTRY _ZTV9S20507C12[];
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTT_ENTRY vtt_S20507C12[] = {
  {&(_ZTV9S20507C12[5]),  5,10},
  {&(_ZTV9S20507C12[9]),  9,10},
  {&(_tg__ZTV8S20507C7__9S20507C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
Class_Descriptor cd_S20507C12 = {  "S20507C12", // class name
  bases_S20507C12, 7,
  &(vtc_S20507C12[0]), // expected_vtbl_contents
  &(vtt_S20507C12[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI9S20507C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20507C12),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C12),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  S20507C14  : S20507C6 , virtual S20507C8 , virtual S20507C11 , S20507C7 {
  ::S20507C5 s20507c14f0;
  ::S20507C7 s20507c14f1;
  virtual  ~S20507C14(); // _ZN9S20507C14D2Ev
  S20507C14(); // tgen
};
//SIG(-1 S20507C14) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ vd m Fp FD[5] Fp FD} BC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} vd FC6{ VBC2 VBC5 VBC3 FC7{}} FC5}


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

static void Test_S20507C14()
{
  extern Class_Descriptor cd_S20507C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(190,532)];
    init_test(&cd_S20507C14, buf);
    S20507C14 *dp, &lv = *(dp=new (buf) S20507C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3024,2124), "sizeof(S20507C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C14)");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S20507C14");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(2368,1664), "S20507C14");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*), ABISELECT(2368,1664), "S20507C14");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2800,1976), "S20507C14");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(16,4), "S20507C14");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(16,4), "S20507C14");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(2928,2060), "S20507C14");
    check_base_class_offset(lv, (S20507C7*), 0, "S20507C14");
    check_field_offset(lv, s20507c14f0, ABISELECT(640,448), "S20507C14.s20507c14f0");
    check_field_offset(lv, s20507c14f1, ABISELECT(1728,1216), "S20507C14.s20507c14f1");
    test_class_info(&lv, &cd_S20507C14);
    dp->~S20507C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C14(Test_S20507C14, "S20507C14", ABISELECT(3024,2124));

#else // __cplusplus

extern void _ZN9S20507C14C1Ev();
extern void _ZN9S20507C14D2Ev();
Name_Map name_map_S20507C14[] = {
  NSPAIR(_ZN9S20507C14C1Ev),
  NSPAIR(_ZN9S20507C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
static Base_Class bases_S20507C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C11,    ABISELECT(2800,1976), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    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_S20507C8,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(2928,2060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    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 _ZTI9S20507C14[];
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZThn2800_N9S20507C14D1Ev,_ZThn1976_N9S20507C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
extern void ABISELECT(_ZThn2800_N9S20507C14D0Ev,_ZThn1976_N9S20507C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20507C14[] = {
  ABISELECT(2800,1976),
  ABISELECT(2368,1664),
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
  ABISELECT(-2800,-1976),
  ABISELECT(-2800,-1976),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20507C14[];
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C14[] = {
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTT_ENTRY vtt_S20507C14[] = {
  {&(_ZTV9S20507C14[5]),  5,13},
  {&(_tg__ZTV8S20507C7__9S20507C14[3]),  3,4},
  {&(_ZTV9S20507C14[11]),  11,13},
};
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S20507C14D0Ev,_ZThn1976_N9S20507C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S20507C14D1Ev,_ZThn1976_N9S20507C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C14 = {  "S20507C14", // class name
  bases_S20507C14, 8,
  &(vtc_S20507C14[0]), // expected_vtbl_contents
  &(vtt_S20507C14[0]), // expected_vtt_contents
  ABISELECT(3024,2124), // object size
  NSPAIRA(_ZTI9S20507C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20507C14),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C14),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C13  : virtual S20507C6 , virtual S20507C11 , virtual S20507C5 , virtual S20507C14 {
  ::S20507C8 s20507c13f0;
  ::S20507C6 s20507c13f1;
  short s20507c13f2;
  void *s20507c13f3[2];
  __tsi64 s20507c13f4;
  long double s20507c13f5[2];
  __tsi64 s20507c13f6;
  int s20507c13f7[2];
  char s20507c13f8;
  ~S20507C13(); // tgen
  S20507C13(); // tgen
};
//SIG(-1 S20507C13) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ vd m Fp FD[5] Fp FD} VBC4{ VBC2 VBC5{ BC6{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC6 FC7{}} VBC8{ BC2 VBC6 VBC3 BC5 vd FC4 FC5} FC6 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc}


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

static void Test_S20507C13()
{
  extern Class_Descriptor cd_S20507C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,741)];
    init_test(&cd_S20507C13, buf);
    S20507C13 *dp, &lv = *(dp=new (buf) S20507C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,2960), "sizeof(S20507C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C13)");
    /*is_ambiguous_... S20507C13::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(632,444), "S20507C13");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*), ABISELECT(632,444), "S20507C13");
    /*is_ambiguous_... S20507C13::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(632,444), "S20507C13");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C14*), ABISELECT(632,444), "S20507C13");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(720,508), "S20507C13");
    check_base_class_offset(lv, (S20507C11*)(S20507C14*), ABISELECT(720,508), "S20507C13");
    /*is_ambiguous_... S20507C13::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(880,604), "S20507C13");
    /*is_ambiguous_... S20507C13::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(880,604), "S20507C13");
    check_base_class_offset(lv, (S20507C7*)(S20507C5*), ABISELECT(864,600), "S20507C13");
    /*is_ambiguous_... S20507C13::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(1408,984), "S20507C13");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*), ABISELECT(1408,984), "S20507C13");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C14*), ABISELECT(1408,984), "S20507C13");
    check_base_class_offset(lv, (S20507C5*), ABISELECT(848,592), "S20507C13");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C14*), ABISELECT(2384,1680), "S20507C13");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(1856,1300), "S20507C13");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(1856,1300), "S20507C13");
    check_base_class_offset(lv, (S20507C7*)(S20507C14*), ABISELECT(1840,1296), "S20507C13");
    check_base_class_offset(lv, (S20507C14*), ABISELECT(1840,1296), "S20507C13");
    check_field_offset(lv, s20507c13f0, ABISELECT(16,4), "S20507C13.s20507c13f0");
    check_field_offset(lv, s20507c13f1, ABISELECT(448,316), "S20507C13.s20507c13f1");
    check_field_offset(lv, s20507c13f2, ABISELECT(536,380), "S20507C13.s20507c13f2");
    check_field_offset(lv, s20507c13f3, ABISELECT(544,384), "S20507C13.s20507c13f3");
    check_field_offset(lv, s20507c13f4, ABISELECT(560,392), "S20507C13.s20507c13f4");
    check_field_offset(lv, s20507c13f5, ABISELECT(576,400), "S20507C13.s20507c13f5");
    check_field_offset(lv, s20507c13f6, ABISELECT(608,424), "S20507C13.s20507c13f6");
    check_field_offset(lv, s20507c13f7, ABISELECT(616,432), "S20507C13.s20507c13f7");
    check_field_offset(lv, s20507c13f8, ABISELECT(624,440), "S20507C13.s20507c13f8");
    test_class_info(&lv, &cd_S20507C13);
    dp->~S20507C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C13(Test_S20507C13, "S20507C13", ABISELECT(4208,2960));

#else // __cplusplus

extern void _ZN9S20507C13C1Ev();
extern void _ZN9S20507C13D1Ev();
Name_Map name_map_S20507C13[] = {
  NSPAIR(_ZN9S20507C13C1Ev),
  NSPAIR(_ZN9S20507C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C14;
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
static Base_Class bases_S20507C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(632,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
  1, 1},
  {&cd_S20507C11,    ABISELECT(720,508), //bcp->offset
    10, //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_S20507C6,    ABISELECT(880,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
    3, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(880,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
    4, //immediately_derived
  0, 0},
  {&cd_S20507C7,    ABISELECT(864,600), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C5,    ABISELECT(848,592), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2384,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(1840,1296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20507C14,    ABISELECT(1840,1296), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20507C13[];
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn720_N9S20507C13D1Ev,_ZThn508_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn720_N9S20507C13D0Ev,_ZThn508_N9S20507C13D0Ev)() __attribute__((weak));
extern void _ZN8S20507C72v4Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn1840_N9S20507C13D1Ev,_ZThn1296_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn1840_N9S20507C13D0Ev,_ZThn1296_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20507C13[] = {
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
  ABISELECT(-720,-508),
  ABISELECT(-720,-508),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(-848,-592),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  0,
  ABISELECT(-232,-156),
  ABISELECT(-864,-600),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-1840,-1296),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(-1840,-1296),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20507C13[];
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C13[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5__9S20507C13[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C13[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C13[] = {
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C14__A1__9S20507C13[] = {
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C14__9S20507C13[] = {
  ABISELECT(1120,788),
  ABISELECT(1120,788),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
static  VTT_ENTRY vtt_S20507C13[] = {
  {&(_ZTV9S20507C13[8]),  8,35},
  {&(_ZTV9S20507C13[13]),  13,35},
  {&(_ZTV9S20507C13[20]),  20,35},
  {&(_ZTV9S20507C13[24]),  24,35},
  {&(_ZTV9S20507C13[32]),  32,35},
  {&(_tg__ZTV8S20507C5__9S20507C13[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C5__9S20507C13[4]),  4,5},
  {&(_tg__ZTV8S20507C7__9S20507C13[3]),  3,4},
  {&(_tg__ZTV9S20507C14__9S20507C13[5]),  5,8},
  {&(_tg__ZTV8S20507C79S20507C14__A1__9S20507C13[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C14__9S20507C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N9S20507C13D0Ev,_ZThn1296_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N9S20507C13D1Ev,_ZThn1296_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S20507C13D0Ev,_ZThn508_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S20507C13D1Ev,_ZThn508_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C13 = {  "S20507C13", // class name
  bases_S20507C13, 13,
  &(vtc_S20507C13[0]), // expected_vtbl_contents
  &(vtt_S20507C13[0]), // expected_vtt_contents
  ABISELECT(4208,2960), // object size
  NSPAIRA(_ZTI9S20507C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20507C13),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C13),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C10  : virtual S20507C11 , virtual S20507C8 , virtual S20507C7 , virtual S20507C12 {
  long double s20507c10f0[9];
  int s20507c10f1;
  ::S20507C13 s20507c10f2;
  int s20507c10f3;
  __tsi64 s20507c10f4;
  ::S20507C11 s20507c10f5;
  __tsi64 s20507c10f6;
  virtual  ~S20507C10(); // _ZN9S20507C10D2Ev
  S20507C10(); // tgen
};
//SIG(-1 S20507C10) C1{ VBC2{ vd m Fp FD[5] Fp FD} VBC3{ BC4{ m Fi[10] Fp[6]} Fi FD Fi FC4 FC4 Fi FD[8]} VBC5{ BC3 VBC4 v1 FD[2] Fi[2] FD[3]} VBC6{ BC4 VBC3 VBC5 FD} vd FD[9] Fi FC7{ VBC4 VBC2 VBC8{ VBC4 VBC5 VBC3 FC9{}} VBC10{ BC4 VBC3 VBC2 BC5 vd FC8 FC5} FC3 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL}


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

static void Test_S20507C10()
{
  extern Class_Descriptor cd_S20507C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(367,1027)];
    init_test(&cd_S20507C10, buf);
    S20507C10 *dp, &lv = *(dp=new (buf) S20507C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5856,4104), "sizeof(S20507C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C10)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(4544,3180), "S20507C10");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(4672,3264), "S20507C10");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*), ABISELECT(4672,3264), "S20507C10");
    /*is_ambiguous_... S20507C12::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(4672,3264), "S20507C10");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(5120,3580), "S20507C10");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(5120,3580), "S20507C10");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(5648,3960), "S20507C10");
    check_base_class_offset(lv, (S20507C7*), ABISELECT(5104,3576), "S20507C10");
    check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(5104,3576), "S20507C10");
    /*is_ambiguous_... S20507C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(5752,4028), "S20507C10");
    check_base_class_offset(lv, (S20507C12*), ABISELECT(5744,4024), "S20507C10");
    check_field_offset(lv, s20507c10f0, ABISELECT(16,4), "S20507C10.s20507c10f0");
    check_field_offset(lv, s20507c10f1, ABISELECT(160,112), "S20507C10.s20507c10f1");
    check_field_offset(lv, s20507c10f2, ABISELECT(176,116), "S20507C10.s20507c10f2");
    check_field_offset(lv, s20507c10f3, ABISELECT(4384,3076), "S20507C10.s20507c10f3");
    check_field_offset(lv, s20507c10f4, ABISELECT(4392,3080), "S20507C10.s20507c10f4");
    check_field_offset(lv, s20507c10f5, ABISELECT(4400,3088), "S20507C10.s20507c10f5");
    check_field_offset(lv, s20507c10f6, ABISELECT(4528,3172), "S20507C10.s20507c10f6");
    test_class_info(&lv, &cd_S20507C10);
    dp->~S20507C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C10(Test_S20507C10, "S20507C10", ABISELECT(5856,4104));

#else // __cplusplus

extern void _ZN9S20507C10C1Ev();
extern void _ZN9S20507C10D2Ev();
Name_Map name_map_S20507C10[] = {
  NSPAIR(_ZN9S20507C10C1Ev),
  NSPAIR(_ZN9S20507C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
static Base_Class bases_S20507C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(4544,3180), //bcp->offset
    9, //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_S20507C6,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(5648,3960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(5104,3576), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(5752,4028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(5744,4024), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20507C10[];
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn4544_N9S20507C10D1Ev,_ZThn3180_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn4544_N9S20507C10D0Ev,_ZThn3180_N9S20507C10D0Ev)() __attribute__((weak));
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY vtc_S20507C10[] = {
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
  ABISELECT(-4544,-3180),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
  0,
  ABISELECT(544,384),
  ABISELECT(-5104,-3576),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-5744,-4024),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern VTBL_ENTRY _ZTV9S20507C10[];
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C10[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C10[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__9S20507C10[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTT_ENTRY vtt_S20507C10[] = {
  {&(_ZTV9S20507C10[7]),  7,24},
  {&(_ZTV9S20507C10[12]),  12,24},
  {&(_ZTV9S20507C10[18]),  18,24},
  {&(_ZTV9S20507C10[24]),  24,24},
  {&(_tg__ZTV8S20507C7__9S20507C10[3]),  3,4},
  {&(_tg__ZTV9S20507C12__9S20507C10[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__9S20507C10[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20507C10D0Ev,_ZThn3180_N9S20507C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20507C10D1Ev,_ZThn3180_N9S20507C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C10 = {  "S20507C10", // class name
  bases_S20507C10, 9,
  &(vtc_S20507C10[0]), // expected_vtbl_contents
  &(vtt_S20507C10[0]), // expected_vtt_contents
  ABISELECT(5856,4104), // object size
  NSPAIRA(_ZTI9S20507C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20507C10),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C10),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C4  {
  int s20507c4f0;
  ::S20507C5 s20507c4f1;
  int s20507c4f2;
  void *s20507c4f3;
  ::S20507C10 s20507c4f4;
  int s20507c4f5;
  __tsi64 s20507c4f6;
  long double s20507c4f7;
  virtual void  v1(); // _ZN8S20507C42v1Ev
  virtual void  v2(); // _ZN8S20507C42v2Ev
  virtual void  v3(); // _ZN8S20507C42v3Ev
  ~S20507C4(); // tgen
  S20507C4(); // tgen
};
//SIG(-1 S20507C4) C1{ v1 v2 v3 Fi FC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ BC5{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v4 FD[2] Fi[2] FD[3]} VBC5 FC6{}} Fi Fp FC7{ VBC8{ vd m Fp FD[5] Fp FD} VBC5 VBC4 VBC9{ BC3 VBC5 VBC4 FD} vd FD[9] Fi FC10{ VBC3 VBC8 VBC2 VBC11{ BC3 VBC5 VBC8 BC4 vd FC2 FC4} FC5 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC8 FL} Fi FL FD}


void  S20507C4 ::v1(){vfunc_called(this, "_ZN8S20507C42v1Ev");}
void  S20507C4 ::v2(){vfunc_called(this, "_ZN8S20507C42v2Ev");}
void  S20507C4 ::v3(){vfunc_called(this, "_ZN8S20507C42v3Ev");}
S20507C4 ::~S20507C4(){ note_dtor("S20507C4", this);} // tgen
S20507C4 ::S20507C4(){ note_ctor("S20507C4", this);} // tgen

static void Test_S20507C4()
{
  extern Class_Descriptor cd_S20507C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(439,1229)];
    init_test(&cd_S20507C4, buf);
    S20507C4 *dp, &lv = *(dp=new (buf) S20507C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7008,4912), "sizeof(S20507C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C4)");
    check_field_offset(lv, s20507c4f0, ABISELECT(8,4), "S20507C4.s20507c4f0");
    check_field_offset(lv, s20507c4f1, ABISELECT(16,8), "S20507C4.s20507c4f1");
    check_field_offset(lv, s20507c4f2, ABISELECT(1104,776), "S20507C4.s20507c4f2");
    check_field_offset(lv, s20507c4f3, ABISELECT(1112,780), "S20507C4.s20507c4f3");
    check_field_offset(lv, s20507c4f4, ABISELECT(1120,784), "S20507C4.s20507c4f4");
    check_field_offset(lv, s20507c4f5, ABISELECT(6976,4888), "S20507C4.s20507c4f5");
    check_field_offset(lv, s20507c4f6, ABISELECT(6984,4892), "S20507C4.s20507c4f6");
    check_field_offset(lv, s20507c4f7, ABISELECT(6992,4900), "S20507C4.s20507c4f7");
    test_class_info(&lv, &cd_S20507C4);
    dp->~S20507C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C4(Test_S20507C4, "S20507C4", ABISELECT(7008,4912));

#else // __cplusplus

extern void _ZN8S20507C4C1Ev();
extern void _ZN8S20507C4D1Ev();
Name_Map name_map_S20507C4[] = {
  NSPAIR(_ZN8S20507C4C1Ev),
  NSPAIR(_ZN8S20507C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20507C4[];
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
static  VTBL_ENTRY vtc_S20507C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C4[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S20507C4[];
extern  VTBL_ENTRY _ZTV8S20507C4[];
Class_Descriptor cd_S20507C4 = {  "S20507C4", // class name
  0,0,//no base classes
  &(vtc_S20507C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7008,4912), // object size
  NSPAIRA(_ZTI8S20507C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20507C4),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  S20507C3  : S20507C4 , virtual S20507C11 , virtual S20507C12 , S20507C10 , S20507C5 {
  void *s20507c3f0;
  int s20507c3f1;
  __tsi64 s20507c3f2;
  int s20507c3f3;
  ::S20507C13 s20507c3f4;
  void *s20507c3f5[10];
  int s20507c3f6;
  long double s20507c3f7[4];
  virtual  ~S20507C3(); // _ZN8S20507C3D2Ev
  virtual void  v5(); // _ZN8S20507C32v5Ev
  S20507C3(); // tgen
};
//SIG(-1 S20507C3) C1{ BC2{ v2 v3 v4 Fi FC3{ VBC4{ m Fi[10] Fp[6]} VBC5{ BC6{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v5 FD[2] Fi[2] FD[3]} VBC6 FC7{}} Fi Fp FC8{ VBC9{ vd m Fp FD[5] Fp FD} VBC6 VBC5 VBC10{ BC4 VBC6 VBC5 FD} vd FD[9] Fi FC11{ VBC4 VBC9 VBC3 VBC12{ BC4 VBC6 VBC9 BC5 vd FC3 FC5} FC6 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC9 FL} Fi FL FD} VBC9 VBC10 BC8 BC3 vd v1 Fp Fi FL Fi FC11 Fp[10] Fi FD[4]}


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

static void Test_S20507C3()
{
  extern Class_Descriptor cd_S20507C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1081,3025)];
    init_test(&cd_S20507C3, buf);
    S20507C3 *dp, &lv = *(dp=new (buf) S20507C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17280,12096), "sizeof(S20507C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C3)");
    check_base_class_offset(lv, (S20507C4*), 0, "S20507C3");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(15968,11172), "S20507C3");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*), ABISELECT(15968,11172), "S20507C3");
    /*is_ambiguous_... S20507C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(16104,11260), "S20507C3");
    /*is_ambiguous_... S20507C3::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(16208,11336), "S20507C3");
    /*is_ambiguous_... S20507C12::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(16208,11336), "S20507C3");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*), ABISELECT(16208,11336), "S20507C3");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*), ABISELECT(16208,11336), "S20507C3");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(16656,11652), "S20507C3");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(16656,11652), "S20507C3");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(17184,12032), "S20507C3");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*), ABISELECT(17184,12032), "S20507C3");
    check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(16640,11648), "S20507C3");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*), ABISELECT(16640,11648), "S20507C3");
    check_base_class_offset(lv, (S20507C7*)(S20507C5*), ABISELECT(16640,11648), "S20507C3");
    check_base_class_offset(lv, (S20507C12*), ABISELECT(16096,11256), "S20507C3");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*), ABISELECT(16096,11256), "S20507C3");
    check_base_class_offset(lv, (S20507C10*), ABISELECT(7008,4912), "S20507C3");
    check_base_class_offset(lv, (S20507C5*), ABISELECT(11544,8092), "S20507C3");
    check_field_offset(lv, s20507c3f0, ABISELECT(11560,8100), "S20507C3.s20507c3f0");
    check_field_offset(lv, s20507c3f1, ABISELECT(11568,8104), "S20507C3.s20507c3f1");
    check_field_offset(lv, s20507c3f2, ABISELECT(11576,8108), "S20507C3.s20507c3f2");
    check_field_offset(lv, s20507c3f3, ABISELECT(11584,8116), "S20507C3.s20507c3f3");
    check_field_offset(lv, s20507c3f4, ABISELECT(11600,8120), "S20507C3.s20507c3f4");
    check_field_offset(lv, s20507c3f5, ABISELECT(15808,11080), "S20507C3.s20507c3f5");
    check_field_offset(lv, s20507c3f6, ABISELECT(15888,11120), "S20507C3.s20507c3f6");
    check_field_offset(lv, s20507c3f7, ABISELECT(15904,11124), "S20507C3.s20507c3f7");
    test_class_info(&lv, &cd_S20507C3);
    dp->~S20507C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C3(Test_S20507C3, "S20507C3", ABISELECT(17280,12096));

#else // __cplusplus

extern void _ZN8S20507C3C1Ev();
extern void _ZN8S20507C3D2Ev();
Name_Map name_map_S20507C3[] = {
  NSPAIR(_ZN8S20507C3C1Ev),
  NSPAIR(_ZN8S20507C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C4;
extern VTBL_ENTRY _ZTI8S20507C4[];
extern  VTBL_ENTRY _ZTV8S20507C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
static Base_Class bases_S20507C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C11,    ABISELECT(15968,11172), //bcp->offset
    27, //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_S20507C6,    ABISELECT(16104,11260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(16208,11336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(16208,11336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(16656,11652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(16656,11652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(17184,12032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20507C7,    ABISELECT(16640,11648), //bcp->offset
    37, //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
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20507C12,    ABISELECT(16096,11256), //bcp->offset
    32, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C10,    ABISELECT(7008,4912), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C5,    ABISELECT(11544,8092), //bcp->offset
    22, //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20507C3[];
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
extern void _ZN8S20507C3D1Ev();
extern void _ZN8S20507C3D0Ev();
extern void _ZN8S20507C32v5Ev();
extern void ABISELECT(_ZThn7008_N8S20507C3D1Ev,_ZThn4912_N8S20507C3D1Ev)();
extern void ABISELECT(_ZThn7008_N8S20507C3D0Ev,_ZThn4912_N8S20507C3D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev)();
extern void ABISELECT(_ZThn15968_N8S20507C3D1Ev,_ZThn11172_N8S20507C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev)();
extern void ABISELECT(_ZThn15968_N8S20507C3D0Ev,_ZThn11172_N8S20507C3D0Ev)() __attribute__((weak));
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY vtc_S20507C3[] = {
  ABISELECT(17184,12032),
  ABISELECT(16640,11648),
  ABISELECT(16208,11336),
  ABISELECT(16096,11256),
  ABISELECT(15968,11172),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20507C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20507C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20507C32v5Ev,
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  ABISELECT(-7008,-4912),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S20507C3D1Ev,_ZThn4912_N8S20507C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S20507C3D0Ev,_ZThn4912_N8S20507C3D0Ev),
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  ABISELECT(-11544,-8092),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  ABISELECT(-15968,-11172),
  ABISELECT(-15968,-11172),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev),
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-16096,-11256),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-16640,-11648),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern VTBL_ENTRY _ZTV8S20507C3[];
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C10__8S20507C3[] = {
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn8960_N9S20507C10D1Ev,_ZThn6260_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn8960_N9S20507C10D0Ev,_ZThn6260_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C10__8S20507C3[] = {
  ABISELECT(-8960,-6260),
  ABISELECT(-8960,-6260),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C10__8S20507C3[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-9632,-6736),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C10__8S20507C3[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-9088,-6344),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__8S20507C3[] = {
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5__8S20507C3[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-5096,-3556),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__8S20507C3[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__8S20507C3[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C3[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTT_ENTRY vtt_S20507C3[] = {
  {&(_ZTV8S20507C3[7]),  7,42},
  {&(_tg__ZTV9S20507C10__8S20507C3[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C10__8S20507C3[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C10__8S20507C3[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C10__8S20507C3[5]),  5,5},
  {&(_tg__ZTV8S20507C5__8S20507C3[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C5__8S20507C3[4]),  4,5},
  {&(_ZTV8S20507C3[30]),  30,42},
  {&(_ZTV8S20507C3[37]),  37,42},
  {&(_ZTV8S20507C3[41]),  41,42},
  {&(_ZTV8S20507C3[20]),  20,42},
  {&(_ZTV8S20507C3[27]),  27,42},
  {&(_tg__ZTV9S20507C12__8S20507C3[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__8S20507C3[4]),  4,5},
  {&(_tg__ZTV8S20507C7__8S20507C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20507C3[];
extern  VTBL_ENTRY _ZTV8S20507C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C3[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8960_N9S20507C10D0Ev,_ZThn6260_N9S20507C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8960_N9S20507C10D1Ev,_ZThn6260_N9S20507C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15968_N8S20507C3D0Ev,_ZThn11172_N8S20507C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15968_N8S20507C3D1Ev,_ZThn11172_N8S20507C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C3 = {  "S20507C3", // class name
  bases_S20507C3, 12,
  &(vtc_S20507C3[0]), // expected_vtbl_contents
  &(vtt_S20507C3[0]), // expected_vtt_contents
  ABISELECT(17280,12096), // object size
  NSPAIRA(_ZTI8S20507C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20507C3),42, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20507C3),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C17  : virtual S20507C6 , virtual S20507C8 , virtual S20507C5 , virtual S20507C14 , S20507C13 {
  ::S20507C11 s20507c17f0;
  long double s20507c17f1;
  virtual  ~S20507C17(); // _ZN9S20507C17D2Ev
  S20507C17(); // tgen
};
//SIG(-1 S20507C17) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ VBC2 VBC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} VBC3 FC6{}} VBC7{ BC2 VBC3 VBC8{ vd m Fp FD[5] Fp FD} BC5 vd FC4 FC5} BC9{ VBC2 VBC8 VBC4 VBC7 FC3 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC8 FD}


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

static void Test_S20507C17()
{
  extern Class_Descriptor cd_S20507C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(274,765)];
    init_test(&cd_S20507C17, buf);
    S20507C17 *dp, &lv = *(dp=new (buf) S20507C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4368,3056), "sizeof(S20507C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C17)");
    /*is_ambiguous_... S20507C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(784,540), "S20507C17");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*), ABISELECT(784,540), "S20507C17");
    /*is_ambiguous_... S20507C17::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(784,540), "S20507C17");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C14*), ABISELECT(784,540), "S20507C17");
    /*is_ambiguous_... S20507C13::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*), ABISELECT(784,540), "S20507C17");
    /*is_ambiguous_... S20507C17::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(880,604), "S20507C17");
    /*is_ambiguous_... S20507C17::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*), ABISELECT(880,604), "S20507C17");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*), ABISELECT(880,604), "S20507C17");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C14*), ABISELECT(880,604), "S20507C17");
    /*is_ambiguous_... S20507C17::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(1344,928), "S20507C17");
    /*is_ambiguous_... S20507C17::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(1344,928), "S20507C17");
    check_base_class_offset(lv, (S20507C7*)(S20507C5*), ABISELECT(1328,924), "S20507C17");
    check_base_class_offset(lv, (S20507C5*), ABISELECT(1312,916), "S20507C17");
    check_base_class_offset(lv, (S20507C5*)(S20507C13*), ABISELECT(1312,916), "S20507C17");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C14*), ABISELECT(2416,1692), "S20507C17");
    check_base_class_offset(lv, (S20507C11*)(S20507C14*), ABISELECT(4240,2972), "S20507C17");
    check_base_class_offset(lv, (S20507C11*)(S20507C13*), ABISELECT(4240,2972), "S20507C17");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(1888,1312), "S20507C17");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(1888,1312), "S20507C17");
    check_base_class_offset(lv, (S20507C7*)(S20507C14*), ABISELECT(1872,1308), "S20507C17");
    check_base_class_offset(lv, (S20507C14*), ABISELECT(1872,1308), "S20507C17");
    check_base_class_offset(lv, (S20507C14*)(S20507C13*), ABISELECT(1872,1308), "S20507C17");
    check_base_class_offset(lv, (S20507C13*), 0, "S20507C17");
    check_field_offset(lv, s20507c17f0, ABISELECT(640,444), "S20507C17.s20507c17f0");
    check_field_offset(lv, s20507c17f1, ABISELECT(768,528), "S20507C17.s20507c17f1");
    test_class_info(&lv, &cd_S20507C17);
    dp->~S20507C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C17(Test_S20507C17, "S20507C17", ABISELECT(4368,3056));

#else // __cplusplus

extern void _ZN9S20507C17C1Ev();
extern void _ZN9S20507C17D2Ev();
Name_Map name_map_S20507C17[] = {
  NSPAIR(_ZN9S20507C17C1Ev),
  NSPAIR(_ZN9S20507C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C14;
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
static Base_Class bases_S20507C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(784,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(880,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
    2, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(880,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(1328,924), //bcp->offset
    15, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20507C5,    ABISELECT(1312,916), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2416,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4240,2972), //bcp->offset
    30, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(1872,1308), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20507C14,    ABISELECT(1872,1308), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C13,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20507C17[];
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
extern void _ZN8S20507C72v4Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZThn1872_N9S20507C17D1Ev,_ZThn1308_N9S20507C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
extern void ABISELECT(_ZThn1872_N9S20507C17D0Ev,_ZThn1308_N9S20507C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZThn4240_N9S20507C17D1Ev,_ZThn2972_N9S20507C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
extern void ABISELECT(_ZThn4240_N9S20507C17D0Ev,_ZThn2972_N9S20507C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20507C17[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20507C17[];
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C13__9S20507C17[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn4240_N9S20507C13D1Ev,_ZThn2972_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn4240_N9S20507C13D0Ev,_ZThn2972_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C13__9S20507C17[] = {
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C13__9S20507C17[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C13__9S20507C17[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn1872_N9S20507C13D1Ev,_ZThn1308_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn1872_N9S20507C13D0Ev,_ZThn1308_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C13__9S20507C17[] = {
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C17[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5__9S20507C17[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C17[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C17[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C14__A1__9S20507C17[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZThn2368_N9S20507C14D1Ev,_ZThn1664_N9S20507C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
extern void ABISELECT(_ZThn2368_N9S20507C14D0Ev,_ZThn1664_N9S20507C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C14__9S20507C17[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
static  VTT_ENTRY vtt_S20507C17[] = {
  {&(_ZTV9S20507C17[8]),  8,35},
  {&(_tg__ZTV9S20507C13__9S20507C17[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C13__9S20507C17[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C13__9S20507C17[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C13__9S20507C17[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C13__9S20507C17[7]),  7,10},
  {&(_ZTV9S20507C17[15]),  15,35},
  {&(_ZTV9S20507C17[19]),  19,35},
  {&(_ZTV9S20507C17[27]),  27,35},
  {&(_ZTV9S20507C17[33]),  33,35},
  {&(_tg__ZTV8S20507C5__9S20507C17[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C5__9S20507C17[4]),  4,5},
  {&(_tg__ZTV8S20507C7__9S20507C17[3]),  3,4},
  {&(_tg__ZTV9S20507C14__9S20507C17[5]),  5,8},
  {&(_tg__ZTV8S20507C79S20507C14__A1__9S20507C17[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C14__9S20507C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S20507C14D0Ev,_ZThn1664_N9S20507C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S20507C14D1Ev,_ZThn1664_N9S20507C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S20507C13D0Ev,_ZThn1308_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S20507C13D1Ev,_ZThn1308_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S20507C13D0Ev,_ZThn2972_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S20507C13D1Ev,_ZThn2972_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S20507C17D0Ev,_ZThn2972_N9S20507C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S20507C17D1Ev,_ZThn2972_N9S20507C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S20507C17D0Ev,_ZThn1308_N9S20507C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S20507C17D1Ev,_ZThn1308_N9S20507C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C17 = {  "S20507C17", // class name
  bases_S20507C17, 14,
  &(vtc_S20507C17[0]), // expected_vtbl_contents
  &(vtt_S20507C17[0]), // expected_vtt_contents
  ABISELECT(4368,3056), // object size
  NSPAIRA(_ZTI9S20507C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20507C17),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C17),16, //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  S20507C16  : virtual S20507C6 , virtual S20507C7 , S20507C12 , S20507C10 , virtual S20507C14 {
  int s20507c16f0;
  void *s20507c16f1;
  int s20507c16f2:9;
  char s20507c16f3;
  long double s20507c16f4;
  ::S20507C7 s20507c16f5;
  ::S20507C17 s20507c16f6;
  char s20507c16f7;
  short s20507c16f8[7];
  ::S468C20_nt s20507c16f9;
  int s20507c16f10;
  char s20507c16f11;
  long s20507c16f12;
  virtual  ~S20507C16(); // _ZN9S20507C16D2Ev
  S20507C16(); // tgen
};
//SIG(-1 S20507C16) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} BC5{ BC2 VBC4 VBC3 FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC3 VBC5 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC3 VBC4 FC10{}} VBC11{ BC2 VBC4 VBC7 BC3 vd FC9 FC3} FC4 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} VBC11 vd Fi Fp Fi:9 Fc FD FC3 FC12{ VBC2 VBC4 VBC9 VBC11 BC8 vd FC7 FD} Fc Fs[7] FC10 Fi Fc Fl}


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

static void Test_S20507C16()
{
  extern Class_Descriptor cd_S20507C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(839,2353)];
    init_test(&cd_S20507C16, buf);
    S20507C16 *dp, &lv = *(dp=new (buf) S20507C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13408,9408), "sizeof(S20507C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C16)");
    /*is_ambiguous_... S20507C16::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(9736,6820), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(9736,6820), "S20507C16");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C14*), ABISELECT(9736,6820), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(9840,6888), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(9840,6888), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C7*), ABISELECT(9824,6884), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(9824,6884), "S20507C16");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*), ABISELECT(9824,6884), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(9824,6884), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(8,4), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(10368,7268), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(10368,7268), "S20507C16");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*), ABISELECT(10368,7268), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(10368,7268), "S20507C16");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C14*), ABISELECT(10368,7268), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C12*), 0, "S20507C16");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*), ABISELECT(10800,7580), "S20507C16");
    check_base_class_offset(lv, (S20507C11*)(S20507C14*), ABISELECT(10800,7580), "S20507C16");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(10936,7668), "S20507C16");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*), ABISELECT(10928,7664), "S20507C16");
    check_base_class_offset(lv, (S20507C10*), ABISELECT(112,80), "S20507C16");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C14*), ABISELECT(11584,8128), "S20507C16");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(11056,7748), "S20507C16");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(11056,7748), "S20507C16");
    check_base_class_offset(lv, (S20507C7*)(S20507C14*), ABISELECT(11040,7744), "S20507C16");
    check_base_class_offset(lv, (S20507C14*), ABISELECT(11040,7744), "S20507C16");
    check_field_offset(lv, s20507c16f0, ABISELECT(4648,3260), "S20507C16.s20507c16f0");
    check_field_offset(lv, s20507c16f1, ABISELECT(4656,3264), "S20507C16.s20507c16f1");
    set_bf_and_test(lv, s20507c16f2, ABISELECT(4664,3268), 0, 9, 1, "S20507C16");
    set_bf_and_test(lv, s20507c16f2, ABISELECT(4664,3268), 0, 9, hide_sll(1LL<<8), "S20507C16");
    check_field_offset(lv, s20507c16f3, ABISELECT(4666,3270), "S20507C16.s20507c16f3");
    check_field_offset(lv, s20507c16f4, ABISELECT(4672,3272), "S20507C16.s20507c16f4");
    check_field_offset(lv, s20507c16f5, ABISELECT(4688,3284), "S20507C16.s20507c16f5");
    check_field_offset(lv, s20507c16f6, ABISELECT(5328,3732), "S20507C16.s20507c16f6");
    check_field_offset(lv, s20507c16f7, ABISELECT(9696,6788), "S20507C16.s20507c16f7");
    check_field_offset(lv, s20507c16f8, ABISELECT(9698,6790), "S20507C16.s20507c16f8");
    check_field_offset(lv, s20507c16f9, ABISELECT(9712,6804), "S20507C16.s20507c16f9");
    check_field_offset(lv, s20507c16f10, ABISELECT(9716,6808), "S20507C16.s20507c16f10");
    check_field_offset(lv, s20507c16f11, ABISELECT(9720,6812), "S20507C16.s20507c16f11");
    check_field_offset(lv, s20507c16f12, ABISELECT(9728,6816), "S20507C16.s20507c16f12");
    test_class_info(&lv, &cd_S20507C16);
    dp->~S20507C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C16(Test_S20507C16, "S20507C16", ABISELECT(13408,9408));

#else // __cplusplus

extern void _ZN9S20507C16C1Ev();
extern void _ZN9S20507C16D2Ev();
Name_Map name_map_S20507C16[] = {
  NSPAIR(_ZN9S20507C16C1Ev),
  NSPAIR(_ZN9S20507C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C14;
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
static Base_Class bases_S20507C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(9736,6820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(9840,6888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(9840,6888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(9824,6884), //bcp->offset
    19, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(10368,7268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(10368,7268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    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_S20507C11,    ABISELECT(10800,7580), //bcp->offset
    24, //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
    11, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(10936,7668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(10928,7664), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20507C10,    ABISELECT(112,80), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(11584,8128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(11056,7748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(11056,7748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(11040,7744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20507C14,    ABISELECT(11040,7744), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //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 _ZTI9S20507C16[];
extern void _ZN9S20507C16D1Ev();
extern void _ZN9S20507C16D0Ev();
extern void ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev)();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn10800_N9S20507C16D1Ev,_ZThn7580_N9S20507C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev)();
extern void ABISELECT(_ZThn10800_N9S20507C16D0Ev,_ZThn7580_N9S20507C16D0Ev)() __attribute__((weak));
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn11040_N9S20507C16D1Ev,_ZThn7744_N9S20507C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev)();
extern void ABISELECT(_ZThn11040_N9S20507C16D0Ev,_ZThn7744_N9S20507C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20507C16[] = {
  ABISELECT(11040,7744),
  ABISELECT(10928,7664),
  ABISELECT(10800,7580),
  ABISELECT(9736,6820),
  ABISELECT(9824,6884),
  ABISELECT(10368,7268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN9S20507C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C16D0Ev,
  ABISELECT(10816,7584),
  ABISELECT(9624,6740),
  ABISELECT(9712,6804),
  ABISELECT(10256,7188),
  ABISELECT(10688,7500),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev),
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9824,-6884),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-10800,-7580),
  ABISELECT(-10800,-7580),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev),
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  ABISELECT(-10928,-7664),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  ABISELECT(-11040,-7744),
  0,
  ABISELECT(-240,-164),
  ABISELECT(-672,-476),
  ABISELECT(-1304,-924),
  ABISELECT(-11040,-7744),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S20507C16[];
static  VTBL_ENTRY _tg__ZTV9S20507C12__A__9S20507C16[] = {
  ABISELECT(9736,6820),
  ABISELECT(9824,6884),
  ABISELECT(10368,7268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__A__9S20507C16[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9824,-6884),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C16[] = {
  ABISELECT(10816,7584),
  ABISELECT(9624,6740),
  ABISELECT(9712,6804),
  ABISELECT(10256,7188),
  ABISELECT(10688,7500),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn10688_N9S20507C10D1Ev,_ZThn7500_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn10688_N9S20507C10D0Ev,_ZThn7500_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C10__9S20507C16[] = {
  ABISELECT(-10688,-7500),
  ABISELECT(-10688,-7500),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C10__9S20507C16[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9712,-6804),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C10__9S20507C16[] = {
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  ABISELECT(-10816,-7584),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C16[] = {
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C16[] = {
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__A1__9S20507C16[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(1104,780),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C16[] = {
  ABISELECT(-240,-164),
  ABISELECT(-672,-476),
  ABISELECT(-1304,-924),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C14__A1__9S20507C16[] = {
  ABISELECT(-1304,-924),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C14__9S20507C16[] = {
  ABISELECT(240,164),
  ABISELECT(240,164),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
static  VTT_ENTRY vtt_S20507C16[] = {
  {&(_ZTV9S20507C16[8]),  8,44},
  {&(_tg__ZTV9S20507C12__A__9S20507C16[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__A__9S20507C16[4]),  4,5},
  {&(_tg__ZTV9S20507C10__9S20507C16[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C10__9S20507C16[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C10__9S20507C16[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C10__9S20507C16[5]),  5,5},
  {&(_ZTV9S20507C16[23]),  23,44},
  {&(_ZTV9S20507C16[17]),  17,44},
  {&(_ZTV9S20507C16[27]),  27,44},
  {&(_ZTV9S20507C16[34]),  34,44},
  {&(_ZTV9S20507C16[41]),  41,44},
  {&(_tg__ZTV8S20507C7__9S20507C16[3]),  3,4},
  {&(_tg__ZTV9S20507C12__A1__9S20507C16[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__A1__9S20507C16[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C16[5]),  5,8},
  {&(_tg__ZTV8S20507C79S20507C14__A1__9S20507C16[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C14__9S20507C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20507C16[];
extern  VTBL_ENTRY _ZTV9S20507C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C16[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10688_N9S20507C10D0Ev,_ZThn7500_N9S20507C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10688_N9S20507C10D1Ev,_ZThn7500_N9S20507C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11040_N9S20507C16D0Ev,_ZThn7744_N9S20507C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11040_N9S20507C16D1Ev,_ZThn7744_N9S20507C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S20507C16D0Ev,_ZThn7580_N9S20507C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S20507C16D1Ev,_ZThn7580_N9S20507C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C16 = {  "S20507C16", // class name
  bases_S20507C16, 17,
  &(vtc_S20507C16[0]), // expected_vtbl_contents
  &(vtt_S20507C16[0]), // expected_vtt_contents
  ABISELECT(13408,9408), // object size
  NSPAIRA(_ZTI9S20507C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20507C16),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C16),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C15  : virtual S20507C11 , S20507C13 , S20507C7 , virtual S20507C16 , virtual S20507C17 {
  ::S20507C7 s20507c15f0;
  char s20507c15f1;
  long double s20507c15f2;
  int s20507c15f3;
  long double s20507c15f4;
  ::S20507C5 s20507c15f5;
  virtual  ~S20507C15(); // _ZN9S20507C15D2Ev
  virtual void  v6(); // _ZN9S20507C152v6Ev
  virtual void  v7(); // _ZN9S20507C152v7Ev
  virtual void  v8(); // _ZN9S20507C152v8Ev
  S20507C15(); // tgen
};
//SIG(-1 S20507C15) C1{ VBC2{ vd m Fp FD[5] Fp FD} BC3{ VBC4{ m Fi[10] Fp[6]} VBC2 VBC5{ VBC4 VBC6{ BC7{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v4 FD[2] Fi[2] FD[3]} VBC7 FC8{}} VBC9{ BC4 VBC7 VBC2 BC6 vd FC5 FC6} FC7 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} BC6 VBC10{ VBC4 VBC6 BC11{ BC4 VBC7 VBC6 FD} BC12{ VBC2 VBC7 VBC6 VBC11 vd FD[9] Fi FC3 Fi FL FC2 FL} VBC9 vd Fi Fp Fi:9 Fc FD FC6 FC13{ VBC4 VBC7 VBC5 VBC9 BC3 vd FC2 FD} Fc Fs[7] FC8 Fi Fc Fl} VBC13 vd v1 v2 v3 FC6 Fc FD Fi FD FC5}


 S20507C15 ::~S20507C15(){ note_dtor("S20507C15", this);}
void  S20507C15 ::v6(){vfunc_called(this, "_ZN9S20507C152v6Ev");}
void  S20507C15 ::v7(){vfunc_called(this, "_ZN9S20507C152v7Ev");}
void  S20507C15 ::v8(){vfunc_called(this, "_ZN9S20507C152v8Ev");}
S20507C15 ::S20507C15(){ note_ctor("S20507C15", this);} // tgen

static void Test_S20507C15()
{
  extern Class_Descriptor cd_S20507C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1076,3009)];
    init_test(&cd_S20507C15, buf);
    S20507C15 *dp, &lv = *(dp=new (buf) S20507C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17200,12032), "sizeof(S20507C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C15)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2976,2076), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*), ABISELECT(2976,2076), "S20507C15");
    check_base_class_offset(lv, (S20507C11*)(S20507C14*), ABISELECT(2976,2076), "S20507C15");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C16*), ABISELECT(2976,2076), "S20507C15");
    check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C17*), ABISELECT(2976,2076), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*), ABISELECT(3104,2160), "S20507C15");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*), ABISELECT(3104,2160), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(3104,2160), "S20507C15");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C14*), ABISELECT(3104,2160), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(3104,2160), "S20507C15");
    /*is_ambiguous_... S20507C16::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C16*), ABISELECT(3104,2160), "S20507C15");
    /*is_ambiguous_... S20507C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C17*), ABISELECT(3104,2160), "S20507C15");
    /*is_ambiguous_... S20507C13::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C17*), ABISELECT(3104,2160), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(3232,2236), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(3232,2236), "S20507C15");
    check_base_class_offset(lv, (S20507C7*)(S20507C5*), ABISELECT(3216,2232), "S20507C15");
    /*is_ambiguous_... S20507C16::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C16*), ABISELECT(3216,2232), "S20507C15");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*)(S20507C16*), ABISELECT(3216,2232), "S20507C15");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C16*), ABISELECT(3216,2232), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(3216,2232), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(3760,2616), "S20507C15");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*), ABISELECT(3760,2616), "S20507C15");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C14*), ABISELECT(3760,2616), "S20507C15");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*)(S20507C16*), ABISELECT(3760,2616), "S20507C15");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C16*), ABISELECT(3760,2616), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(3760,2616), "S20507C15");
    /*is_ambiguous_... S20507C17::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C17*), ABISELECT(3760,2616), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*), ABISELECT(3192,2224), "S20507C15");
    check_base_class_offset(lv, (S20507C5*)(S20507C17*), ABISELECT(3192,2224), "S20507C15");
    check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C17*), ABISELECT(3192,2224), "S20507C15");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C14*), ABISELECT(4736,3312), "S20507C15");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(4208,2932), "S20507C15");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(4208,2932), "S20507C15");
    check_base_class_offset(lv, (S20507C7*)(S20507C14*), ABISELECT(4192,2928), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*), ABISELECT(4192,2928), "S20507C15");
    check_base_class_offset(lv, (S20507C14*)(S20507C16*), ABISELECT(4192,2928), "S20507C15");
    check_base_class_offset(lv, (S20507C14*)(S20507C17*), ABISELECT(4192,2928), "S20507C15");
    check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C17*), ABISELECT(4192,2928), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C13*), 0, "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(656,448), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(656,448), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C7*), ABISELECT(640,444), "S20507C15");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*)(S20507C16*), ABISELECT(6568,4596), "S20507C15");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C16*), ABISELECT(6560,4592), "S20507C15");
    /*is_ambiguous_... S20507C15::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(16312,11416), "S20507C15");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C16*), ABISELECT(16304,11412), "S20507C15");
    check_base_class_offset(lv, (S20507C10*)(S20507C16*), ABISELECT(6672,4672), "S20507C15");
    check_base_class_offset(lv, (S20507C16*), ABISELECT(6560,4592), "S20507C15");
    check_base_class_offset(lv, (S20507C13*)(S20507C17*), ABISELECT(16416,11492), "S20507C15");
    check_base_class_offset(lv, (S20507C17*), ABISELECT(16416,11492), "S20507C15");
    check_field_offset(lv, s20507c15f0, ABISELECT(1184,828), "S20507C15.s20507c15f0");
    check_field_offset(lv, s20507c15f1, ABISELECT(1824,1276), "S20507C15.s20507c15f1");
    check_field_offset(lv, s20507c15f2, ABISELECT(1840,1280), "S20507C15.s20507c15f2");
    check_field_offset(lv, s20507c15f3, ABISELECT(1856,1292), "S20507C15.s20507c15f3");
    check_field_offset(lv, s20507c15f4, ABISELECT(1872,1296), "S20507C15.s20507c15f4");
    check_field_offset(lv, s20507c15f5, ABISELECT(1888,1308), "S20507C15.s20507c15f5");
    test_class_info(&lv, &cd_S20507C15);
    dp->~S20507C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C15(Test_S20507C15, "S20507C15", ABISELECT(17200,12032));

#else // __cplusplus

extern void _ZN9S20507C15C1Ev();
extern void _ZN9S20507C15D2Ev();
Name_Map name_map_S20507C15[] = {
  NSPAIR(_ZN9S20507C15C1Ev),
  NSPAIR(_ZN9S20507C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C14;
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C16;
extern VTBL_ENTRY _ZTI9S20507C16[];
extern  VTBL_ENTRY _ZTV9S20507C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C16[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C17;
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
static Base_Class bases_S20507C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(2976,2076), //bcp->offset
    20, //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_S20507C6,    ABISELECT(3104,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
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(3232,2236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(3232,2236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(3216,2232), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(3760,2616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(3760,2616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C5,    ABISELECT(3192,2224), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(4736,3312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(4208,2932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(4208,2932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(4192,2928), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20507C14,    ABISELECT(4192,2928), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C13,    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},
  {&cd_S20507C6,    ABISELECT(656,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
    15, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(656,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
    16, //immediately_derived
  0, 0},
  {&cd_S20507C7,    ABISELECT(640,444), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(6568,4596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(6560,4592), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(16312,11416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(16304,11412), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20507C10,    ABISELECT(6672,4672), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20507C16,    ABISELECT(6560,4592), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C13,    ABISELECT(16416,11492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20507C17,    ABISELECT(16416,11492), //bcp->offset
    70, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20507C15[];
extern void _ZN9S20507C15D1Ev();
extern void _ZN9S20507C15D0Ev();
extern void _ZN9S20507C152v6Ev();
extern void _ZN9S20507C152v7Ev();
extern void _ZN9S20507C152v8Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N9S20507C15D1Ev,_ZTv0_n12_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn2976_N9S20507C15D1Ev,_ZThn2076_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C15D0Ev,_ZTv0_n12_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn2976_N9S20507C15D0Ev,_ZThn2076_N9S20507C15D0Ev)() __attribute__((weak));
extern void _ZN8S20507C72v4Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn4192_N9S20507C15D1Ev,_ZThn2928_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn4192_N9S20507C15D0Ev,_ZThn2928_N9S20507C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn6560_N9S20507C15D1Ev,_ZThn4592_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn6560_N9S20507C15D0Ev,_ZThn4592_N9S20507C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn112_n72_N9S20507C15D1Ev,_ZTvn80_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N9S20507C15D0Ev,_ZTvn80_n36_N9S20507C15D0Ev)();
extern void ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn16416_N9S20507C15D1Ev,_ZThn11492_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn16416_N9S20507C15D0Ev,_ZThn11492_N9S20507C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20507C15[] = {
  ABISELECT(16416,11492),
  ABISELECT(16304,11412),
  ABISELECT(6560,4592),
  ABISELECT(4192,2928),
  ABISELECT(3760,2616),
  ABISELECT(3216,2232),
  ABISELECT(3192,2224),
  ABISELECT(2976,2076),
  ABISELECT(3104,2160),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN9S20507C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v6Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v7Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v8Ev,
  ABISELECT(2464,1716),
  ABISELECT(-640,-444),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-2976,-2076),
  ABISELECT(-2976,-2076),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C15D1Ev,_ZTv0_n12_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C15D0Ev,_ZTv0_n12_N9S20507C15D0Ev),
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  ABISELECT(-3192,-2224),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  0,
  ABISELECT(-112,-72),
  ABISELECT(-3216,-2232),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-4192,-2928),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(-4192,-2928),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev),
  ABISELECT(-6560,-4592),
  ABISELECT(-2368,-1664),
  ABISELECT(9744,6820),
  ABISELECT(-3584,-2516),
  ABISELECT(-3456,-2432),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  ABISELECT(-6560,-4592),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev),
  ABISELECT(9632,6740),
  ABISELECT(-3568,-2512),
  ABISELECT(-3456,-2440),
  ABISELECT(-2912,-2056),
  ABISELECT(-3696,-2596),
  ABISELECT(-6672,-4672),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N9S20507C15D1Ev,_ZTvn80_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N9S20507C15D0Ev,_ZTvn80_n36_N9S20507C15D0Ev),
  ABISELECT(-13200,-9252),
  ABISELECT(-13088,-9180),
  ABISELECT(-12544,-8796),
  ABISELECT(-16304,-11412),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  ABISELECT(-16416,-11492),
  ABISELECT(-12224,-8564),
  ABISELECT(-12656,-8876),
  ABISELECT(-13200,-9260),
  ABISELECT(-13224,-9268),
  ABISELECT(-13440,-9416),
  ABISELECT(-13312,-9332),
  ABISELECT(-16416,-11492),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20507C15[];
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C13__9S20507C15[] = {
  ABISELECT(4192,2928),
  ABISELECT(3760,2616),
  ABISELECT(3216,2232),
  ABISELECT(3192,2224),
  ABISELECT(2976,2076),
  ABISELECT(3104,2160),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn2976_N9S20507C13D1Ev,_ZThn2076_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn2976_N9S20507C13D0Ev,_ZThn2076_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C13__9S20507C15[] = {
  ABISELECT(-2976,-2076),
  ABISELECT(-2976,-2076),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C13__9S20507C15[] = {
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  ABISELECT(-3192,-2224),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C13__9S20507C15[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(-3216,-2232),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn4192_N9S20507C13D1Ev,_ZThn2928_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn4192_N9S20507C13D0Ev,_ZThn2928_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C13__9S20507C15[] = {
  ABISELECT(-4192,-2928),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(-4192,-2928),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__A__9S20507C15[] = {
  ABISELECT(2464,1716),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C15[] = {
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5__9S20507C15[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C15[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C15[] = {
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C14__A1__9S20507C15[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C14__9S20507C15[] = {
  ABISELECT(1216,852),
  ABISELECT(1216,852),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
extern void _ZN9S20507C16D1Ev();
extern void _ZN9S20507C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C16__9S20507C15[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(9744,6820),
  ABISELECT(-3584,-2516),
  ABISELECT(-3456,-2432),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN9S20507C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C129S20507C16__9S20507C15[] = {
  ABISELECT(-3456,-2432),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C129S20507C16__9S20507C15[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(3344,2360),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__9S20507C15[] = {
  ABISELECT(9632,6740),
  ABISELECT(-3568,-2512),
  ABISELECT(-3456,-2440),
  ABISELECT(-2912,-2056),
  ABISELECT(-3696,-2596),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C16__9S20507C15[] = {
  ABISELECT(3696,2596),
  ABISELECT(3696,2596),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C16__9S20507C15[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(3456,2440),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C16__9S20507C15[] = {
  ABISELECT(-13200,-9252),
  ABISELECT(-13088,-9180),
  ABISELECT(-12544,-8796),
  ABISELECT(-9632,-6740),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C16__9S20507C15[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(3344,2360),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C16__9S20507C15[] = {
  ABISELECT(9632,6740),
  ABISELECT(-3568,-2512),
  ABISELECT(-3456,-2440),
  ABISELECT(-2912,-2056),
  ABISELECT(-3696,-2596),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C16__9S20507C15[] = {
  ABISELECT(3584,2516),
  ABISELECT(3584,2516),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C16__9S20507C15[] = {
  ABISELECT(-13200,-9252),
  ABISELECT(-13088,-9180),
  ABISELECT(-12544,-8796),
  ABISELECT(-9744,-6820),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C16__9S20507C15[] = {
  ABISELECT(2368,1664),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(2368,1664),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C15[] = {
  ABISELECT(-13200,-9252),
  ABISELECT(-13088,-9180),
  ABISELECT(-12544,-8796),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__A1__9S20507C15[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(13088,9180),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C17__9S20507C15[] = {
  ABISELECT(-12224,-8564),
  ABISELECT(-12656,-8876),
  ABISELECT(-13200,-9260),
  ABISELECT(-13224,-9268),
  ABISELECT(-13440,-9416),
  ABISELECT(-13312,-9332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C17__A1__9S20507C15[] = {
  ABISELECT(-12224,-8564),
  ABISELECT(-12656,-8876),
  ABISELECT(-13200,-9260),
  ABISELECT(-13224,-9268),
  ABISELECT(-13440,-9416),
  ABISELECT(-13312,-9332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C17__A1__9S20507C15[] = {
  ABISELECT(13440,9416),
  ABISELECT(13440,9416),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C17__A1__9S20507C15[] = {
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  ABISELECT(13224,9268),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C17__A1__9S20507C15[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(13200,9260),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C17__A1__9S20507C15[] = {
  ABISELECT(12224,8564),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(12224,8564),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C17__9S20507C15[] = {
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  ABISELECT(13224,9268),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C17__9S20507C15[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(13200,9260),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C17__9S20507C15[] = {
  ABISELECT(12224,8564),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(12224,8564),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C17__9S20507C15[] = {
  ABISELECT(13440,9416),
  ABISELECT(13440,9416),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
static  VTT_ENTRY vtt_S20507C15[] = {
  {&(_ZTV9S20507C15[11]),  11,81},
  {&(_tg__ZTV9S20507C13__9S20507C15[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C13__9S20507C15[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C13__9S20507C15[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C13__9S20507C15[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C13__9S20507C15[7]),  7,10},
  {&(_tg__ZTV8S20507C7__A__9S20507C15[3]),  3,4},
  {&(_ZTV9S20507C15[23]),  23,81},
  {&(_ZTV9S20507C15[30]),  30,81},
  {&(_ZTV9S20507C15[34]),  34,81},
  {&(_ZTV9S20507C15[42]),  42,81},
  {&(_ZTV9S20507C15[19]),  19,81},
  {&(_ZTV9S20507C15[54]),  54,81},
  {&(_ZTV9S20507C15[63]),  63,81},
  {&(_ZTV9S20507C15[70]),  70,81},
  {&(_ZTV9S20507C15[79]),  79,81},
  {&(_tg__ZTV8S20507C5__9S20507C15[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C5__9S20507C15[4]),  4,5},
  {&(_tg__ZTV8S20507C7__9S20507C15[3]),  3,4},
  {&(_tg__ZTV9S20507C14__9S20507C15[5]),  5,8},
  {&(_tg__ZTV8S20507C79S20507C14__A1__9S20507C15[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C14__9S20507C15[3]),  3,5},
  {&(_tg__ZTV9S20507C16__9S20507C15[8]),  8,10},
  {&(_tg__ZTV9S20507C129S20507C16__9S20507C15[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C129S20507C16__9S20507C15[4]),  4,5},
  {&(_tg__ZTV9S20507C109S20507C16__9S20507C15[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C16__9S20507C15[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C16__9S20507C15[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C16__9S20507C15[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C16__9S20507C15[4]),  4,5},
  {&(_tg__ZTV9S20507C10__9S20507C16__9S20507C15[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C16__9S20507C15[3]),  3,5},
  {&(_tg__ZTV9S20507C12__A1__9S20507C16__9S20507C15[5]),  5,5},
  {&(_tg__ZTV9S20507C14__9S20507C16__9S20507C15[7]),  7,10},
  {&(_tg__ZTV9S20507C12__A1__9S20507C15[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__A1__9S20507C15[4]),  4,5},
  {&(_tg__ZTV9S20507C17__9S20507C15[8]),  8,10},
  {&(_tg__ZTV9S20507C139S20507C17__A1__9S20507C15[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C17__A1__9S20507C15[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C17__A1__9S20507C15[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C17__A1__9S20507C15[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C17__A1__9S20507C15[7]),  7,10},
  {&(_tg__ZTV8S20507C5__9S20507C17__9S20507C15[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C17__9S20507C15[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C17__9S20507C15[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20507C17__9S20507C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20507C15[];
extern  VTBL_ENTRY _ZTV9S20507C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C15[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N9S20507C13D0Ev,_ZThn2928_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N9S20507C13D1Ev,_ZThn2928_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2976_N9S20507C13D0Ev,_ZThn2076_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2976_N9S20507C13D1Ev,_ZThn2076_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16416_N9S20507C15D0Ev,_ZThn11492_N9S20507C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6560_N9S20507C15D0Ev,_ZThn4592_N9S20507C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16416_N9S20507C15D1Ev,_ZThn11492_N9S20507C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6560_N9S20507C15D1Ev,_ZThn4592_N9S20507C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N9S20507C15D0Ev,_ZThn2928_N9S20507C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N9S20507C15D1Ev,_ZThn2928_N9S20507C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C15D0Ev,_ZTv0_n12_N9S20507C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2976_N9S20507C15D0Ev,_ZThn2076_N9S20507C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C15D1Ev,_ZTv0_n12_N9S20507C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2976_N9S20507C15D1Ev,_ZThn2076_N9S20507C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C15 = {  "S20507C15", // class name
  bases_S20507C15, 25,
  &(vtc_S20507C15[0]), // expected_vtbl_contents
  &(vtt_S20507C15[0]), // expected_vtt_contents
  ABISELECT(17200,12032), // object size
  NSPAIRA(_ZTI9S20507C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20507C15),81, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C15),46, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C18  : virtual S20507C6 , virtual S20507C12 , S20507C10 {
  void *s20507c18f0;
  ::S20507C14 s20507c18f1;
  virtual  ~S20507C18(); // _ZN9S20507C18D2Ev
  S20507C18(); // tgen
};
//SIG(-1 S20507C18) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 VBC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC5{ BC4 VBC2 v1 FD[2] Fi[2] FD[3]} FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC5 VBC3 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC5 VBC4 FC10{}} VBC11{ BC2 VBC4 VBC7 BC5 vd FC9 FC5} FC4 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} vd Fp FC11}


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

static void Test_S20507C18()
{
  extern Class_Descriptor cd_S20507C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(556,1559)];
    init_test(&cd_S20507C18, buf);
    S20507C18 *dp, &lv = *(dp=new (buf) S20507C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8880,6232), "sizeof(S20507C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C18)");
    /*is_ambiguous_... S20507C18::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(7568,5308), "S20507C18");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(7568,5308), "S20507C18");
    /*is_ambiguous_... S20507C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(7672,5376), "S20507C18");
    /*is_ambiguous_... S20507C18::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(7776,5452), "S20507C18");
    /*is_ambiguous_... S20507C12::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(7776,5452), "S20507C18");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*), ABISELECT(7776,5452), "S20507C18");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(8224,5768), "S20507C18");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(8224,5768), "S20507C18");
    check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(8208,5764), "S20507C18");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*), ABISELECT(8208,5764), "S20507C18");
    check_base_class_offset(lv, (S20507C12*), ABISELECT(7664,5372), "S20507C18");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*), ABISELECT(7664,5372), "S20507C18");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*), ABISELECT(8752,6148), "S20507C18");
    check_base_class_offset(lv, (S20507C10*), 0, "S20507C18");
    check_field_offset(lv, s20507c18f0, ABISELECT(4536,3180), "S20507C18.s20507c18f0");
    check_field_offset(lv, s20507c18f1, ABISELECT(4544,3184), "S20507C18.s20507c18f1");
    test_class_info(&lv, &cd_S20507C18);
    dp->~S20507C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C18(Test_S20507C18, "S20507C18", ABISELECT(8880,6232));

#else // __cplusplus

extern void _ZN9S20507C18C1Ev();
extern void _ZN9S20507C18D2Ev();
Name_Map name_map_S20507C18[] = {
  NSPAIR(_ZN9S20507C18C1Ev),
  NSPAIR(_ZN9S20507C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
static Base_Class bases_S20507C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(7568,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(7672,5376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(8208,5764), //bcp->offset
    14, //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
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C12,    ABISELECT(7664,5372), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C11,    ABISELECT(8752,6148), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20507C10,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20507C18[];
extern void _ZN9S20507C18D1Ev();
extern void _ZN9S20507C18D0Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N9S20507C18D1Ev,_ZTv0_n12_N9S20507C18D1Ev)();
extern void ABISELECT(_ZThn8752_N9S20507C18D1Ev,_ZThn6148_N9S20507C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C18D0Ev,_ZTv0_n12_N9S20507C18D0Ev)();
extern void ABISELECT(_ZThn8752_N9S20507C18D0Ev,_ZThn6148_N9S20507C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20507C18[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&_ZN9S20507C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C18D0Ev,
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C18D1Ev,_ZTv0_n12_N9S20507C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C18D0Ev,_ZTv0_n12_N9S20507C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S20507C18[];
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C18[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn8752_N9S20507C10D1Ev,_ZThn6148_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn8752_N9S20507C10D0Ev,_ZThn6148_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C10__9S20507C18[] = {
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C10__9S20507C18[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C10__9S20507C18[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C18[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__9S20507C18[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C18[] = {
  ABISELECT(-640,-456),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTT_ENTRY vtt_S20507C18[] = {
  {&(_ZTV9S20507C18[7]),  7,24},
  {&(_tg__ZTV9S20507C10__9S20507C18[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C10__9S20507C18[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C10__9S20507C18[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C10__9S20507C18[5]),  5,5},
  {&(_ZTV9S20507C18[14]),  14,24},
  {&(_ZTV9S20507C18[18]),  18,24},
  {&(_ZTV9S20507C18[22]),  22,24},
  {&(_tg__ZTV9S20507C12__9S20507C18[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__9S20507C18[4]),  4,5},
  {&(_tg__ZTV8S20507C7__9S20507C18[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20507C18[];
extern  VTBL_ENTRY _ZTV9S20507C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C18[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S20507C10D0Ev,_ZThn6148_N9S20507C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S20507C10D1Ev,_ZThn6148_N9S20507C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C18D0Ev,_ZTv0_n12_N9S20507C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S20507C18D0Ev,_ZThn6148_N9S20507C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C18D1Ev,_ZTv0_n12_N9S20507C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S20507C18D1Ev,_ZThn6148_N9S20507C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C18 = {  "S20507C18", // class name
  bases_S20507C18, 10,
  &(vtc_S20507C18[0]), // expected_vtbl_contents
  &(vtt_S20507C18[0]), // expected_vtt_contents
  ABISELECT(8880,6232), // object size
  NSPAIRA(_ZTI9S20507C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20507C18),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C18),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C2  : virtual S20507C3 , virtual S20507C15 , S20507C16 {
  void *s20507c2f0;
  char s20507c2f1[2];
  void *s20507c2f2;
  ::S20507C18 s20507c2f3;
  ~S20507C2(); // tgen
  S20507C2(); // tgen
};
//SIG(-1 S20507C2) C1{ VBC2{ BC3{ v1 v2 v3 Fi FC4{ VBC5{ m Fi[10] Fp[6]} VBC6{ BC7{ BC5 Fi FD Fi FC5 FC5 Fi FD[8]} VBC5 v4 FD[2] Fi[2] FD[3]} VBC7 FC8{}} Fi Fp FC9{ VBC10{ vd m Fp FD[5] Fp FD} VBC7 VBC6 VBC11{ BC5 VBC7 VBC6 FD} vd FD[9] Fi FC12{ VBC5 VBC10 VBC4 VBC13{ BC5 VBC7 VBC10 BC6 vd FC4 FC6} FC7 FC5 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC10 FL} Fi FL FD} VBC10 VBC11 BC9 BC4 vd v5 Fp Fi FL Fi FC12 Fp[10] Fi FD[4]} VBC14{ VBC10 BC12 BC6 VBC15{ VBC5 VBC6 BC11 BC9 VBC13 vd Fi Fp Fi:9 Fc FD FC6 FC16{ VBC5 VBC7 VBC4 VBC13 BC12 vd FC10 FD} Fc Fs[7] FC8 Fi Fc Fl} VBC16 vd v6 v7 v8 FC6 Fc FD Fi FD FC4} BC15 Fp Fc[2] Fp FC17{ VBC5 VBC11 BC9 vd Fp FC13}}


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

static void Test_S20507C2()
{
  extern Class_Descriptor cd_S20507C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3239,9068)];
    init_test(&cd_S20507C2, buf);
    S20507C2 *dp, &lv = *(dp=new (buf) S20507C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(51808,36268), "sizeof(S20507C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C2)");
    check_base_class_offset(lv, (S20507C4*)(S20507C3*), ABISELECT(18640,13064), "S20507C2");
    check_base_class_offset(lv, (S20507C11*)(S20507C3*), ABISELECT(34608,24236), "S20507C2");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C3*), ABISELECT(34608,24236), "S20507C2");
    check_base_class_offset(lv, (S20507C11*)(S20507C15*), ABISELECT(34608,24236), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C15*), ABISELECT(34608,24236), "S20507C2");
    check_base_class_offset(lv, (S20507C11*)(S20507C14*), ABISELECT(34608,24236), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C16*), ABISELECT(34608,24236), "S20507C2");
    check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C17*), ABISELECT(34608,24236), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C16*), ABISELECT(34608,24236), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(34744,24324), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C3*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*)(S20507C3*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C5 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C14*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*)(S20507C16*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C16*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C17::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C17*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*)(S20507C16*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C16*), ABISELECT(34848,24400), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(35296,24716), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(35296,24716), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*)(S20507C3*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C15*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C14*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C15*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C16*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C17*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C13::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C17*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C16*), ABISELECT(35824,25096), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(35280,24712), "S20507C2");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C3*), ABISELECT(35280,24712), "S20507C2");
    check_base_class_offset(lv, (S20507C7*)(S20507C5*)(S20507C3*), ABISELECT(35280,24712), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C5 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C5*), ABISELECT(35280,24712), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C16*), ABISELECT(35280,24712), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*)(S20507C16*), ABISELECT(35280,24712), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C16*), ABISELECT(35280,24712), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C16*), ABISELECT(35280,24712), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*)(S20507C16*), ABISELECT(35280,24712), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C16*), ABISELECT(35280,24712), "S20507C2");
    check_base_class_offset(lv, (S20507C12*)(S20507C3*), ABISELECT(34736,24320), "S20507C2");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C3*), ABISELECT(34736,24320), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C16*), ABISELECT(34736,24320), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C16*), ABISELECT(34736,24320), "S20507C2");
    check_base_class_offset(lv, (S20507C10*)(S20507C3*), ABISELECT(25648,17976), "S20507C2");
    check_base_class_offset(lv, (S20507C5*)(S20507C3*), ABISELECT(30184,21156), "S20507C2");
    check_base_class_offset(lv, (S20507C3*), ABISELECT(18640,13064), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C15*), ABISELECT(38896,27236), "S20507C2");
    check_base_class_offset(lv, (S20507C5*)(S20507C17*), ABISELECT(38896,27236), "S20507C2");
    check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C17*), ABISELECT(38896,27236), "S20507C2");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C14*), ABISELECT(39456,27628), "S20507C2");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(38928,27248), "S20507C2");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(38928,27248), "S20507C2");
    check_base_class_offset(lv, (S20507C7*)(S20507C14*), ABISELECT(38912,27244), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C15*), ABISELECT(38912,27244), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C16*), ABISELECT(38912,27244), "S20507C2");
    check_base_class_offset(lv, (S20507C14*)(S20507C17*), ABISELECT(38912,27244), "S20507C2");
    check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C17*), ABISELECT(38912,27244), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C16*), ABISELECT(38912,27244), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C13*)(S20507C15*), ABISELECT(35920,25160), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C15*), ABISELECT(36576,25608), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C15*), ABISELECT(36576,25608), "S20507C2");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C15*), ABISELECT(36560,25604), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*)(S20507C16*), ABISELECT(41288,28912), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C16*), ABISELECT(41280,28908), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C10*)(S20507C16*), ABISELECT(41392,28988), "S20507C2");
    check_base_class_offset(lv, (S20507C16*)(S20507C15*), ABISELECT(41280,28908), "S20507C2");
    check_base_class_offset(lv, (S20507C13*)(S20507C17*), ABISELECT(51024,35728), "S20507C2");
    check_base_class_offset(lv, (S20507C17*)(S20507C15*), ABISELECT(51024,35728), "S20507C2");
    check_base_class_offset(lv, (S20507C15*), ABISELECT(35920,25160), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*)(S20507C16*), ABISELECT(8,4), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C16*), 0, "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C10*)(S20507C16*), ABISELECT(112,80), "S20507C2");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C16*), 0, "S20507C2");
    check_field_offset(lv, s20507c2f0, ABISELECT(9736,6820), "S20507C2.s20507c2f0");
    check_field_offset(lv, s20507c2f1, ABISELECT(9744,6824), "S20507C2.s20507c2f1");
    check_field_offset(lv, s20507c2f2, ABISELECT(9752,6828), "S20507C2.s20507c2f2");
    check_field_offset(lv, s20507c2f3, ABISELECT(9760,6832), "S20507C2.s20507c2f3");
    test_class_info(&lv, &cd_S20507C2);
    dp->~S20507C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C2(Test_S20507C2, "S20507C2", ABISELECT(51808,36268));

#else // __cplusplus

extern void _ZN8S20507C2C1Ev();
extern void _ZN8S20507C2D1Ev();
Name_Map name_map_S20507C2[] = {
  NSPAIR(_ZN8S20507C2C1Ev),
  NSPAIR(_ZN8S20507C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C4;
extern VTBL_ENTRY _ZTI8S20507C4[];
extern  VTBL_ENTRY _ZTV8S20507C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C3;
extern VTBL_ENTRY _ZTI8S20507C3[];
extern  VTBL_ENTRY _ZTV8S20507C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C3[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C14;
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C16;
extern VTBL_ENTRY _ZTI9S20507C16[];
extern  VTBL_ENTRY _ZTV9S20507C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C16[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C17;
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
extern Class_Descriptor cd_S20507C15;
extern VTBL_ENTRY _ZTI9S20507C15[];
extern  VTBL_ENTRY _ZTV9S20507C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C15[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C16;
extern VTBL_ENTRY _ZTI9S20507C16[];
extern  VTBL_ENTRY _ZTV9S20507C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C16[];
static Base_Class bases_S20507C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C4,    ABISELECT(18640,13064), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C11,    ABISELECT(34608,24236), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(34744,24324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(34848,24400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(34848,24400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(35296,24716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(35296,24716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(35824,25096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20507C7,    ABISELECT(35280,24712), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20507C12,    ABISELECT(34736,24320), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20507C10,    ABISELECT(25648,17976), //bcp->offset
    42, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20507C5,    ABISELECT(30184,21156), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20507C3,    ABISELECT(18640,13064), //bcp->offset
    24, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C5,    ABISELECT(38896,27236), //bcp->offset
    96, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(39456,27628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(38928,27248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(38928,27248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(38912,27244), //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
    18, //immediately_derived
  0, 0},
  {&cd_S20507C14,    ABISELECT(38912,27244), //bcp->offset
    101, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20507C13,    ABISELECT(35920,25160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(36576,25608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(36576,25608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(36560,25604), //bcp->offset
    92, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(41288,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
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20507C12,    ABISELECT(41280,28908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20507C10,    ABISELECT(41392,28988), //bcp->offset
    122, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20507C16,    ABISELECT(41280,28908), //bcp->offset
    111, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20507C13,    ABISELECT(51024,35728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20507C17,    ABISELECT(51024,35728), //bcp->offset
    131, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20507C15,    ABISELECT(35920,25160), //bcp->offset
    71, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    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
    19, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20507C10,    ABISELECT(112,80), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20507C16,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20507C2[];
extern void _ZN8S20507C2D1Ev();
extern void _ZN8S20507C2D0Ev();
extern void ABISELECT(_ZThn112_N8S20507C2D1Ev,_ZThn80_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20507C2D0Ev,_ZThn80_N8S20507C2D0Ev)();
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
extern void ABISELECT(_ZTv0_n88_N8S20507C2D1Ev,_ZTv0_n44_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn18640_N8S20507C2D1Ev,_ZThn13064_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20507C2D0Ev,_ZTv0_n44_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn18640_N8S20507C2D0Ev,_ZThn13064_N8S20507C2D0Ev)() __attribute__((weak));
extern void _ZN8S20507C32v5Ev();
extern void ABISELECT(_ZTvn7008_n88_N8S20507C2D1Ev,_ZTvn4912_n44_N8S20507C2D1Ev)();
extern void ABISELECT(_ZTvn7008_n88_N8S20507C2D0Ev,_ZTvn4912_n44_N8S20507C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20507C2D1Ev,_ZTv0_n12_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn34608_N8S20507C2D1Ev,_ZThn24236_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20507C2D0Ev,_ZTv0_n12_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn34608_N8S20507C2D0Ev,_ZThn24236_N8S20507C2D0Ev)() __attribute__((weak));
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n96_N8S20507C2D1Ev,_ZTv0_n48_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn35920_N8S20507C2D1Ev,_ZThn25160_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20507C2D0Ev,_ZTv0_n48_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn35920_N8S20507C2D0Ev,_ZThn25160_N8S20507C2D0Ev)() __attribute__((weak));
extern void _ZN9S20507C152v6Ev();
extern void _ZN9S20507C152v7Ev();
extern void _ZN9S20507C152v8Ev();
extern void _ZN8S20507C72v4Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N8S20507C2D1Ev,_ZTv0_n28_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn38912_N8S20507C2D1Ev,_ZThn27244_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20507C2D0Ev,_ZTv0_n28_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn38912_N8S20507C2D0Ev,_ZThn27244_N8S20507C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn41280_N8S20507C2D1Ev,_ZThn28908_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn41280_N8S20507C2D0Ev,_ZThn28908_N8S20507C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn112_n72_N8S20507C2D1Ev,_ZTvn80_n36_N8S20507C2D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N8S20507C2D0Ev,_ZTvn80_n36_N8S20507C2D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn51024_N8S20507C2D1Ev,_ZThn35728_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn51024_N8S20507C2D0Ev,_ZThn35728_N8S20507C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20507C2[] = {
  ABISELECT(51024,35728),
  ABISELECT(41280,28908),
  ABISELECT(38896,27236),
  ABISELECT(35920,25160),
  ABISELECT(18640,13064),
  ABISELECT(38912,27244),
  ABISELECT(34736,24320),
  ABISELECT(34608,24236),
  ABISELECT(35824,25096),
  ABISELECT(35280,24712),
  ABISELECT(34848,24400),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20507C2D0Ev,
  ABISELECT(34624,24240),
  ABISELECT(35712,25016),
  ABISELECT(35168,24632),
  ABISELECT(34736,24320),
  ABISELECT(34496,24156),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S20507C2D1Ev,_ZThn80_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S20507C2D0Ev,_ZThn80_N8S20507C2D0Ev),
  0,
  ABISELECT(-18640,-13064),
  0,
  0,
  0,
  ABISELECT(17184,12032),
  ABISELECT(16640,11648),
  ABISELECT(16208,11336),
  ABISELECT(16096,11256),
  ABISELECT(15968,11172),
  ABISELECT(-18640,-13064),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20507C2D1Ev,_ZTv0_n44_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20507C2D0Ev,_ZTv0_n44_N8S20507C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20507C32v5Ev,
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  ABISELECT(-25648,-17976),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn7008_n88_N8S20507C2D1Ev,_ZTvn4912_n44_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn7008_n88_N8S20507C2D0Ev,_ZTvn4912_n44_N8S20507C2D0Ev),
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  ABISELECT(-30184,-21156),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  ABISELECT(-34608,-24236),
  ABISELECT(-34608,-24236),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C2D1Ev,_ZTv0_n12_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C2D0Ev,_ZTv0_n12_N8S20507C2D0Ev),
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-34736,-24320),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-35280,-24712),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(640,444),
  0,
  0,
  0,
  ABISELECT(-35920,-25160),
  ABISELECT(15104,10568),
  ABISELECT(-1184,-840),
  ABISELECT(5360,3748),
  ABISELECT(2992,2084),
  ABISELECT(-1072,-760),
  ABISELECT(-640,-448),
  ABISELECT(2976,2076),
  ABISELECT(-1312,-924),
  ABISELECT(-96,-64),
  ABISELECT(-35920,-25160),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20507C2D1Ev,_ZTv0_n48_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20507C2D0Ev,_ZTv0_n48_N8S20507C2D0Ev),
  (VTBL_ENTRY)&_ZN9S20507C152v6Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v7Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v8Ev,
  ABISELECT(-736,-508),
  ABISELECT(-36560,-25604),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(-38896,-27236),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  ABISELECT(-38912,-27244),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-38912,-27244),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20507C2D1Ev,_ZTv0_n28_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20507C2D0Ev,_ZTv0_n28_N8S20507C2D0Ev),
  ABISELECT(-41280,-28908),
  ABISELECT(-2368,-1664),
  ABISELECT(-6544,-4588),
  ABISELECT(-6672,-4672),
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  ABISELECT(-41280,-28908),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev),
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  ABISELECT(-41392,-28988),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S20507C2D1Ev,_ZTvn80_n36_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S20507C2D0Ev,_ZTvn80_n36_N8S20507C2D0Ev),
  ABISELECT(-51024,-35728),
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  ABISELECT(-51024,-35728),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20507C2[];
extern void _ZN9S20507C16D1Ev();
extern void _ZN9S20507C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C16__A__8S20507C2[] = {
  ABISELECT(38912,27244),
  ABISELECT(34736,24320),
  ABISELECT(34608,24236),
  ABISELECT(35824,25096),
  ABISELECT(35280,24712),
  ABISELECT(34848,24400),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN9S20507C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C129S20507C16__A2__8S20507C2[] = {
  ABISELECT(35824,25096),
  ABISELECT(35280,24712),
  ABISELECT(34848,24400),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C129S20507C16__A2__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-35280,-24712),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__A2__8S20507C2[] = {
  ABISELECT(34624,24240),
  ABISELECT(35712,25016),
  ABISELECT(35168,24632),
  ABISELECT(34736,24320),
  ABISELECT(34496,24156),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn34496_N9S20507C10D1Ev,_ZThn24156_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn34496_N9S20507C10D0Ev,_ZThn24156_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C16__A2__8S20507C2[] = {
  ABISELECT(-34496,-24156),
  ABISELECT(-34496,-24156),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C16__A2__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-35168,-24632),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C16__A2__8S20507C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-34624,-24240),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C16__A__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-35280,-24712),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C16__A__8S20507C2[] = {
  ABISELECT(34624,24240),
  ABISELECT(35712,25016),
  ABISELECT(35168,24632),
  ABISELECT(34736,24320),
  ABISELECT(34496,24156),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn34608_N9S20507C16D1Ev,_ZThn24236_N9S20507C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev)();
extern void ABISELECT(_ZThn34608_N9S20507C16D0Ev,_ZThn24236_N9S20507C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C16__A__8S20507C2[] = {
  ABISELECT(-34608,-24236),
  ABISELECT(-34608,-24236),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C16__A__8S20507C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-34736,-24320),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn38912_N9S20507C16D1Ev,_ZThn27244_N9S20507C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev)();
extern void ABISELECT(_ZThn38912_N9S20507C16D0Ev,_ZThn27244_N9S20507C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C16__A__8S20507C2[] = {
  ABISELECT(-38912,-27244),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-38912,-27244),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev),
};
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
extern void _ZN8S20507C3D1Ev();
extern void _ZN8S20507C3D0Ev();
extern void _ZN8S20507C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C3__8S20507C2[] = {
  ABISELECT(17184,12032),
  ABISELECT(16640,11648),
  ABISELECT(16208,11336),
  ABISELECT(16096,11256),
  ABISELECT(15968,11172),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20507C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20507C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20507C32v5Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C108S20507C3__8S20507C2[] = {
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn8960_N9S20507C10D1Ev,_ZThn6260_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn8960_N9S20507C10D0Ev,_ZThn6260_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C108S20507C3__8S20507C2[] = {
  ABISELECT(-8960,-6260),
  ABISELECT(-8960,-6260),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C108S20507C3__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-9632,-6736),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C108S20507C3__8S20507C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-9088,-6344),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20507C58S20507C3__8S20507C2[] = {
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C58S20507C3__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-5096,-3556),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev)();
extern void ABISELECT(_ZThn15968_N8S20507C3D1Ev,_ZThn11172_N8S20507C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev)();
extern void ABISELECT(_ZThn15968_N8S20507C3D0Ev,_ZThn11172_N8S20507C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20507C3__8S20507C2[] = {
  ABISELECT(-15968,-11172),
  ABISELECT(-15968,-11172),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__8S20507C3__8S20507C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-16096,-11256),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C3__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-16640,-11648),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn7008_N8S20507C3D1Ev,_ZThn4912_N8S20507C3D1Ev)();
extern void ABISELECT(_ZThn7008_N8S20507C3D0Ev,_ZThn4912_N8S20507C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__8S20507C3__8S20507C2[] = {
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  ABISELECT(-7008,-4912),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S20507C3D1Ev,_ZThn4912_N8S20507C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S20507C3D0Ev,_ZThn4912_N8S20507C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__8S20507C3__8S20507C2[] = {
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  ABISELECT(-11544,-8092),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__8S20507C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C2[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C15D1Ev();
extern void _ZN9S20507C15D0Ev();
extern void _ZN9S20507C152v6Ev();
extern void _ZN9S20507C152v7Ev();
extern void _ZN9S20507C152v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C15__8S20507C2[] = {
  ABISELECT(15104,10568),
  ABISELECT(-1184,-840),
  ABISELECT(5360,3748),
  ABISELECT(2992,2084),
  ABISELECT(-1072,-760),
  ABISELECT(-640,-448),
  ABISELECT(2976,2076),
  ABISELECT(-1312,-924),
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN9S20507C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v6Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v7Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v8Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C15__8S20507C2[] = {
  ABISELECT(2992,2084),
  ABISELECT(-1072,-760),
  ABISELECT(-640,-448),
  ABISELECT(2976,2076),
  ABISELECT(-1312,-924),
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C15__8S20507C2[] = {
  ABISELECT(1312,924),
  ABISELECT(1312,924),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C15__8S20507C2[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(-2976,-2076),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C15__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn2992_N9S20507C13D1Ev,_ZThn2084_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn2992_N9S20507C13D0Ev,_ZThn2084_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C15__8S20507C2[] = {
  ABISELECT(-2992,-2084),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-2992,-2084),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C15__A2__8S20507C2[] = {
  ABISELECT(-736,-508),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C15D1Ev,_ZTv0_n12_N9S20507C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C15D0Ev,_ZTv0_n12_N9S20507C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C15__8S20507C2[] = {
  ABISELECT(1312,924),
  ABISELECT(1312,924),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C15D1Ev,_ZTv0_n12_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C15D0Ev,_ZTv0_n12_N9S20507C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C15__8S20507C2[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(-2976,-2076),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C15__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn2992_N9S20507C15D1Ev,_ZThn2084_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn2992_N9S20507C15D0Ev,_ZThn2084_N9S20507C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C15__8S20507C2[] = {
  ABISELECT(-2992,-2084),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-2992,-2084),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__A__9S20507C15__8S20507C2[] = {
  ABISELECT(-736,-508),
  ABISELECT(-640,-444),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn5360_N9S20507C15D1Ev,_ZThn3748_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn5360_N9S20507C15D0Ev,_ZThn3748_N9S20507C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C16__9S20507C15__8S20507C2[] = {
  ABISELECT(-5360,-3748),
  ABISELECT(-2368,-1664),
  ABISELECT(-6544,-4588),
  ABISELECT(-6672,-4672),
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  ABISELECT(-5360,-3748),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev),
};
extern void ABISELECT(_ZTvn112_n72_N9S20507C15D1Ev,_ZTvn80_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N9S20507C15D0Ev,_ZTvn80_n36_N9S20507C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__9S20507C15__8S20507C2[] = {
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  ABISELECT(-5472,-3828),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N9S20507C15D1Ev,_ZTvn80_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N9S20507C15D0Ev,_ZTvn80_n36_N9S20507C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C15__8S20507C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(1184,840),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
};
extern void ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn15104_N9S20507C15D1Ev,_ZThn10568_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn15104_N9S20507C15D0Ev,_ZThn10568_N9S20507C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C17__9S20507C15__8S20507C2[] = {
  ABISELECT(-15104,-10568),
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  ABISELECT(-15104,-10568),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__A1__8S20507C2[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5__A1__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(3616,2524),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C14__8S20507C2[] = {
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C14__A1__8S20507C2[] = {
  ABISELECT(-3088,-2148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C14__8S20507C2[] = {
  ABISELECT(4304,3008),
  ABISELECT(4304,3008),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
extern void _ZN9S20507C16D1Ev();
extern void _ZN9S20507C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C16__8S20507C2[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-6544,-4588),
  ABISELECT(-6672,-4672),
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN9S20507C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C129S20507C16__A1__8S20507C2[] = {
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C129S20507C16__A1__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(6000,4196),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__A1__8S20507C2[] = {
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C16__A1__8S20507C2[] = {
  ABISELECT(6784,4752),
  ABISELECT(6784,4752),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C16__A1__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(6112,4276),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C16__A1__8S20507C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(6656,4668),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C16__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(6000,4196),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C16__8S20507C2[] = {
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C16__8S20507C2[] = {
  ABISELECT(6672,4672),
  ABISELECT(6672,4672),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C16__8S20507C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(6544,4588),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C16__8S20507C2[] = {
  ABISELECT(2368,1664),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(2368,1664),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev),
};
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C17__8S20507C2[] = {
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C17__A1__8S20507C2[] = {
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C17__A1__8S20507C2[] = {
  ABISELECT(16416,11492),
  ABISELECT(16416,11492),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C17__A1__8S20507C2[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(12128,8492),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C17__A1__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(15744,11016),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C17__A1__8S20507C2[] = {
  ABISELECT(12112,8484),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(12112,8484),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C17__8S20507C2[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(12128,8492),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C17__8S20507C2[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(15744,11016),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C17__8S20507C2[] = {
  ABISELECT(12112,8484),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(12112,8484),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C17__8S20507C2[] = {
  ABISELECT(16416,11492),
  ABISELECT(16416,11492),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
static  VTT_ENTRY vtt_S20507C2[] = {
  {&(_ZTV8S20507C2[13]),  13,142},
  {&(_tg__ZTV9S20507C16__A__8S20507C2[8]),  8,10},
  {&(_tg__ZTV9S20507C129S20507C16__A2__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C129S20507C16__A2__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C109S20507C16__A2__8S20507C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C16__A2__8S20507C2[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C16__A2__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C16__A2__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C16__A__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C10__9S20507C16__A__8S20507C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C16__A__8S20507C2[3]),  3,5},
  {&(_tg__ZTV9S20507C12__A1__9S20507C16__A__8S20507C2[5]),  5,5},
  {&(_tg__ZTV9S20507C14__9S20507C16__A__8S20507C2[7]),  7,10},
  {&(_ZTV8S20507C2[36]),  36,142},
  {&(_ZTV8S20507C2[59]),  59,142},
  {&(_ZTV8S20507C2[66]),  66,142},
  {&(_ZTV8S20507C2[70]),  70,142},
  {&(_ZTV8S20507C2[49]),  49,142},
  {&(_ZTV8S20507C2[56]),  56,142},
  {&(_ZTV8S20507C2[87]),  87,142},
  {&(_ZTV8S20507C2[101]),  101,142},
  {&(_ZTV8S20507C2[108]),  108,142},
  {&(_ZTV8S20507C2[95]),  95,142},
  {&(_ZTV8S20507C2[120]),  120,142},
  {&(_ZTV8S20507C2[129]),  129,142},
  {&(_ZTV8S20507C2[140]),  140,142},
  {&(_ZTV8S20507C2[22]),  22,142},
  {&(_tg__ZTV8S20507C3__8S20507C2[7]),  7,13},
  {&(_tg__ZTV9S20507C108S20507C3__8S20507C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C108S20507C3__8S20507C2[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C108S20507C3__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C108S20507C3__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C58S20507C3__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C58S20507C3__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C11__8S20507C3__8S20507C2[3]),  3,5},
  {&(_tg__ZTV9S20507C12__8S20507C3__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C3__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C10__8S20507C3__8S20507C2[7]),  7,9},
  {&(_tg__ZTV8S20507C5__8S20507C3__8S20507C2[5]),  5,5},
  {&(_tg__ZTV9S20507C12__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__8S20507C2[4]),  4,5},
  {&(_tg__ZTV8S20507C7__8S20507C2[3]),  3,4},
  {&(_tg__ZTV9S20507C15__8S20507C2[11]),  11,16},
  {&(_tg__ZTV9S20507C139S20507C15__8S20507C2[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C15__8S20507C2[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C15__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C15__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C15__8S20507C2[7]),  7,10},
  {&(_tg__ZTV8S20507C79S20507C15__A2__8S20507C2[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C15__8S20507C2[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C15__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C15__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C15__8S20507C2[7]),  7,10},
  {&(_tg__ZTV8S20507C7__A__9S20507C15__8S20507C2[3]),  3,4},
  {&(_tg__ZTV9S20507C16__9S20507C15__8S20507C2[9]),  9,11},
  {&(_tg__ZTV9S20507C109S20507C16__9S20507C15__8S20507C2[7]),  7,9},
  {&(_tg__ZTV9S20507C12__A1__9S20507C15__8S20507C2[5]),  5,5},
  {&(_tg__ZTV9S20507C17__9S20507C15__8S20507C2[9]),  9,11},
  {&(_tg__ZTV8S20507C5__A1__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C5__A1__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C14__8S20507C2[5]),  5,8},
  {&(_tg__ZTV8S20507C79S20507C14__A1__8S20507C2[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C14__8S20507C2[3]),  3,5},
  {&(_tg__ZTV9S20507C16__8S20507C2[8]),  8,10},
  {&(_tg__ZTV9S20507C129S20507C16__A1__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C129S20507C16__A1__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C109S20507C16__A1__8S20507C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C16__A1__8S20507C2[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C16__A1__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C16__A1__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C16__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C10__9S20507C16__8S20507C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C16__8S20507C2[3]),  3,5},
  {&(_tg__ZTV9S20507C12__A1__9S20507C16__8S20507C2[5]),  5,5},
  {&(_tg__ZTV9S20507C14__9S20507C16__8S20507C2[7]),  7,10},
  {&(_tg__ZTV9S20507C17__8S20507C2[8]),  8,10},
  {&(_tg__ZTV9S20507C139S20507C17__A1__8S20507C2[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C17__A1__8S20507C2[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C17__A1__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C17__A1__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C17__A1__8S20507C2[7]),  7,10},
  {&(_tg__ZTV8S20507C5__9S20507C17__8S20507C2[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C17__8S20507C2[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C17__8S20507C2[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20507C17__8S20507C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20507C2[];
extern  VTBL_ENTRY _ZTV8S20507C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C2[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15104_N9S20507C15D0Ev,_ZThn10568_N9S20507C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N9S20507C15D0Ev,_ZThn3748_N9S20507C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15104_N9S20507C15D1Ev,_ZThn10568_N9S20507C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N9S20507C15D1Ev,_ZThn3748_N9S20507C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2992_N9S20507C15D0Ev,_ZThn2084_N9S20507C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2992_N9S20507C15D1Ev,_ZThn2084_N9S20507C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2992_N9S20507C13D0Ev,_ZThn2084_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2992_N9S20507C13D1Ev,_ZThn2084_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15968_N8S20507C3D0Ev,_ZThn11172_N8S20507C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15968_N8S20507C3D1Ev,_ZThn11172_N8S20507C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38912_N9S20507C16D0Ev,_ZThn27244_N9S20507C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38912_N9S20507C16D1Ev,_ZThn27244_N9S20507C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34608_N9S20507C16D0Ev,_ZThn24236_N9S20507C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34608_N9S20507C16D1Ev,_ZThn24236_N9S20507C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8960_N9S20507C10D0Ev,_ZThn6260_N9S20507C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34496_N9S20507C10D0Ev,_ZThn24156_N9S20507C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8960_N9S20507C10D1Ev,_ZThn6260_N9S20507C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34496_N9S20507C10D1Ev,_ZThn24156_N9S20507C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51024_N8S20507C2D0Ev,_ZThn35728_N8S20507C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn41280_N8S20507C2D0Ev,_ZThn28908_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51024_N8S20507C2D1Ev,_ZThn35728_N8S20507C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn41280_N8S20507C2D1Ev,_ZThn28908_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20507C2D0Ev,_ZTv0_n28_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38912_N8S20507C2D0Ev,_ZThn27244_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20507C2D1Ev,_ZTv0_n28_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38912_N8S20507C2D1Ev,_ZThn27244_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20507C2D0Ev,_ZTv0_n48_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35920_N8S20507C2D0Ev,_ZThn25160_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20507C2D1Ev,_ZTv0_n48_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35920_N8S20507C2D1Ev,_ZThn25160_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C2D0Ev,_ZTv0_n12_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34608_N8S20507C2D0Ev,_ZThn24236_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C2D1Ev,_ZTv0_n12_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34608_N8S20507C2D1Ev,_ZThn24236_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20507C2D0Ev,_ZTv0_n44_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18640_N8S20507C2D0Ev,_ZThn13064_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20507C2D1Ev,_ZTv0_n44_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18640_N8S20507C2D1Ev,_ZThn13064_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C2 = {  "S20507C2", // class name
  bases_S20507C2, 34,
  &(vtc_S20507C2[0]), // expected_vtbl_contents
  &(vtt_S20507C2[0]), // expected_vtt_contents
  ABISELECT(51808,36268), // object size
  NSPAIRA(_ZTI8S20507C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20507C2),142, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20507C2),85, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C20  : S20507C11 , S20507C17 , virtual S20507C13 , virtual S20507C4 {
  void *s20507c20f0[5];
  long double s20507c20f1[5];
  int s20507c20f2;
  long double s20507c20f3;
  virtual void  v9(); // _ZN9S20507C202v9Ev
  virtual void  v10(); // _ZN9S20507C203v10Ev
  ~S20507C20(); // tgen
  S20507C20(); // tgen
};
//SIG(-1 S20507C20) C1{ BC2{ vd m Fp FD[5] Fp FD} BC3{ VBC4{ m Fi[10] Fp[6]} VBC5{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC6{ VBC4 VBC7{ BC5 VBC4 v3 FD[2] Fi[2] FD[3]} VBC5 FC8{}} VBC9{ BC4 VBC5 VBC2 BC7 vd FC6 FC7} BC10{ VBC4 VBC2 VBC6 VBC9 FC5 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC2 FD} VBC10 VBC11{ v4 v5 v6 Fi FC6 Fi Fp FC12{ VBC2 VBC5 VBC7 VBC13{ BC4 VBC5 VBC7 FD} vd FD[9] Fi FC10 Fi FL FC2 FL} Fi FL FD} v1 v2 Fp[5] FD[5] Fi FD}


void  S20507C20 ::v9(){vfunc_called(this, "_ZN9S20507C202v9Ev");}
void  S20507C20 ::v10(){vfunc_called(this, "_ZN9S20507C203v10Ev");}
S20507C20 ::~S20507C20(){ note_dtor("S20507C20", this);} // tgen
S20507C20 ::S20507C20(){ note_ctor("S20507C20", this);} // tgen

static void Test_S20507C20()
{
  extern Class_Descriptor cd_S20507C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(770,2149)];
    init_test(&cd_S20507C20, buf);
    S20507C20 *dp, &lv = *(dp=new (buf) S20507C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12304,8592), "sizeof(S20507C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C20)");
    /*is_ambiguous_... S20507C20::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*), 0, "S20507C20");
    /*is_ambiguous_... S20507C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C17*), ABISELECT(1072,720), "S20507C20");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*), ABISELECT(1072,720), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(1072,720), "S20507C20");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C14*), ABISELECT(1072,720), "S20507C20");
    /*is_ambiguous_... S20507C13::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C17*), ABISELECT(1072,720), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*), ABISELECT(1072,720), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(1168,784), "S20507C20");
    /*is_ambiguous_... S20507C17::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C17*), ABISELECT(1168,784), "S20507C20");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*), ABISELECT(1168,784), "S20507C20");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C14*), ABISELECT(1168,784), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(1632,1108), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(1632,1108), "S20507C20");
    check_base_class_offset(lv, (S20507C7*)(S20507C5*), ABISELECT(1616,1104), "S20507C20");
    check_base_class_offset(lv, (S20507C5*)(S20507C17*), ABISELECT(1600,1096), "S20507C20");
    check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C17*), ABISELECT(1600,1096), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*), ABISELECT(1600,1096), "S20507C20");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C14*), ABISELECT(2704,1872), "S20507C20");
    check_base_class_offset(lv, (S20507C11*)(S20507C14*), ABISELECT(4528,3152), "S20507C20");
    check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C17*), ABISELECT(4528,3152), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*), ABISELECT(4528,3152), "S20507C20");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(2176,1492), "S20507C20");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(2176,1492), "S20507C20");
    check_base_class_offset(lv, (S20507C7*)(S20507C14*), ABISELECT(2160,1488), "S20507C20");
    check_base_class_offset(lv, (S20507C14*)(S20507C17*), ABISELECT(2160,1488), "S20507C20");
    check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C17*), ABISELECT(2160,1488), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*), ABISELECT(2160,1488), "S20507C20");
    check_base_class_offset(lv, (S20507C13*)(S20507C17*), ABISELECT(128,84), "S20507C20");
    check_base_class_offset(lv, (S20507C17*), ABISELECT(128,84), "S20507C20");
    /*is_ambiguous_... S20507C20::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C13*), ABISELECT(4656,3236), "S20507C20");
    check_base_class_offset(lv, (S20507C4*), ABISELECT(5296,3680), "S20507C20");
    check_field_offset(lv, s20507c20f0, ABISELECT(912,624), "S20507C20.s20507c20f0");
    check_field_offset(lv, s20507c20f1, ABISELECT(960,644), "S20507C20.s20507c20f1");
    check_field_offset(lv, s20507c20f2, ABISELECT(1040,704), "S20507C20.s20507c20f2");
    check_field_offset(lv, s20507c20f3, ABISELECT(1056,708), "S20507C20.s20507c20f3");
    test_class_info(&lv, &cd_S20507C20);
    dp->~S20507C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C20(Test_S20507C20, "S20507C20", ABISELECT(12304,8592));

#else // __cplusplus

extern void _ZN9S20507C20C1Ev();
extern void _ZN9S20507C20D1Ev();
Name_Map name_map_S20507C20[] = {
  NSPAIR(_ZN9S20507C20C1Ev),
  NSPAIR(_ZN9S20507C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C14;
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C17;
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C4;
extern VTBL_ENTRY _ZTI8S20507C4[];
extern  VTBL_ENTRY _ZTV8S20507C4[];
static Base_Class bases_S20507C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C6,    ABISELECT(1072,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1168,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
    3, //immediately_derived
  0, 0},
  {&cd_S20507C8,    ABISELECT(1168,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
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(1616,1104), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C5,    ABISELECT(1600,1096), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2704,1872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4528,3152), //bcp->offset
    44, //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
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(2160,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20507C14,    ABISELECT(2160,1488), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C13,    ABISELECT(128,84), //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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20507C17,    ABISELECT(128,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C13,    ABISELECT(4656,3236), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C4,    ABISELECT(5296,3680), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20507C20[];
extern void _ZN9S20507C20D1Ev();
extern void _ZN9S20507C20D0Ev();
extern void _ZN9S20507C202v9Ev();
extern void _ZN9S20507C203v10Ev();
extern void ABISELECT(_ZThn128_N9S20507C20D1Ev,_ZThn84_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn128_N9S20507C20D0Ev,_ZThn84_N9S20507C20D0Ev)();
extern void _ZN8S20507C72v4Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C20D1Ev,_ZTv0_n28_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn2160_N9S20507C20D1Ev,_ZThn1488_N9S20507C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C20D0Ev,_ZTv0_n28_N9S20507C20D0Ev)();
extern void ABISELECT(_ZThn2160_N9S20507C20D0Ev,_ZThn1488_N9S20507C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C20D1Ev,_ZTv0_n12_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn4528_N9S20507C20D1Ev,_ZThn3152_N9S20507C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C20D0Ev,_ZTv0_n12_N9S20507C20D0Ev)();
extern void ABISELECT(_ZThn4528_N9S20507C20D0Ev,_ZThn3152_N9S20507C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn4656_N9S20507C20D1Ev,_ZThn3236_N9S20507C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev)();
extern void ABISELECT(_ZThn4656_N9S20507C20D0Ev,_ZThn3236_N9S20507C20D0Ev)() __attribute__((weak));
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
static  VTBL_ENTRY vtc_S20507C20[] = {
  ABISELECT(5296,3680),
  ABISELECT(4656,3236),
  ABISELECT(4528,3152),
  ABISELECT(2160,1488),
  ABISELECT(1616,1104),
  ABISELECT(1600,1096),
  ABISELECT(1168,784),
  ABISELECT(1072,720),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN9S20507C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20507C202v9Ev,
  (VTBL_ENTRY)&_ZN9S20507C203v10Ev,
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C20D1Ev,_ZThn84_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C20D0Ev,_ZThn84_N9S20507C20D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1600,-1096),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1616,-1104),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-2160,-1488),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2160,-1488),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C20D1Ev,_ZTv0_n28_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C20D0Ev,_ZTv0_n28_N9S20507C20D0Ev),
  ABISELECT(-4528,-3152),
  ABISELECT(-4528,-3152),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C20D1Ev,_ZTv0_n12_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C20D0Ev,_ZTv0_n12_N9S20507C20D0Ev),
  ABISELECT(-4656,-3236),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  ABISELECT(-4656,-3236),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev),
  0,
  0,
  0,
  ABISELECT(-5296,-3680),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
};
extern VTBL_ENTRY _ZTV9S20507C20[];
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C17__9S20507C20[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C17__9S20507C20[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn4400_N9S20507C13D1Ev,_ZThn3068_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn4400_N9S20507C13D0Ev,_ZThn3068_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C17__9S20507C20[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C17__9S20507C20[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C17__9S20507C20[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn2032_N9S20507C13D1Ev,_ZThn1404_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn2032_N9S20507C13D0Ev,_ZThn1404_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C17__9S20507C20[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C17__9S20507C20[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C17__9S20507C20[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZThn2032_N9S20507C17D1Ev,_ZThn1404_N9S20507C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
extern void ABISELECT(_ZThn2032_N9S20507C17D0Ev,_ZThn1404_N9S20507C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C17__9S20507C20[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZThn4400_N9S20507C17D1Ev,_ZThn3068_N9S20507C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
extern void ABISELECT(_ZThn4400_N9S20507C17D0Ev,_ZThn3068_N9S20507C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C17__9S20507C20[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C20[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5__9S20507C20[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C20[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C20[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C14__A1__9S20507C20[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZThn2368_N9S20507C14D1Ev,_ZThn1664_N9S20507C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
extern void ABISELECT(_ZThn2368_N9S20507C14D0Ev,_ZThn1664_N9S20507C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C14__9S20507C20[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C13__A1__9S20507C20[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C13__A1__9S20507C20[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C13__A1__9S20507C20[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C13__A1__9S20507C20[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C13__A1__9S20507C20[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTT_ENTRY vtt_S20507C20[] = {
  {&(_ZTV9S20507C20[10]),  10,68},
  {&(_tg__ZTV9S20507C17__9S20507C20[8]),  8,10},
  {&(_tg__ZTV9S20507C139S20507C17__9S20507C20[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C17__9S20507C20[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C17__9S20507C20[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C17__9S20507C20[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C17__9S20507C20[7]),  7,10},
  {&(_tg__ZTV8S20507C5__9S20507C17__9S20507C20[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C17__9S20507C20[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C17__9S20507C20[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20507C17__9S20507C20[3]),  3,5},
  {&(_ZTV9S20507C20[22]),  22,68},
  {&(_ZTV9S20507C20[29]),  29,68},
  {&(_ZTV9S20507C20[33]),  33,68},
  {&(_ZTV9S20507C20[41]),  41,68},
  {&(_ZTV9S20507C20[47]),  47,68},
  {&(_ZTV9S20507C20[58]),  58,68},
  {&(_ZTV9S20507C20[65]),  65,68},
  {&(_tg__ZTV8S20507C5__9S20507C20[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C5__9S20507C20[4]),  4,5},
  {&(_tg__ZTV8S20507C7__9S20507C20[3]),  3,4},
  {&(_tg__ZTV9S20507C14__9S20507C20[5]),  5,8},
  {&(_tg__ZTV8S20507C79S20507C14__A1__9S20507C20[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C14__9S20507C20[3]),  3,5},
  {&(_tg__ZTV9S20507C13__A1__9S20507C20[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C13__A1__9S20507C20[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C13__A1__9S20507C20[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C13__A1__9S20507C20[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C13__A1__9S20507C20[7]),  7,10},
};
extern VTBL_ENTRY _ZTI9S20507C20[];
extern  VTBL_ENTRY _ZTV9S20507C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C20[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S20507C14D0Ev,_ZThn1664_N9S20507C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S20507C14D1Ev,_ZThn1664_N9S20507C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S20507C17D0Ev,_ZThn3068_N9S20507C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S20507C17D1Ev,_ZThn3068_N9S20507C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S20507C17D0Ev,_ZThn1404_N9S20507C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S20507C17D1Ev,_ZThn1404_N9S20507C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S20507C13D0Ev,_ZThn1404_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S20507C13D1Ev,_ZThn1404_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S20507C13D0Ev,_ZThn3068_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S20507C13D1Ev,_ZThn3068_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N9S20507C20D0Ev,_ZThn3236_N9S20507C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N9S20507C20D1Ev,_ZThn3236_N9S20507C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C20D0Ev,_ZTv0_n12_N9S20507C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N9S20507C20D0Ev,_ZThn3152_N9S20507C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C20D1Ev,_ZTv0_n12_N9S20507C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N9S20507C20D1Ev,_ZThn3152_N9S20507C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C20D0Ev,_ZTv0_n28_N9S20507C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N9S20507C20D0Ev,_ZThn1488_N9S20507C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C20D1Ev,_ZTv0_n28_N9S20507C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N9S20507C20D1Ev,_ZThn1488_N9S20507C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C20 = {  "S20507C20", // class name
  bases_S20507C20, 18,
  &(vtc_S20507C20[0]), // expected_vtbl_contents
  &(vtt_S20507C20[0]), // expected_vtt_contents
  ABISELECT(12304,8592), // object size
  NSPAIRA(_ZTI9S20507C20),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20507C20),68, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C20),29, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C19  : S20507C20 , S20507C18 , S20507C17 , S20507C16 , S20507C10 {
  int s20507c19f0[4];
  char s20507c19f1;
  ::S20507C20 s20507c19f2;
  void *s20507c19f3;
  long s20507c19f4[6];
  ::S20507C16 s20507c19f5;
  int s20507c19f6;
  virtual  ~S20507C19(); // _ZN9S20507C19D2Ev
  virtual void  v11(); // _ZN9S20507C193v11Ev
  virtual void  v12(); // _ZN9S20507C193v12Ev
  S20507C19(); // tgen
};
//SIG(-1 S20507C19) C1{ BC2{ BC3{ vd m Fp FD[5] Fp FD} BC4{ VBC5{ m Fi[10] Fp[6]} VBC6{ BC5 Fi FD Fi FC5 FC5 Fi FD[8]} VBC7{ VBC5 VBC8{ BC6 VBC5 v3 FD[2] Fi[2] FD[3]} VBC6 FC9{}} VBC10{ BC5 VBC6 VBC3 BC8 vd FC7 FC8} BC11{ VBC5 VBC3 VBC7 VBC10 FC6 FC5 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC3 FD} VBC11 VBC12{ v4 v5 v6 Fi FC7 Fi Fp FC13{ VBC3 VBC6 VBC8 VBC14{ BC5 VBC6 VBC8 FD} vd FD[9] Fi FC11 Fi FL FC3 FL} Fi FL FD} v7 v8 Fp[5] FD[5] Fi FD} BC15{ VBC5 VBC14 BC13 vd Fp FC10} BC4 BC16{ VBC5 VBC8 BC14 BC13 VBC10 vd Fi Fp Fi:9 Fc FD FC8 FC4 Fc Fs[7] FC9 Fi Fc Fl} BC13 vd v1 v2 Fi[4] Fc FC2 Fp Fl[6] FC16 Fi}


 S20507C19 ::~S20507C19(){ note_dtor("S20507C19", this);}
void  S20507C19 ::v11(){vfunc_called(this, "_ZN9S20507C193v11Ev");}
void  S20507C19 ::v12(){vfunc_called(this, "_ZN9S20507C193v12Ev");}
S20507C19 ::S20507C19(){ note_ctor("S20507C19", this);} // tgen

static void Test_S20507C19()
{
  extern Class_Descriptor cd_S20507C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3804,10644)];
    init_test(&cd_S20507C19, buf);
    S20507C19 *dp, &lv = *(dp=new (buf) S20507C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(60848,42572), "sizeof(S20507C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C19)");
    /*is_ambiguous_... S20507C20::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C20*), 0, "S20507C19");
    /*is_ambiguous_... S20507C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C17*)(S20507C20*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C14*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C13::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C17*)(S20507C20*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C18::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C18*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C17*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C17*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C16::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C16*), ABISELECT(49512,34620), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C17::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C17*)(S20507C20*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C14*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C18*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C17*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*)(S20507C16*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C16*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*), ABISELECT(49600,34684), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(50064,35008), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(50064,35008), "S20507C19");
    check_base_class_offset(lv, (S20507C7*)(S20507C5*), ABISELECT(50048,35004), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(50048,35004), "S20507C19");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C18*), ABISELECT(50048,35004), "S20507C19");
    /*is_ambiguous_... S20507C16::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C16*), ABISELECT(50048,35004), "S20507C19");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*)(S20507C16*), ABISELECT(50048,35004), "S20507C19");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C16*), ABISELECT(50048,35004), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C10*), ABISELECT(50048,35004), "S20507C19");
    check_base_class_offset(lv, (S20507C5*)(S20507C17*)(S20507C20*), ABISELECT(50032,34996), "S20507C19");
    check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C17*)(S20507C20*), ABISELECT(50032,34996), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*), ABISELECT(50032,34996), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C17*), ABISELECT(50032,34996), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C17*), ABISELECT(50032,34996), "S20507C19");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C14*), ABISELECT(51136,35772), "S20507C19");
    check_base_class_offset(lv, (S20507C11*)(S20507C14*), ABISELECT(52960,37052), "S20507C19");
    check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C17*)(S20507C20*), ABISELECT(52960,37052), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*), ABISELECT(52960,37052), "S20507C19");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C18*), ABISELECT(52960,37052), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C17*), ABISELECT(52960,37052), "S20507C19");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C16*), ABISELECT(52960,37052), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C10*), ABISELECT(52960,37052), "S20507C19");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(50608,35392), "S20507C19");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(50608,35392), "S20507C19");
    check_base_class_offset(lv, (S20507C7*)(S20507C14*), ABISELECT(50592,35388), "S20507C19");
    check_base_class_offset(lv, (S20507C14*)(S20507C17*)(S20507C20*), ABISELECT(50592,35388), "S20507C19");
    check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C17*)(S20507C20*), ABISELECT(50592,35388), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*), ABISELECT(50592,35388), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C17*), ABISELECT(50592,35388), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C17*), ABISELECT(50592,35388), "S20507C19");
    check_base_class_offset(lv, (S20507C14*)(S20507C16*), ABISELECT(50592,35388), "S20507C19");
    check_base_class_offset(lv, (S20507C13*)(S20507C17*)(S20507C20*), ABISELECT(128,84), "S20507C19");
    check_base_class_offset(lv, (S20507C17*)(S20507C20*), ABISELECT(128,84), "S20507C19");
    /*is_ambiguous_... S20507C20::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C13*)(S20507C20*), ABISELECT(53088,37136), "S20507C19");
    check_base_class_offset(lv, (S20507C4*)(S20507C20*), ABISELECT(53728,37580), "S20507C19");
    check_base_class_offset(lv, (S20507C20*), 0, "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(60744,42496), "S20507C19");
    check_base_class_offset(lv, (S20507C12*)(S20507C18*), ABISELECT(60736,42492), "S20507C19");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C18*), ABISELECT(60736,42492), "S20507C19");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C16*), ABISELECT(60736,42492), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C10*), ABISELECT(60736,42492), "S20507C19");
    check_base_class_offset(lv, (S20507C10*)(S20507C18*), ABISELECT(1072,720), "S20507C19");
    check_base_class_offset(lv, (S20507C18*), ABISELECT(1072,720), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C13*)(S20507C17*), ABISELECT(8640,6028), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C17*), ABISELECT(8640,6028), "S20507C19");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*)(S20507C16*), ABISELECT(9432,6572), "S20507C19");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C16*), ABISELECT(9424,6568), "S20507C19");
    check_base_class_offset(lv, (S20507C10*)(S20507C16*), ABISELECT(9536,6648), "S20507C19");
    check_base_class_offset(lv, (S20507C16*), ABISELECT(9424,6568), "S20507C19");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C10*), ABISELECT(19168,13388), "S20507C19");
    check_field_offset(lv, s20507c19f0, ABISELECT(23704,16568), "S20507C19.s20507c19f0");
    check_field_offset(lv, s20507c19f1, ABISELECT(23720,16584), "S20507C19.s20507c19f1");
    check_field_offset(lv, s20507c19f2, ABISELECT(23728,16588), "S20507C19.s20507c19f2");
    check_field_offset(lv, s20507c19f3, ABISELECT(36032,25180), "S20507C19.s20507c19f3");
    check_field_offset(lv, s20507c19f4, ABISELECT(36040,25184), "S20507C19.s20507c19f4");
    check_field_offset(lv, s20507c19f5, ABISELECT(36096,25208), "S20507C19.s20507c19f5");
    check_field_offset(lv, s20507c19f6, ABISELECT(49504,34616), "S20507C19.s20507c19f6");
    test_class_info(&lv, &cd_S20507C19);
    dp->~S20507C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C19(Test_S20507C19, "S20507C19", ABISELECT(60848,42572));

#else // __cplusplus

extern void _ZN9S20507C19C1Ev();
extern void _ZN9S20507C19D2Ev();
Name_Map name_map_S20507C19[] = {
  NSPAIR(_ZN9S20507C19C1Ev),
  NSPAIR(_ZN9S20507C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C14;
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C17;
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C4;
extern VTBL_ENTRY _ZTI8S20507C4[];
extern  VTBL_ENTRY _ZTV8S20507C4[];
extern Class_Descriptor cd_S20507C20;
extern VTBL_ENTRY _ZTI9S20507C20[];
extern  VTBL_ENTRY _ZTV9S20507C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C20[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C18;
extern VTBL_ENTRY _ZTI9S20507C18[];
extern  VTBL_ENTRY _ZTV9S20507C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C18[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C17;
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C16;
extern VTBL_ENTRY _ZTI9S20507C16[];
extern  VTBL_ENTRY _ZTV9S20507C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C16[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
static Base_Class bases_S20507C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(49512,34620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(49600,34684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(49600,34684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(50064,35008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(50064,35008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(50048,35004), //bcp->offset
    79, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C5,    ABISELECT(50032,34996), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(51136,35772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(52960,37052), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(50608,35392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(50608,35392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(50592,35388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20507C14,    ABISELECT(50592,35388), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C13,    ABISELECT(128,84), //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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20507C17,    ABISELECT(128,84), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20507C13,    ABISELECT(53088,37136), //bcp->offset
    99, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20507C4,    ABISELECT(53728,37580), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20507C20,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(60744,42496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(60736,42492), //bcp->offset
    118, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20507C10,    ABISELECT(1072,720), //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
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20507C18,    ABISELECT(1072,720), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C13,    ABISELECT(8640,6028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20507C17,    ABISELECT(8640,6028), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(9432,6572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(9424,6568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20507C10,    ABISELECT(9536,6648), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20507C16,    ABISELECT(9424,6568), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C10,    ABISELECT(19168,13388), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20507C19[];
extern void _ZN9S20507C19D1Ev();
extern void _ZN9S20507C19D0Ev();
extern void _ZN9S20507C202v9Ev();
extern void _ZN9S20507C203v10Ev();
extern void _ZN9S20507C193v11Ev();
extern void _ZN9S20507C193v12Ev();
extern void ABISELECT(_ZThn128_N9S20507C19D1Ev,_ZThn84_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn128_N9S20507C19D0Ev,_ZThn84_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn1072_N9S20507C19D1Ev,_ZThn720_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn1072_N9S20507C19D0Ev,_ZThn720_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn8640_N9S20507C19D1Ev,_ZThn6028_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn8640_N9S20507C19D0Ev,_ZThn6028_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn9424_N9S20507C19D1Ev,_ZThn6568_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn9424_N9S20507C19D0Ev,_ZThn6568_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn9536_N9S20507C19D1Ev,_ZThn6648_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn9536_N9S20507C19D0Ev,_ZThn6648_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn19168_N9S20507C19D1Ev,_ZThn13388_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn19168_N9S20507C19D0Ev,_ZThn13388_N9S20507C19D0Ev)();
extern void _ZN8S20507C72v4Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C19D1Ev,_ZTv0_n28_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn50592_N9S20507C19D1Ev,_ZThn35388_N9S20507C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C19D0Ev,_ZTv0_n28_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn50592_N9S20507C19D0Ev,_ZThn35388_N9S20507C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C19D1Ev,_ZTv0_n12_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn52960_N9S20507C19D1Ev,_ZThn37052_N9S20507C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C19D0Ev,_ZTv0_n12_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn52960_N9S20507C19D0Ev,_ZThn37052_N9S20507C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C19D1Ev,_ZTv0_n36_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn53088_N9S20507C19D1Ev,_ZThn37136_N9S20507C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C19D0Ev,_ZTv0_n36_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn53088_N9S20507C19D0Ev,_ZThn37136_N9S20507C19D0Ev)() __attribute__((weak));
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
static  VTBL_ENTRY vtc_S20507C19[] = {
  ABISELECT(60736,42492),
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&_ZN9S20507C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C19D0Ev,
  (VTBL_ENTRY)&_ZN9S20507C202v9Ev,
  (VTBL_ENTRY)&_ZN9S20507C203v10Ev,
  (VTBL_ENTRY)&_ZN9S20507C193v11Ev,
  (VTBL_ENTRY)&_ZN9S20507C193v12Ev,
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C19D1Ev,_ZThn84_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C19D0Ev,_ZThn84_N9S20507C19D0Ev),
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  ABISELECT(-1072,-720),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S20507C19D1Ev,_ZThn720_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S20507C19D0Ev,_ZThn720_N9S20507C19D0Ev),
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  ABISELECT(-8640,-6028),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N9S20507C19D1Ev,_ZThn6028_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N9S20507C19D0Ev,_ZThn6028_N9S20507C19D0Ev),
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  ABISELECT(-9424,-6568),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N9S20507C19D1Ev,_ZThn6568_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N9S20507C19D0Ev,_ZThn6568_N9S20507C19D0Ev),
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-9536,-6648),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N9S20507C19D1Ev,_ZThn6648_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N9S20507C19D0Ev,_ZThn6648_N9S20507C19D0Ev),
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  ABISELECT(-19168,-13388),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N9S20507C19D1Ev,_ZThn13388_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N9S20507C19D0Ev,_ZThn13388_N9S20507C19D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50032,-34996),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50048,-35004),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-50592,-35388),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50592,-35388),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C19D1Ev,_ZTv0_n28_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C19D0Ev,_ZTv0_n28_N9S20507C19D0Ev),
  ABISELECT(-52960,-37052),
  ABISELECT(-52960,-37052),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C19D1Ev,_ZTv0_n12_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C19D0Ev,_ZTv0_n12_N9S20507C19D0Ev),
  ABISELECT(-53088,-37136),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53088,-37136),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C19D1Ev,_ZTv0_n36_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C19D0Ev,_ZTv0_n36_N9S20507C19D0Ev),
  0,
  0,
  0,
  ABISELECT(-53728,-37580),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-60736,-42492),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
};
extern VTBL_ENTRY _ZTV9S20507C19[];
extern void _ZN9S20507C20D1Ev();
extern void _ZN9S20507C20D0Ev();
extern void _ZN9S20507C202v9Ev();
extern void _ZN9S20507C203v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C20__9S20507C19[] = {
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN9S20507C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20507C202v9Ev,
  (VTBL_ENTRY)&_ZN9S20507C203v10Ev,
};
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C179S20507C20__9S20507C19[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C179S20507C20__9S20507C19[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn52832_N9S20507C13D1Ev,_ZThn36968_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn52832_N9S20507C13D0Ev,_ZThn36968_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C179S20507C20__9S20507C19[] = {
  ABISELECT(-52832,-36968),
  ABISELECT(-52832,-36968),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C179S20507C20__9S20507C19[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-49904,-34912),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C179S20507C20__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-49920,-34920),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn50464_N9S20507C13D1Ev,_ZThn35304_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn50464_N9S20507C13D0Ev,_ZThn35304_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C179S20507C20__9S20507C19[] = {
  ABISELECT(-50464,-35304),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50464,-35304),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C179S20507C20__9S20507C19[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-49904,-34912),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C179S20507C20__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-49920,-34920),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZThn50464_N9S20507C17D1Ev,_ZThn35304_N9S20507C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
extern void ABISELECT(_ZThn50464_N9S20507C17D0Ev,_ZThn35304_N9S20507C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C179S20507C20__9S20507C19[] = {
  ABISELECT(-50464,-35304),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50464,-35304),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZThn52832_N9S20507C17D1Ev,_ZThn36968_N9S20507C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
extern void ABISELECT(_ZThn52832_N9S20507C17D0Ev,_ZThn36968_N9S20507C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C179S20507C20__9S20507C19[] = {
  ABISELECT(-52832,-36968),
  ABISELECT(-52832,-36968),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZThn128_N9S20507C20D1Ev,_ZThn84_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn128_N9S20507C20D0Ev,_ZThn84_N9S20507C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C17__9S20507C20__9S20507C19[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C20D1Ev,_ZThn84_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C20D0Ev,_ZThn84_N9S20507C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C20__9S20507C19[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50032,-34996),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C20__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50048,-35004),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C20D1Ev,_ZTv0_n28_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn50592_N9S20507C20D1Ev,_ZThn35388_N9S20507C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C20D0Ev,_ZTv0_n28_N9S20507C20D0Ev)();
extern void ABISELECT(_ZThn50592_N9S20507C20D0Ev,_ZThn35388_N9S20507C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C20__9S20507C19[] = {
  ABISELECT(-50592,-35388),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50592,-35388),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C20D1Ev,_ZTv0_n28_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C20D0Ev,_ZTv0_n28_N9S20507C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C20D1Ev,_ZTv0_n12_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn52960_N9S20507C20D1Ev,_ZThn37052_N9S20507C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C20D0Ev,_ZTv0_n12_N9S20507C20D0Ev)();
extern void ABISELECT(_ZThn52960_N9S20507C20D0Ev,_ZThn37052_N9S20507C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__9S20507C20__9S20507C19[] = {
  ABISELECT(-52960,-37052),
  ABISELECT(-52960,-37052),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C20D1Ev,_ZTv0_n12_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C20D0Ev,_ZTv0_n12_N9S20507C20D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn53088_N9S20507C20D1Ev,_ZThn37136_N9S20507C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev)();
extern void ABISELECT(_ZThn53088_N9S20507C20D0Ev,_ZThn37136_N9S20507C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C13__A1__9S20507C20__9S20507C19[] = {
  ABISELECT(-53088,-37136),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53088,-37136),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev),
};
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C4__9S20507C20__9S20507C19[] = {
  0,
  0,
  0,
  ABISELECT(-53728,-37580),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
};
extern void _ZN9S20507C18D1Ev();
extern void _ZN9S20507C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C18__9S20507C19[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&_ZN9S20507C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C18D0Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C18__9S20507C19[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn51888_N9S20507C10D1Ev,_ZThn36332_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn51888_N9S20507C10D0Ev,_ZThn36332_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C18__9S20507C19[] = {
  ABISELECT(-51888,-36332),
  ABISELECT(-51888,-36332),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C18__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-48976,-34284),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C18__9S20507C19[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-59664,-41772),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C18__9S20507C19[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-59664,-41772),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C18__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-48976,-34284),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C18D1Ev,_ZTv0_n12_N9S20507C18D1Ev)();
extern void ABISELECT(_ZThn51888_N9S20507C18D1Ev,_ZThn36332_N9S20507C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C18D0Ev,_ZTv0_n12_N9S20507C18D0Ev)();
extern void ABISELECT(_ZThn51888_N9S20507C18D0Ev,_ZThn36332_N9S20507C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C18__9S20507C19[] = {
  ABISELECT(-51888,-36332),
  ABISELECT(-51888,-36332),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C18D1Ev,_ZTv0_n12_N9S20507C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C18D0Ev,_ZTv0_n12_N9S20507C18D0Ev),
};
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C17__A1__9S20507C19[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C17__A2__9S20507C19[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn44320_N9S20507C13D1Ev,_ZThn31024_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn44320_N9S20507C13D0Ev,_ZThn31024_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C17__A2__9S20507C19[] = {
  ABISELECT(-44320,-31024),
  ABISELECT(-44320,-31024),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C17__A2__9S20507C19[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-41392,-28968),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C17__A2__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-41408,-28976),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn41952_N9S20507C13D1Ev,_ZThn29360_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn41952_N9S20507C13D0Ev,_ZThn29360_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C17__A2__9S20507C19[] = {
  ABISELECT(-41952,-29360),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41952,-29360),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C17__A1__9S20507C19[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-41392,-28968),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C17__A1__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-41408,-28976),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZThn41952_N9S20507C17D1Ev,_ZThn29360_N9S20507C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
extern void ABISELECT(_ZThn41952_N9S20507C17D0Ev,_ZThn29360_N9S20507C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C17__A1__9S20507C19[] = {
  ABISELECT(-41952,-29360),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41952,-29360),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZThn44320_N9S20507C17D1Ev,_ZThn31024_N9S20507C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
extern void ABISELECT(_ZThn44320_N9S20507C17D0Ev,_ZThn31024_N9S20507C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C17__A1__9S20507C19[] = {
  ABISELECT(-44320,-31024),
  ABISELECT(-44320,-31024),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
extern void _ZN9S20507C16D1Ev();
extern void _ZN9S20507C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C16__9S20507C19[] = {
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN9S20507C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C129S20507C16__A1__9S20507C19[] = {
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C129S20507C16__A1__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40624,-28436),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__A1__9S20507C19[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn43424_N9S20507C10D1Ev,_ZThn30404_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn43424_N9S20507C10D0Ev,_ZThn30404_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C16__A1__9S20507C19[] = {
  ABISELECT(-43424,-30404),
  ABISELECT(-43424,-30404),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C16__A1__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40512,-28356),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C16__A1__9S20507C19[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-51200,-35844),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C16__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40624,-28436),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C16__9S20507C19[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn43536_N9S20507C16D1Ev,_ZThn30484_N9S20507C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev)();
extern void ABISELECT(_ZThn43536_N9S20507C16D0Ev,_ZThn30484_N9S20507C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C16__9S20507C19[] = {
  ABISELECT(-43536,-30484),
  ABISELECT(-43536,-30484),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C16__9S20507C19[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-51312,-35924),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn41168_N9S20507C16D1Ev,_ZThn28820_N9S20507C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev)();
extern void ABISELECT(_ZThn41168_N9S20507C16D0Ev,_ZThn28820_N9S20507C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C16__9S20507C19[] = {
  ABISELECT(-41168,-28820),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41168,-28820),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev),
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C10__A2__9S20507C19[] = {
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn33792_N9S20507C10D1Ev,_ZThn23664_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn33792_N9S20507C10D0Ev,_ZThn23664_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C10__A2__9S20507C19[] = {
  ABISELECT(-33792,-23664),
  ABISELECT(-33792,-23664),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C10__A2__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-30880,-21616),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C10__A2__9S20507C19[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-41568,-29104),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C19[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C19[] = {
  ABISELECT(-536,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C19[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C14__A1__9S20507C19[] = {
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZThn2368_N9S20507C14D1Ev,_ZThn1664_N9S20507C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
extern void ABISELECT(_ZThn2368_N9S20507C14D0Ev,_ZThn1664_N9S20507C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C14__9S20507C19[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C13__A1__9S20507C19[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C13__A1__9S20507C19[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C13__A1__9S20507C19[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C13__A1__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C13__A1__9S20507C19[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C19[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__9S20507C19[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(10688,7488),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTT_ENTRY vtt_S20507C19[] = {
  {&(_ZTV9S20507C19[11]),  11,123},
  {&(_tg__ZTV9S20507C20__9S20507C19[10]),  10,14},
  {&(_tg__ZTV9S20507C179S20507C20__9S20507C19[8]),  8,10},
  {&(_tg__ZTV9S20507C139S20507C179S20507C20__9S20507C19[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C179S20507C20__9S20507C19[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C179S20507C20__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C179S20507C20__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C179S20507C20__9S20507C19[7]),  7,10},
  {&(_tg__ZTV8S20507C5__9S20507C179S20507C20__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C179S20507C20__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C179S20507C20__9S20507C19[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20507C179S20507C20__9S20507C19[3]),  3,5},
  {&(_tg__ZTV9S20507C17__9S20507C20__9S20507C19[8]),  8,10},
  {&(_tg__ZTV8S20507C5__9S20507C20__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C20__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C20__9S20507C19[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__9S20507C20__9S20507C19[3]),  3,5},
  {&(_tg__ZTV9S20507C13__A1__9S20507C20__9S20507C19[9]),  9,11},
  {&(_tg__ZTV8S20507C4__9S20507C20__9S20507C19[5]),  5,8},
  {&(_tg__ZTV9S20507C18__9S20507C19[7]),  7,9},
  {&(_tg__ZTV9S20507C109S20507C18__9S20507C19[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C18__9S20507C19[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C18__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C18__9S20507C19[5]),  5,5},
  {&(_tg__ZTV9S20507C12__9S20507C18__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C18__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C11__9S20507C18__9S20507C19[3]),  3,5},
  {&(_tg__ZTV9S20507C17__A1__9S20507C19[8]),  8,10},
  {&(_tg__ZTV9S20507C139S20507C17__A2__9S20507C19[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C17__A2__9S20507C19[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C17__A2__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C17__A2__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C17__A2__9S20507C19[7]),  7,10},
  {&(_tg__ZTV8S20507C5__9S20507C17__A1__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C17__A1__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C17__A1__9S20507C19[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20507C17__A1__9S20507C19[3]),  3,5},
  {&(_tg__ZTV9S20507C16__9S20507C19[8]),  8,10},
  {&(_tg__ZTV9S20507C129S20507C16__A1__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C129S20507C16__A1__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C109S20507C16__A1__9S20507C19[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C16__A1__9S20507C19[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C16__A1__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C16__A1__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C16__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C10__9S20507C16__9S20507C19[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C16__9S20507C19[3]),  3,5},
  {&(_tg__ZTV9S20507C12__A1__9S20507C16__9S20507C19[5]),  5,5},
  {&(_tg__ZTV9S20507C14__9S20507C16__9S20507C19[7]),  7,10},
  {&(_tg__ZTV9S20507C10__A2__9S20507C19[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C10__A2__9S20507C19[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C10__A2__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C10__A2__9S20507C19[5]),  5,5},
  {&(_ZTV9S20507C19[25]),  25,123},
  {&(_ZTV9S20507C19[79]),  79,123},
  {&(_ZTV9S20507C19[83]),  83,123},
  {&(_ZTV9S20507C19[91]),  91,123},
  {&(_ZTV9S20507C19[97]),  97,123},
  {&(_ZTV9S20507C19[108]),  108,123},
  {&(_ZTV9S20507C19[115]),  115,123},
  {&(_ZTV9S20507C19[34]),  34,123},
  {&(_ZTV9S20507C19[123]),  123,123},
  {&(_ZTV9S20507C19[44]),  44,123},
  {&(_ZTV9S20507C19[54]),  54,123},
  {&(_ZTV9S20507C19[63]),  63,123},
  {&(_ZTV9S20507C19[72]),  72,123},
  {&(_tg__ZTV8S20507C5__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C5__9S20507C19[4]),  4,5},
  {&(_tg__ZTV8S20507C7__9S20507C19[3]),  3,4},
  {&(_tg__ZTV9S20507C14__9S20507C19[5]),  5,8},
  {&(_tg__ZTV8S20507C79S20507C14__A1__9S20507C19[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C14__9S20507C19[3]),  3,5},
  {&(_tg__ZTV9S20507C13__A1__9S20507C19[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C13__A1__9S20507C19[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C13__A1__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C13__A1__9S20507C19[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C13__A1__9S20507C19[7]),  7,10},
  {&(_tg__ZTV9S20507C12__9S20507C19[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__9S20507C19[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20507C19[];
extern  VTBL_ENTRY _ZTV9S20507C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C19[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S20507C14D0Ev,_ZThn1664_N9S20507C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S20507C14D1Ev,_ZThn1664_N9S20507C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41168_N9S20507C16D0Ev,_ZThn28820_N9S20507C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41168_N9S20507C16D1Ev,_ZThn28820_N9S20507C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43536_N9S20507C16D0Ev,_ZThn30484_N9S20507C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43536_N9S20507C16D1Ev,_ZThn30484_N9S20507C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C18D0Ev,_ZTv0_n12_N9S20507C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S20507C18D0Ev,_ZThn36332_N9S20507C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C18D1Ev,_ZTv0_n12_N9S20507C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S20507C18D1Ev,_ZThn36332_N9S20507C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S20507C10D0Ev,_ZThn23664_N9S20507C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn43424_N9S20507C10D0Ev,_ZThn30404_N9S20507C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S20507C10D0Ev,_ZThn36332_N9S20507C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S20507C10D1Ev,_ZThn23664_N9S20507C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn43424_N9S20507C10D1Ev,_ZThn30404_N9S20507C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S20507C10D1Ev,_ZThn36332_N9S20507C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N9S20507C20D0Ev,_ZThn37136_N9S20507C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N9S20507C20D1Ev,_ZThn37136_N9S20507C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C20D0Ev,_ZTv0_n12_N9S20507C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N9S20507C20D0Ev,_ZThn37052_N9S20507C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C20D1Ev,_ZTv0_n12_N9S20507C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N9S20507C20D1Ev,_ZThn37052_N9S20507C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C20D0Ev,_ZTv0_n28_N9S20507C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N9S20507C20D0Ev,_ZThn35388_N9S20507C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C20D1Ev,_ZTv0_n28_N9S20507C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N9S20507C20D1Ev,_ZThn35388_N9S20507C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S20507C17D0Ev,_ZThn31024_N9S20507C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S20507C17D0Ev,_ZThn36968_N9S20507C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S20507C17D1Ev,_ZThn31024_N9S20507C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S20507C17D1Ev,_ZThn36968_N9S20507C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S20507C17D0Ev,_ZThn29360_N9S20507C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S20507C17D0Ev,_ZThn35304_N9S20507C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S20507C17D1Ev,_ZThn29360_N9S20507C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S20507C17D1Ev,_ZThn35304_N9S20507C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S20507C13D0Ev,_ZThn29360_N9S20507C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S20507C13D0Ev,_ZThn35304_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S20507C13D1Ev,_ZThn29360_N9S20507C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S20507C13D1Ev,_ZThn35304_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S20507C13D0Ev,_ZThn31024_N9S20507C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S20507C13D0Ev,_ZThn36968_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S20507C13D1Ev,_ZThn31024_N9S20507C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S20507C13D1Ev,_ZThn36968_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C19D0Ev,_ZTv0_n36_N9S20507C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N9S20507C19D0Ev,_ZThn37136_N9S20507C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C19D1Ev,_ZTv0_n36_N9S20507C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N9S20507C19D1Ev,_ZThn37136_N9S20507C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C19D0Ev,_ZTv0_n12_N9S20507C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N9S20507C19D0Ev,_ZThn37052_N9S20507C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C19D1Ev,_ZTv0_n12_N9S20507C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N9S20507C19D1Ev,_ZThn37052_N9S20507C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C19D0Ev,_ZTv0_n28_N9S20507C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N9S20507C19D0Ev,_ZThn35388_N9S20507C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C19D1Ev,_ZTv0_n28_N9S20507C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N9S20507C19D1Ev,_ZThn35388_N9S20507C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C19 = {  "S20507C19", // class name
  bases_S20507C19, 30,
  &(vtc_S20507C19[0]), // expected_vtbl_contents
  &(vtt_S20507C19[0]), // expected_vtt_contents
  ABISELECT(60848,42572), // object size
  NSPAIRA(_ZTI9S20507C19),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20507C19),123, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20507C19),79, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20507C1  : virtual S20507C2 , S20507C4 , virtual S20507C19 {
  long double s20507c1f0;
  ~S20507C1(); // tgen
  S20507C1(); // tgen
};
//SIG(1 S20507C1) C1{ VBC2{ VBC3{ BC4{ v1 v2 v3 Fi FC5{ VBC6{ m Fi[10] Fp[6]} VBC7{ BC8{ BC6 Fi FD Fi FC6 FC6 Fi FD[8]} VBC6 v4 FD[2] Fi[2] FD[3]} VBC8 FC9{}} Fi Fp FC10{ VBC11{ vd m Fp FD[5] Fp FD} VBC8 VBC7 VBC12{ BC6 VBC8 VBC7 FD} vd FD[9] Fi FC13{ VBC6 VBC11 VBC5 VBC14{ BC6 VBC8 VBC11 BC7 vd FC5 FC7} FC8 FC6 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC11 FL} Fi FL FD} VBC11 VBC12 BC10 BC5 vd v5 Fp Fi FL Fi FC13 Fp[10] Fi FD[4]} VBC15{ VBC11 BC13 BC7 VBC16{ VBC6 VBC7 BC12 BC10 VBC14 vd Fi Fp Fi:9 Fc FD FC7 FC17{ VBC6 VBC8 VBC5 VBC14 BC13 vd FC11 FD} Fc Fs[7] FC9 Fi Fc Fl} VBC17 vd v6 v7 v8 FC7 Fc FD Fi FD FC5} BC16 Fp Fc[2] Fp FC18{ VBC6 VBC12 BC10 vd Fp FC14}} BC4 VBC19{ BC20{ BC11 BC17 VBC13 VBC4 v9 v10 Fp[5] FD[5] Fi FD} BC18 BC17 BC16 BC10 vd v11 v12 Fi[4] Fc FC20 Fp Fl[6] FC16 Fi} FD}


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

static void Test_S20507C1()
{
  extern Class_Descriptor cd_S20507C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7251,20293)];
    init_test(&cd_S20507C1, buf);
    S20507C1 *dp, &lv = *(dp=new (buf) S20507C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(116000,81168), "sizeof(S20507C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20507C1)");
    check_base_class_offset(lv, (S20507C4*)(S20507C3*), ABISELECT(25664,17988), "S20507C1");
    check_base_class_offset(lv, (S20507C11*)(S20507C3*), ABISELECT(41632,29160), "S20507C1");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C3*), ABISELECT(41632,29160), "S20507C1");
    check_base_class_offset(lv, (S20507C11*)(S20507C15*), ABISELECT(41632,29160), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C15*), ABISELECT(41632,29160), "S20507C1");
    check_base_class_offset(lv, (S20507C11*)(S20507C14*), ABISELECT(41632,29160), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C16*), ABISELECT(41632,29160), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C17*), ABISELECT(41632,29160), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C16*)(S20507C2*), ABISELECT(41632,29160), "S20507C1");
    check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(41632,29160), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*), ABISELECT(41632,29160), "S20507C1");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C18*)(S20507C19*), ABISELECT(41632,29160), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C13*)(S20507C17*)(S20507C19*), ABISELECT(41632,29160), "S20507C1");
    check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C16*)(S20507C19*), ABISELECT(41632,29160), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C10*)(S20507C19*), ABISELECT(41632,29160), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*), ABISELECT(41768,29248), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C3*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C5::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*)(S20507C3*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C5 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C5*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C14::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C14*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*)(S20507C16*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C16*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C17*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*)(S20507C16*)(S20507C2*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C16*)(S20507C2*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C17::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C18*)(S20507C19*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C17*)(S20507C19*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C12*)(S20507C16*)(S20507C19*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C10::S20507C8 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C16*)(S20507C19*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C10*)(S20507C19*), ABISELECT(41872,29324), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*), ABISELECT(42320,29640), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*), ABISELECT(42320,29640), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*)(S20507C3*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C15*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C5*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C14*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C7*)(S20507C15*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C16*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C17*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C17*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C16*)(S20507C2*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C13::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C18::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C18*)(S20507C19*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C17*)(S20507C19*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C13*)(S20507C17*)(S20507C19*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C16::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C16*)(S20507C19*), ABISELECT(42848,30020), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*), ABISELECT(42304,29636), "S20507C1");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C3*), ABISELECT(42304,29636), "S20507C1");
    check_base_class_offset(lv, (S20507C7*)(S20507C5*)(S20507C3*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C5 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C5*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C16*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*)(S20507C16*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C16*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C16*)(S20507C2*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*)(S20507C16*)(S20507C2*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C16*)(S20507C2*), ABISELECT(42304,29636), "S20507C1");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C18*)(S20507C19*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C16::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C16*)(S20507C19*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C12*)(S20507C16*)(S20507C19*), ABISELECT(42304,29636), "S20507C1");
    check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C16*)(S20507C19*), ABISELECT(42304,29636), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C10*)(S20507C19*), ABISELECT(42304,29636), "S20507C1");
    check_base_class_offset(lv, (S20507C12*)(S20507C3*), ABISELECT(41760,29244), "S20507C1");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C3*), ABISELECT(41760,29244), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C16*), ABISELECT(41760,29244), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C16*)(S20507C2*), ABISELECT(41760,29244), "S20507C1");
    check_base_class_offset(lv, (S20507C12*)(S20507C18*)(S20507C19*), ABISELECT(41760,29244), "S20507C1");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C18*)(S20507C19*), ABISELECT(41760,29244), "S20507C1");
    check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C16*)(S20507C19*), ABISELECT(41760,29244), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C10*)(S20507C19*), ABISELECT(41760,29244), "S20507C1");
    check_base_class_offset(lv, (S20507C10*)(S20507C3*), ABISELECT(32672,22900), "S20507C1");
    check_base_class_offset(lv, (S20507C5*)(S20507C3*), ABISELECT(37208,26080), "S20507C1");
    check_base_class_offset(lv, (S20507C3*)(S20507C2*), ABISELECT(25664,17988), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C15*), ABISELECT(45920,32160), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C17*), ABISELECT(45920,32160), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C17*), ABISELECT(45920,32160), "S20507C1");
    check_base_class_offset(lv, (S20507C5*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(45920,32160), "S20507C1");
    check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(45920,32160), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*), ABISELECT(45920,32160), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C17*)(S20507C19*), ABISELECT(45920,32160), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C5*)(S20507C13*)(S20507C17*)(S20507C19*), ABISELECT(45920,32160), "S20507C1");
    /*is_ambiguous_... S20507C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C14*), ABISELECT(46480,32552), "S20507C1");
    check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(45952,32172), "S20507C1");
    check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C14*), ABISELECT(45952,32172), "S20507C1");
    check_base_class_offset(lv, (S20507C7*)(S20507C14*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C15*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C16*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C17*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C17*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C16*)(S20507C2*), ABISELECT(45936,32168), "S20507C1");
    check_base_class_offset(lv, (S20507C14*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(45936,32168), "S20507C1");
    check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C17*)(S20507C19*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C14*)(S20507C13*)(S20507C17*)(S20507C19*), ABISELECT(45936,32168), "S20507C1");
    check_base_class_offset(lv, (S20507C14*)(S20507C16*)(S20507C19*), ABISELECT(45936,32168), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C13*)(S20507C15*), ABISELECT(42944,30084), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C8*)(S20507C7*)(S20507C15*), ABISELECT(43600,30532), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C8*)(S20507C7*)(S20507C15*), ABISELECT(43600,30532), "S20507C1");
    /*is_ambiguous_... S20507C15::S20507C7 */ AMB_check_base_class_offset(lv, (S20507C7*)(S20507C15*), ABISELECT(43584,30528), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*)(S20507C16*), ABISELECT(48312,33836), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C16*), ABISELECT(48304,33832), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C10*)(S20507C16*), ABISELECT(48416,33912), "S20507C1");
    check_base_class_offset(lv, (S20507C16*)(S20507C15*), ABISELECT(48304,33832), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C13*)(S20507C17*), ABISELECT(58048,40652), "S20507C1");
    check_base_class_offset(lv, (S20507C17*)(S20507C15*), ABISELECT(58048,40652), "S20507C1");
    check_base_class_offset(lv, (S20507C15*)(S20507C2*), ABISELECT(42944,30084), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*)(S20507C16*)(S20507C2*), ABISELECT(7032,4928), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C16*)(S20507C2*), ABISELECT(7024,4924), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C10*)(S20507C16*)(S20507C2*), ABISELECT(7136,5004), "S20507C1");
    /*is_ambiguous_... S20507C2::S20507C16 */ AMB_check_base_class_offset(lv, (S20507C16*)(S20507C2*), ABISELECT(7024,4924), "S20507C1");
    check_base_class_offset(lv, (S20507C2*), ABISELECT(7024,4924), "S20507C1");
    /*is_ambiguous_... S20507C1::S20507C4 */ AMB_check_base_class_offset(lv, (S20507C4*), 0, "S20507C1");
    /*is_ambiguous_... S20507C20::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20507C20*)(S20507C19*), ABISELECT(58832,41192), "S20507C1");
    check_base_class_offset(lv, (S20507C13*)(S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(58960,41276), "S20507C1");
    check_base_class_offset(lv, (S20507C17*)(S20507C20*)(S20507C19*), ABISELECT(58960,41276), "S20507C1");
    /*is_ambiguous_... S20507C20::S20507C13 */ AMB_check_base_class_offset(lv, (S20507C13*)(S20507C20*)(S20507C19*), ABISELECT(108352,75812), "S20507C1");
    check_base_class_offset(lv, (S20507C4*)(S20507C20*)(S20507C19*), ABISELECT(108992,76256), "S20507C1");
    check_base_class_offset(lv, (S20507C20*)(S20507C19*), ABISELECT(58832,41192), "S20507C1");
    check_base_class_offset(lv, (S20507C10*)(S20507C18*)(S20507C19*), ABISELECT(59904,41912), "S20507C1");
    check_base_class_offset(lv, (S20507C18*)(S20507C19*), ABISELECT(59904,41912), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C13*)(S20507C17*)(S20507C19*), ABISELECT(67472,47220), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C17 */ AMB_check_base_class_offset(lv, (S20507C17*)(S20507C19*), ABISELECT(67472,47220), "S20507C1");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20507C12*)(S20507C16*)(S20507C19*), ABISELECT(68264,47764), "S20507C1");
    /*is_ambiguous_... S20507C16::S20507C12 */ AMB_check_base_class_offset(lv, (S20507C12*)(S20507C16*)(S20507C19*), ABISELECT(68256,47760), "S20507C1");
    check_base_class_offset(lv, (S20507C10*)(S20507C16*)(S20507C19*), ABISELECT(68368,47840), "S20507C1");
    check_base_class_offset(lv, (S20507C16*)(S20507C19*), ABISELECT(68256,47760), "S20507C1");
    /*is_ambiguous_... S20507C19::S20507C10 */ AMB_check_base_class_offset(lv, (S20507C10*)(S20507C19*), ABISELECT(78000,54580), "S20507C1");
    check_base_class_offset(lv, (S20507C19*), ABISELECT(58832,41192), "S20507C1");
    check_field_offset(lv, s20507c1f0, ABISELECT(7008,4912), "S20507C1.s20507c1f0");
    test_class_info(&lv, &cd_S20507C1);
    dp->~S20507C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20507C1(Test_S20507C1, "S20507C1", ABISELECT(116000,81168));

#else // __cplusplus

extern void _ZN8S20507C1C1Ev();
extern void _ZN8S20507C1D1Ev();
Name_Map name_map_S20507C1[] = {
  NSPAIR(_ZN8S20507C1C1Ev),
  NSPAIR(_ZN8S20507C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C4;
extern VTBL_ENTRY _ZTI8S20507C4[];
extern  VTBL_ENTRY _ZTV8S20507C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C3;
extern VTBL_ENTRY _ZTI8S20507C3[];
extern  VTBL_ENTRY _ZTV8S20507C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C3[];
extern Class_Descriptor cd_S20507C5;
extern VTBL_ENTRY _ZTI8S20507C5[];
extern  VTBL_ENTRY _ZTV8S20507C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C14;
extern VTBL_ENTRY _ZTI9S20507C14[];
extern  VTBL_ENTRY _ZTV9S20507C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C14[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C8;
extern VTBL_ENTRY _ZTI8S20507C8[];
extern Class_Descriptor cd_S20507C7;
extern VTBL_ENTRY _ZTI8S20507C7[];
extern  VTBL_ENTRY _ZTV8S20507C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C16;
extern VTBL_ENTRY _ZTI9S20507C16[];
extern  VTBL_ENTRY _ZTV9S20507C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C16[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C17;
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
extern Class_Descriptor cd_S20507C15;
extern VTBL_ENTRY _ZTI9S20507C15[];
extern  VTBL_ENTRY _ZTV9S20507C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C15[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C16;
extern VTBL_ENTRY _ZTI9S20507C16[];
extern  VTBL_ENTRY _ZTV9S20507C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C16[];
extern Class_Descriptor cd_S20507C2;
extern VTBL_ENTRY _ZTI8S20507C2[];
extern  VTBL_ENTRY _ZTV8S20507C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C2[];
extern Class_Descriptor cd_S20507C4;
extern VTBL_ENTRY _ZTI8S20507C4[];
extern  VTBL_ENTRY _ZTV8S20507C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C17;
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C4;
extern VTBL_ENTRY _ZTI8S20507C4[];
extern  VTBL_ENTRY _ZTV8S20507C4[];
extern Class_Descriptor cd_S20507C20;
extern VTBL_ENTRY _ZTI9S20507C20[];
extern  VTBL_ENTRY _ZTV9S20507C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C20[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C18;
extern VTBL_ENTRY _ZTI9S20507C18[];
extern  VTBL_ENTRY _ZTV9S20507C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C18[];
extern Class_Descriptor cd_S20507C13;
extern VTBL_ENTRY _ZTI9S20507C13[];
extern  VTBL_ENTRY _ZTV9S20507C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C13[];
extern Class_Descriptor cd_S20507C17;
extern VTBL_ENTRY _ZTI9S20507C17[];
extern  VTBL_ENTRY _ZTV9S20507C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C17[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C12;
extern VTBL_ENTRY _ZTI9S20507C12[];
extern  VTBL_ENTRY _ZTV9S20507C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C12[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C16;
extern VTBL_ENTRY _ZTI9S20507C16[];
extern  VTBL_ENTRY _ZTV9S20507C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C16[];
extern Class_Descriptor cd_S20507C10;
extern VTBL_ENTRY _ZTI9S20507C10[];
extern  VTBL_ENTRY _ZTV9S20507C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C10[];
extern Class_Descriptor cd_S20507C19;
extern VTBL_ENTRY _ZTI9S20507C19[];
extern  VTBL_ENTRY _ZTV9S20507C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20507C19[];
static Base_Class bases_S20507C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C4,    ABISELECT(25664,17988), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C11,    ABISELECT(41632,29160), //bcp->offset
    79, //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
    10, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(41768,29248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(41872,29324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(41872,29324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(42320,29640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(42320,29640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(42848,30020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20507C7,    ABISELECT(42304,29636), //bcp->offset
    89, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20507C12,    ABISELECT(41760,29244), //bcp->offset
    84, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20507C10,    ABISELECT(32672,22900), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20507C5,    ABISELECT(37208,26080), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20507C3,    ABISELECT(25664,17988), //bcp->offset
    47, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    34, //immediately_derived
  0, 1},
  {&cd_S20507C5,    ABISELECT(45920,32160), //bcp->offset
    119, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(46480,32552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(45952,32172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(45952,32172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(45936,32168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    18, //immediately_derived
  0, 0},
  {&cd_S20507C14,    ABISELECT(45936,32168), //bcp->offset
    124, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20507C13,    ABISELECT(42944,30084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(43600,30532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C8,    ABISELECT(43600,30532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C7,    ABISELECT(43584,30528), //bcp->offset
    115, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(48312,33836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(48304,33832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20507C10,    ABISELECT(48416,33912), //bcp->offset
    145, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20507C16,    ABISELECT(48304,33832), //bcp->offset
    134, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20507C13,    ABISELECT(58048,40652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20507C17,    ABISELECT(58048,40652), //bcp->offset
    154, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20507C15,    ABISELECT(42944,30084), //bcp->offset
    94, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    34, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(7032,4928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(7024,4924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20507C10,    ABISELECT(7136,5004), //bcp->offset
    38, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20507C16,    ABISELECT(7024,4924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20507C2,    ABISELECT(7024,4924), //bcp->offset
    22, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C11,    ABISELECT(58832,41192), //bcp->offset
    -1, //bcp->virtual_function_table_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
    41, //immediately_derived
  0, 0},
  {&cd_S20507C13,    ABISELECT(58960,41276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    38, //immediately_derived
  0, 0},
  {&cd_S20507C17,    ABISELECT(58960,41276), //bcp->offset
    187, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S20507C13,    ABISELECT(108352,75812), //bcp->offset
    244, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    177, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S20507C4,    ABISELECT(108992,76256), //bcp->offset
    255, //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
    24, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S20507C20,    ABISELECT(58832,41192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20507C10,    ABISELECT(59904,41912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    131, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20507C18,    ABISELECT(59904,41912), //bcp->offset
    197, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    130, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20507C13,    ABISELECT(67472,47220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    139, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20507C17,    ABISELECT(67472,47220), //bcp->offset
    206, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    138, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(68264,47764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C12,    ABISELECT(68256,47760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    149, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S20507C10,    ABISELECT(68368,47840), //bcp->offset
    226, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    151, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S20507C16,    ABISELECT(68256,47760), //bcp->offset
    216, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    148, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20507C10,    ABISELECT(78000,54580), //bcp->offset
    235, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    160, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20507C19,    ABISELECT(58832,41192), //bcp->offset
    165, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    111, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20507C1[];
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
extern void _ZN8S20507C1D1Ev();
extern void _ZN8S20507C1D0Ev();
extern void ABISELECT(_ZTv0_n112_N8S20507C1D1Ev,_ZTv0_n56_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn7024_N8S20507C1D1Ev,_ZThn4924_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20507C1D0Ev,_ZTv0_n56_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn7024_N8S20507C1D0Ev,_ZThn4924_N8S20507C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn112_n112_N8S20507C1D1Ev,_ZTvn80_n56_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn112_n112_N8S20507C1D0Ev,_ZTvn80_n56_N8S20507C1D0Ev)();
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
extern void ABISELECT(_ZTv0_n88_N8S20507C1D1Ev,_ZTv0_n44_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn25664_N8S20507C1D1Ev,_ZThn17988_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20507C1D0Ev,_ZTv0_n44_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn25664_N8S20507C1D0Ev,_ZThn17988_N8S20507C1D0Ev)() __attribute__((weak));
extern void _ZN8S20507C32v5Ev();
extern void ABISELECT(_ZTvn7008_n88_N8S20507C1D1Ev,_ZTvn4912_n44_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn7008_n88_N8S20507C1D0Ev,_ZTvn4912_n44_N8S20507C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20507C1D1Ev,_ZTv0_n12_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn41632_N8S20507C1D1Ev,_ZThn29160_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20507C1D0Ev,_ZTv0_n12_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn41632_N8S20507C1D0Ev,_ZThn29160_N8S20507C1D0Ev)() __attribute__((weak));
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n96_N8S20507C1D1Ev,_ZTv0_n48_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn42944_N8S20507C1D1Ev,_ZThn30084_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20507C1D0Ev,_ZTv0_n48_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn42944_N8S20507C1D0Ev,_ZThn30084_N8S20507C1D0Ev)() __attribute__((weak));
extern void _ZN9S20507C152v6Ev();
extern void _ZN9S20507C152v7Ev();
extern void _ZN9S20507C152v8Ev();
extern void _ZN8S20507C72v4Ev();
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N8S20507C1D1Ev,_ZTv0_n28_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn45936_N8S20507C1D1Ev,_ZThn32168_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20507C1D0Ev,_ZTv0_n28_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn45936_N8S20507C1D0Ev,_ZThn32168_N8S20507C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C1D1Ev,_ZTv0_n36_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn48304_N8S20507C1D1Ev,_ZThn33832_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C1D0Ev,_ZTv0_n36_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn48304_N8S20507C1D0Ev,_ZThn33832_N8S20507C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn112_n72_N8S20507C1D1Ev,_ZTvn80_n36_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N8S20507C1D0Ev,_ZTvn80_n36_N8S20507C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S20507C1D1Ev,_ZTv0_n36_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn58048_N8S20507C1D1Ev,_ZThn40652_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C1D0Ev,_ZTv0_n36_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn58048_N8S20507C1D0Ev,_ZThn40652_N8S20507C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20507C1D1Ev,_ZTv0_n48_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn58832_N8S20507C1D1Ev,_ZThn41192_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20507C1D0Ev,_ZTv0_n48_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn58832_N8S20507C1D0Ev,_ZThn41192_N8S20507C1D0Ev)() __attribute__((weak));
extern void _ZN9S20507C202v9Ev();
extern void _ZN9S20507C203v10Ev();
extern void _ZN9S20507C193v11Ev();
extern void _ZN9S20507C193v12Ev();
extern void ABISELECT(_ZTvn128_n96_N8S20507C1D1Ev,_ZTvn84_n48_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn128_n96_N8S20507C1D0Ev,_ZTvn84_n48_N8S20507C1D0Ev)();
extern void ABISELECT(_ZTvn1072_n96_N8S20507C1D1Ev,_ZTvn720_n48_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn1072_n96_N8S20507C1D0Ev,_ZTvn720_n48_N8S20507C1D0Ev)();
extern void ABISELECT(_ZTvn8640_n96_N8S20507C1D1Ev,_ZTvn6028_n48_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn8640_n96_N8S20507C1D0Ev,_ZTvn6028_n48_N8S20507C1D0Ev)();
extern void ABISELECT(_ZTvn9424_n96_N8S20507C1D1Ev,_ZTvn6568_n48_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn9424_n96_N8S20507C1D0Ev,_ZTvn6568_n48_N8S20507C1D0Ev)();
extern void ABISELECT(_ZTvn9536_n96_N8S20507C1D1Ev,_ZTvn6648_n48_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn9536_n96_N8S20507C1D0Ev,_ZTvn6648_n48_N8S20507C1D0Ev)();
extern void ABISELECT(_ZTvn19168_n96_N8S20507C1D1Ev,_ZTvn13388_n48_N8S20507C1D1Ev)();
extern void ABISELECT(_ZTvn19168_n96_N8S20507C1D0Ev,_ZTvn13388_n48_N8S20507C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S20507C1D1Ev,_ZTv0_n36_N8S20507C1D1Ev)();
extern void ABISELECT(_ZThn108352_N8S20507C1D1Ev,_ZThn75812_N8S20507C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C1D0Ev,_ZTv0_n36_N8S20507C1D0Ev)();
extern void ABISELECT(_ZThn108352_N8S20507C1D0Ev,_ZThn75812_N8S20507C1D0Ev)() __attribute__((weak));
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
static  VTBL_ENTRY vtc_S20507C1[] = {
  ABISELECT(108992,76256),
  ABISELECT(108352,75812),
  ABISELECT(58832,41192),
  ABISELECT(58048,40652),
  ABISELECT(48304,33832),
  ABISELECT(45936,32168),
  ABISELECT(45920,32160),
  ABISELECT(42944,30084),
  ABISELECT(42848,30020),
  ABISELECT(42304,29636),
  ABISELECT(41872,29324),
  ABISELECT(41760,29244),
  ABISELECT(41632,29160),
  ABISELECT(25664,17988),
  ABISELECT(7024,4924),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20507C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20507C1D0Ev,
  ABISELECT(-7024,-4924),
  ABISELECT(51024,35728),
  ABISELECT(41280,28908),
  ABISELECT(38896,27236),
  ABISELECT(35920,25160),
  ABISELECT(18640,13064),
  ABISELECT(38912,27244),
  ABISELECT(34736,24320),
  ABISELECT(34608,24236),
  ABISELECT(35824,25096),
  ABISELECT(35280,24712),
  ABISELECT(34848,24400),
  ABISELECT(-7024,-4924),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20507C1D1Ev,_ZTv0_n56_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20507C1D0Ev,_ZTv0_n56_N8S20507C1D0Ev),
  ABISELECT(34624,24240),
  ABISELECT(35712,25016),
  ABISELECT(35168,24632),
  ABISELECT(34736,24320),
  ABISELECT(34496,24156),
  ABISELECT(-7136,-5004),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n112_N8S20507C1D1Ev,_ZTvn80_n56_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n112_N8S20507C1D0Ev,_ZTvn80_n56_N8S20507C1D0Ev),
  0,
  ABISELECT(-25664,-17988),
  0,
  0,
  0,
  ABISELECT(17184,12032),
  ABISELECT(16640,11648),
  ABISELECT(16208,11336),
  ABISELECT(16096,11256),
  ABISELECT(15968,11172),
  ABISELECT(-25664,-17988),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20507C1D1Ev,_ZTv0_n44_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20507C1D0Ev,_ZTv0_n44_N8S20507C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20507C32v5Ev,
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  ABISELECT(-32672,-22900),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn7008_n88_N8S20507C1D1Ev,_ZTvn4912_n44_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn7008_n88_N8S20507C1D0Ev,_ZTvn4912_n44_N8S20507C1D0Ev),
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  ABISELECT(-37208,-26080),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  ABISELECT(-41632,-29160),
  ABISELECT(-41632,-29160),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C1D1Ev,_ZTv0_n12_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C1D0Ev,_ZTv0_n12_N8S20507C1D0Ev),
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-41760,-29244),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-42304,-29636),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(640,444),
  0,
  0,
  0,
  ABISELECT(-42944,-30084),
  ABISELECT(15104,10568),
  ABISELECT(-1184,-840),
  ABISELECT(5360,3748),
  ABISELECT(2992,2084),
  ABISELECT(-1072,-760),
  ABISELECT(-640,-448),
  ABISELECT(2976,2076),
  ABISELECT(-1312,-924),
  ABISELECT(-96,-64),
  ABISELECT(-42944,-30084),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20507C1D1Ev,_ZTv0_n48_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20507C1D0Ev,_ZTv0_n48_N8S20507C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20507C152v6Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v7Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v8Ev,
  ABISELECT(-736,-508),
  ABISELECT(-43584,-30528),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(-45920,-32160),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  ABISELECT(-45936,-32168),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-45936,-32168),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20507C1D1Ev,_ZTv0_n28_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20507C1D0Ev,_ZTv0_n28_N8S20507C1D0Ev),
  ABISELECT(-48304,-33832),
  ABISELECT(-2368,-1664),
  ABISELECT(-6544,-4588),
  ABISELECT(-6672,-4672),
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  ABISELECT(-48304,-33832),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C1D1Ev,_ZTv0_n36_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C1D0Ev,_ZTv0_n36_N8S20507C1D0Ev),
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  ABISELECT(-48416,-33912),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S20507C1D1Ev,_ZTvn80_n36_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S20507C1D0Ev,_ZTvn80_n36_N8S20507C1D0Ev),
  ABISELECT(-58048,-40652),
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  ABISELECT(-58048,-40652),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C1D1Ev,_ZTv0_n36_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C1D0Ev,_ZTv0_n36_N8S20507C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-58832,-41192),
  ABISELECT(-17072,-11948),
  ABISELECT(50160,35064),
  ABISELECT(49520,34620),
  ABISELECT(-17200,-12032),
  ABISELECT(-12896,-9024),
  ABISELECT(-16528,-11556),
  ABISELECT(-12912,-9032),
  ABISELECT(-16960,-11868),
  ABISELECT(-15984,-11172),
  ABISELECT(-58832,-41192),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20507C1D1Ev,_ZTv0_n48_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20507C1D0Ev,_ZTv0_n48_N8S20507C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20507C202v9Ev,
  (VTBL_ENTRY)&_ZN9S20507C203v10Ev,
  (VTBL_ENTRY)&_ZN9S20507C193v11Ev,
  (VTBL_ENTRY)&_ZN9S20507C193v12Ev,
  ABISELECT(-13024,-9108),
  ABISELECT(-17088,-11952),
  ABISELECT(-16656,-11640),
  ABISELECT(-13040,-9116),
  ABISELECT(-17328,-12116),
  ABISELECT(-16112,-11256),
  ABISELECT(-58960,-41276),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn128_n96_N8S20507C1D1Ev,_ZTvn84_n48_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn128_n96_N8S20507C1D0Ev,_ZTvn84_n48_N8S20507C1D0Ev),
  ABISELECT(-18144,-12668),
  ABISELECT(-17056,-11892),
  ABISELECT(-17600,-12276),
  ABISELECT(-18032,-12588),
  ABISELECT(-18272,-12752),
  ABISELECT(-59904,-41912),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n96_N8S20507C1D1Ev,_ZTvn720_n48_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n96_N8S20507C1D0Ev,_ZTvn720_n48_N8S20507C1D0Ev),
  ABISELECT(-21536,-15052),
  ABISELECT(-25600,-17896),
  ABISELECT(-25168,-17584),
  ABISELECT(-21552,-15060),
  ABISELECT(-25840,-18060),
  ABISELECT(-24624,-17200),
  ABISELECT(-67472,-47220),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8640_n96_N8S20507C1D1Ev,_ZTvn6028_n48_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8640_n96_N8S20507C1D0Ev,_ZTvn6028_n48_N8S20507C1D0Ev),
  ABISELECT(-22320,-15592),
  ABISELECT(-26496,-18516),
  ABISELECT(-26624,-18600),
  ABISELECT(-25408,-17740),
  ABISELECT(-25952,-18124),
  ABISELECT(-26384,-18436),
  ABISELECT(-68256,-47760),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9424_n96_N8S20507C1D1Ev,_ZTvn6568_n48_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9424_n96_N8S20507C1D0Ev,_ZTvn6568_n48_N8S20507C1D0Ev),
  ABISELECT(-26608,-18596),
  ABISELECT(-25520,-17820),
  ABISELECT(-26064,-18204),
  ABISELECT(-26496,-18516),
  ABISELECT(-26736,-18680),
  ABISELECT(-68368,-47840),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9536_n96_N8S20507C1D1Ev,_ZTvn6648_n48_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9536_n96_N8S20507C1D0Ev,_ZTvn6648_n48_N8S20507C1D0Ev),
  ABISELECT(-36240,-25336),
  ABISELECT(-35152,-24560),
  ABISELECT(-35696,-24944),
  ABISELECT(-36128,-25256),
  ABISELECT(-36368,-25420),
  ABISELECT(-78000,-54580),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn19168_n96_N8S20507C1D1Ev,_ZTvn13388_n48_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn19168_n96_N8S20507C1D0Ev,_ZTvn13388_n48_N8S20507C1D0Ev),
  ABISELECT(-108352,-75812),
  ABISELECT(-62416,-43644),
  ABISELECT(-66480,-46488),
  ABISELECT(-66048,-46176),
  ABISELECT(-62432,-43652),
  ABISELECT(-66720,-46652),
  ABISELECT(-65504,-45792),
  ABISELECT(-108352,-75812),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C1D1Ev,_ZTv0_n36_N8S20507C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C1D0Ev,_ZTv0_n36_N8S20507C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-108992,-76256),
  (VTBL_ENTRY)&(_ZTI8S20507C1[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20507C1[];
extern void _ZN8S20507C2D1Ev();
extern void _ZN8S20507C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C2__8S20507C1[] = {
  ABISELECT(51024,35728),
  ABISELECT(41280,28908),
  ABISELECT(38896,27236),
  ABISELECT(35920,25160),
  ABISELECT(18640,13064),
  ABISELECT(38912,27244),
  ABISELECT(34736,24320),
  ABISELECT(34608,24236),
  ABISELECT(35824,25096),
  ABISELECT(35280,24712),
  ABISELECT(34848,24400),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20507C2D0Ev,
};
extern void _ZN9S20507C16D1Ev();
extern void _ZN9S20507C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C168S20507C2__A1__8S20507C1[] = {
  ABISELECT(38912,27244),
  ABISELECT(34736,24320),
  ABISELECT(34608,24236),
  ABISELECT(35824,25096),
  ABISELECT(35280,24712),
  ABISELECT(34848,24400),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN9S20507C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C129S20507C168S20507C2__A2__8S20507C1[] = {
  ABISELECT(35824,25096),
  ABISELECT(35280,24712),
  ABISELECT(34848,24400),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C129S20507C168S20507C2__A2__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-35280,-24712),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C168S20507C2__A2__8S20507C1[] = {
  ABISELECT(34624,24240),
  ABISELECT(35712,25016),
  ABISELECT(35168,24632),
  ABISELECT(34736,24320),
  ABISELECT(34496,24156),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn34496_N9S20507C10D1Ev,_ZThn24156_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn34496_N9S20507C10D0Ev,_ZThn24156_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C168S20507C2__A2__8S20507C1[] = {
  ABISELECT(-34496,-24156),
  ABISELECT(-34496,-24156),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C168S20507C2__A2__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-35168,-24632),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C168S20507C2__A2__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-34624,-24240),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C168S20507C2__A1__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-35280,-24712),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C168S20507C2__A1__8S20507C1[] = {
  ABISELECT(34624,24240),
  ABISELECT(35712,25016),
  ABISELECT(35168,24632),
  ABISELECT(34736,24320),
  ABISELECT(34496,24156),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn34608_N9S20507C16D1Ev,_ZThn24236_N9S20507C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev)();
extern void ABISELECT(_ZThn34608_N9S20507C16D0Ev,_ZThn24236_N9S20507C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C168S20507C2__A1__8S20507C1[] = {
  ABISELECT(-34608,-24236),
  ABISELECT(-34608,-24236),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C168S20507C2__A1__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-34736,-24320),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn38912_N9S20507C16D1Ev,_ZThn27244_N9S20507C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev)();
extern void ABISELECT(_ZThn38912_N9S20507C16D0Ev,_ZThn27244_N9S20507C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C168S20507C2__A1__8S20507C1[] = {
  ABISELECT(-38912,-27244),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-38912,-27244),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev),
};
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
extern void ABISELECT(_ZTv0_n88_N8S20507C2D1Ev,_ZTv0_n44_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn18640_N8S20507C2D1Ev,_ZThn13064_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20507C2D0Ev,_ZTv0_n44_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn18640_N8S20507C2D0Ev,_ZThn13064_N8S20507C2D0Ev)() __attribute__((weak));
extern void _ZN8S20507C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C3__8S20507C2__8S20507C1[] = {
  0,
  ABISELECT(-18640,-13064),
  0,
  0,
  0,
  ABISELECT(17184,12032),
  ABISELECT(16640,11648),
  ABISELECT(16208,11336),
  ABISELECT(16096,11256),
  ABISELECT(15968,11172),
  ABISELECT(-18640,-13064),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20507C2D1Ev,_ZTv0_n44_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20507C2D0Ev,_ZTv0_n44_N8S20507C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20507C32v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20507C2D1Ev,_ZTv0_n12_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn34608_N8S20507C2D1Ev,_ZThn24236_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20507C2D0Ev,_ZTv0_n12_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn34608_N8S20507C2D0Ev,_ZThn24236_N8S20507C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20507C2__8S20507C1[] = {
  ABISELECT(-34608,-24236),
  ABISELECT(-34608,-24236),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C2D1Ev,_ZTv0_n12_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C2D0Ev,_ZTv0_n12_N8S20507C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__8S20507C2__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-34736,-24320),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C2__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-35280,-24712),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTvn7008_n88_N8S20507C2D1Ev,_ZTvn4912_n44_N8S20507C2D1Ev)();
extern void ABISELECT(_ZTvn7008_n88_N8S20507C2D0Ev,_ZTvn4912_n44_N8S20507C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C108S20507C3__8S20507C2__8S20507C1[] = {
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  ABISELECT(-25648,-17976),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn7008_n88_N8S20507C2D1Ev,_ZTvn4912_n44_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn7008_n88_N8S20507C2D0Ev,_ZTvn4912_n44_N8S20507C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C58S20507C3__8S20507C2__8S20507C1[] = {
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  ABISELECT(-30184,-21156),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
};
extern void ABISELECT(_ZTv0_n96_N8S20507C2D1Ev,_ZTv0_n48_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn35920_N8S20507C2D1Ev,_ZThn25160_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20507C2D0Ev,_ZTv0_n48_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn35920_N8S20507C2D0Ev,_ZThn25160_N8S20507C2D0Ev)() __attribute__((weak));
extern void _ZN9S20507C152v6Ev();
extern void _ZN9S20507C152v7Ev();
extern void _ZN9S20507C152v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C15__8S20507C2__8S20507C1[] = {
  ABISELECT(640,444),
  0,
  0,
  0,
  ABISELECT(-35920,-25160),
  ABISELECT(15104,10568),
  ABISELECT(-1184,-840),
  ABISELECT(5360,3748),
  ABISELECT(2992,2084),
  ABISELECT(-1072,-760),
  ABISELECT(-640,-448),
  ABISELECT(2976,2076),
  ABISELECT(-1312,-924),
  ABISELECT(-96,-64),
  ABISELECT(-35920,-25160),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20507C2D1Ev,_ZTv0_n48_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20507C2D0Ev,_ZTv0_n48_N8S20507C2D0Ev),
  (VTBL_ENTRY)&_ZN9S20507C152v6Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v7Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__A1__8S20507C2__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(-38896,-27236),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N8S20507C2D1Ev,_ZTv0_n28_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn38912_N8S20507C2D1Ev,_ZThn27244_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20507C2D0Ev,_ZTv0_n28_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn38912_N8S20507C2D0Ev,_ZThn27244_N8S20507C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__8S20507C2__8S20507C1[] = {
  ABISELECT(-38912,-27244),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-38912,-27244),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20507C2D1Ev,_ZTv0_n28_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20507C2D0Ev,_ZTv0_n28_N8S20507C2D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C15__A2__8S20507C2__8S20507C1[] = {
  ABISELECT(-736,-508),
  ABISELECT(-36560,-25604),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn41280_N8S20507C2D1Ev,_ZThn28908_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn41280_N8S20507C2D0Ev,_ZThn28908_N8S20507C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C16__8S20507C2__8S20507C1[] = {
  ABISELECT(-41280,-28908),
  ABISELECT(-2368,-1664),
  ABISELECT(-6544,-4588),
  ABISELECT(-6672,-4672),
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  ABISELECT(-41280,-28908),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev),
};
extern void ABISELECT(_ZTvn112_n72_N8S20507C2D1Ev,_ZTvn80_n36_N8S20507C2D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N8S20507C2D0Ev,_ZTvn80_n36_N8S20507C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__A1__8S20507C2__8S20507C1[] = {
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  ABISELECT(-41392,-28988),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S20507C2D1Ev,_ZTvn80_n36_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S20507C2D0Ev,_ZTvn80_n36_N8S20507C2D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn51024_N8S20507C2D1Ev,_ZThn35728_N8S20507C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev)();
extern void ABISELECT(_ZThn51024_N8S20507C2D0Ev,_ZThn35728_N8S20507C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C17__8S20507C2__8S20507C1[] = {
  ABISELECT(-51024,-35728),
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  ABISELECT(-51024,-35728),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev),
};
extern void ABISELECT(_ZThn112_N8S20507C2D1Ev,_ZThn80_N8S20507C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S20507C2D0Ev,_ZThn80_N8S20507C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__A2__8S20507C2__8S20507C1[] = {
  ABISELECT(34624,24240),
  ABISELECT(35712,25016),
  ABISELECT(35168,24632),
  ABISELECT(34736,24320),
  ABISELECT(34496,24156),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S20507C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S20507C2D1Ev,_ZThn80_N8S20507C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S20507C2D0Ev,_ZThn80_N8S20507C2D0Ev),
};
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
extern void _ZN8S20507C3D1Ev();
extern void _ZN8S20507C3D0Ev();
extern void _ZN8S20507C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C3__8S20507C1[] = {
  ABISELECT(17184,12032),
  ABISELECT(16640,11648),
  ABISELECT(16208,11336),
  ABISELECT(16096,11256),
  ABISELECT(15968,11172),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20507C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20507C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20507C32v5Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C108S20507C3__8S20507C1[] = {
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZThn8960_N9S20507C10D1Ev,_ZThn6260_N9S20507C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
extern void ABISELECT(_ZThn8960_N9S20507C10D0Ev,_ZThn6260_N9S20507C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C108S20507C3__8S20507C1[] = {
  ABISELECT(-8960,-6260),
  ABISELECT(-8960,-6260),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C108S20507C3__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-9632,-6736),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C108S20507C3__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-9088,-6344),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20507C58S20507C3__8S20507C1[] = {
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C58S20507C3__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-5096,-3556),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev)();
extern void ABISELECT(_ZThn15968_N8S20507C3D1Ev,_ZThn11172_N8S20507C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev)();
extern void ABISELECT(_ZThn15968_N8S20507C3D0Ev,_ZThn11172_N8S20507C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20507C3__8S20507C1[] = {
  ABISELECT(-15968,-11172),
  ABISELECT(-15968,-11172),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__8S20507C3__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-16096,-11256),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C3__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-16640,-11648),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn7008_N8S20507C3D1Ev,_ZThn4912_N8S20507C3D1Ev)();
extern void ABISELECT(_ZThn7008_N8S20507C3D0Ev,_ZThn4912_N8S20507C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__8S20507C3__8S20507C1[] = {
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  ABISELECT(-7008,-4912),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S20507C3D1Ev,_ZThn4912_N8S20507C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S20507C3D0Ev,_ZThn4912_N8S20507C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__8S20507C3__8S20507C1[] = {
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  ABISELECT(-11544,-8092),
  (VTBL_ENTRY)&(_ZTI8S20507C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C12__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C1[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C15D1Ev();
extern void _ZN9S20507C15D0Ev();
extern void _ZN9S20507C152v6Ev();
extern void _ZN9S20507C152v7Ev();
extern void _ZN9S20507C152v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C15__8S20507C1[] = {
  ABISELECT(15104,10568),
  ABISELECT(-1184,-840),
  ABISELECT(5360,3748),
  ABISELECT(2992,2084),
  ABISELECT(-1072,-760),
  ABISELECT(-640,-448),
  ABISELECT(2976,2076),
  ABISELECT(-1312,-924),
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN9S20507C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v6Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v7Ev,
  (VTBL_ENTRY)&_ZN9S20507C152v8Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C15__8S20507C1[] = {
  ABISELECT(2992,2084),
  ABISELECT(-1072,-760),
  ABISELECT(-640,-448),
  ABISELECT(2976,2076),
  ABISELECT(-1312,-924),
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C15__8S20507C1[] = {
  ABISELECT(1312,924),
  ABISELECT(1312,924),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C15__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(-2976,-2076),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C15__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZThn2992_N9S20507C13D1Ev,_ZThn2084_N9S20507C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
extern void ABISELECT(_ZThn2992_N9S20507C13D0Ev,_ZThn2084_N9S20507C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C15__8S20507C1[] = {
  ABISELECT(-2992,-2084),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-2992,-2084),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C15__A2__8S20507C1[] = {
  ABISELECT(-736,-508),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C15D1Ev,_ZTv0_n12_N9S20507C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C15D0Ev,_ZTv0_n12_N9S20507C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C15__8S20507C1[] = {
  ABISELECT(1312,924),
  ABISELECT(1312,924),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C15D1Ev,_ZTv0_n12_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C15D0Ev,_ZTv0_n12_N9S20507C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C15__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(-2976,-2076),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C15__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn2992_N9S20507C15D1Ev,_ZThn2084_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn2992_N9S20507C15D0Ev,_ZThn2084_N9S20507C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C15__8S20507C1[] = {
  ABISELECT(-2992,-2084),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(-2992,-2084),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__A__9S20507C15__8S20507C1[] = {
  ABISELECT(-736,-508),
  ABISELECT(-640,-444),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn5360_N9S20507C15D1Ev,_ZThn3748_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn5360_N9S20507C15D0Ev,_ZThn3748_N9S20507C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C16__9S20507C15__8S20507C1[] = {
  ABISELECT(-5360,-3748),
  ABISELECT(-2368,-1664),
  ABISELECT(-6544,-4588),
  ABISELECT(-6672,-4672),
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  ABISELECT(-5360,-3748),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev),
};
extern void ABISELECT(_ZTvn112_n72_N9S20507C15D1Ev,_ZTvn80_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N9S20507C15D0Ev,_ZTvn80_n36_N9S20507C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__9S20507C15__8S20507C1[] = {
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  ABISELECT(-5472,-3828),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N9S20507C15D1Ev,_ZTvn80_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N9S20507C15D0Ev,_ZTvn80_n36_N9S20507C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C15__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(1184,840),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
};
extern void ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev)();
extern void ABISELECT(_ZThn15104_N9S20507C15D1Ev,_ZThn10568_N9S20507C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev)();
extern void ABISELECT(_ZThn15104_N9S20507C15D0Ev,_ZThn10568_N9S20507C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C17__9S20507C15__8S20507C1[] = {
  ABISELECT(-15104,-10568),
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  ABISELECT(-15104,-10568),
  (VTBL_ENTRY)&(_ZTI9S20507C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__A1__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__8S20507C5__A1__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(3616,2524),
  (VTBL_ENTRY)&(_ZTI8S20507C5[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void _ZN9S20507C14D1Ev();
extern void _ZN9S20507C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C14__8S20507C1[] = {
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C14D0Ev,
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C79S20507C14__A1__8S20507C1[] = {
  ABISELECT(-3088,-2148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20507C7[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C14__8S20507C1[] = {
  ABISELECT(4304,3008),
  ABISELECT(4304,3008),
  (VTBL_ENTRY)&(_ZTI9S20507C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D1Ev,_ZTv0_n12_N9S20507C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C14D0Ev,_ZTv0_n12_N9S20507C14D0Ev),
};
extern void _ZN9S20507C16D1Ev();
extern void _ZN9S20507C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C16__8S20507C1[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-6544,-4588),
  ABISELECT(-6672,-4672),
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN9S20507C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C129S20507C16__A1__8S20507C1[] = {
  ABISELECT(-5456,-3812),
  ABISELECT(-6000,-4196),
  ABISELECT(-6432,-4508),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C129S20507C16__A1__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(6000,4196),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__A1__8S20507C1[] = {
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C16__A1__8S20507C1[] = {
  ABISELECT(6784,4752),
  ABISELECT(6784,4752),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C16__A1__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(6112,4276),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C16__A1__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(6656,4668),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C16__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(6000,4196),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C16__8S20507C1[] = {
  ABISELECT(-6656,-4668),
  ABISELECT(-5568,-3892),
  ABISELECT(-6112,-4276),
  ABISELECT(-6544,-4588),
  ABISELECT(-6784,-4752),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C16__8S20507C1[] = {
  ABISELECT(6672,4672),
  ABISELECT(6672,4672),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C16__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(6544,4588),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C16__8S20507C1[] = {
  ABISELECT(2368,1664),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(2368,1664),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev),
};
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C17__8S20507C1[] = {
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C17__A1__8S20507C1[] = {
  ABISELECT(-12112,-8484),
  ABISELECT(-16176,-11328),
  ABISELECT(-15744,-11016),
  ABISELECT(-12128,-8492),
  ABISELECT(-16416,-11492),
  ABISELECT(-15200,-10632),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C17__A1__8S20507C1[] = {
  ABISELECT(16416,11492),
  ABISELECT(16416,11492),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C17__A1__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(12128,8492),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C17__A1__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(15744,11016),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C17__A1__8S20507C1[] = {
  ABISELECT(12112,8484),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(12112,8484),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C17__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(12128,8492),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C17__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(15744,11016),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C17__8S20507C1[] = {
  ABISELECT(12112,8484),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(12112,8484),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C17__8S20507C1[] = {
  ABISELECT(16416,11492),
  ABISELECT(16416,11492),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
extern void _ZN9S20507C19D1Ev();
extern void _ZN9S20507C19D0Ev();
extern void _ZN9S20507C202v9Ev();
extern void _ZN9S20507C203v10Ev();
extern void _ZN9S20507C193v11Ev();
extern void _ZN9S20507C193v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C19__8S20507C1[] = {
  ABISELECT(-17072,-11948),
  ABISELECT(50160,35064),
  ABISELECT(49520,34620),
  ABISELECT(-17200,-12032),
  ABISELECT(-12896,-9024),
  ABISELECT(-16528,-11556),
  ABISELECT(-12912,-9032),
  ABISELECT(-16960,-11868),
  ABISELECT(-15984,-11172),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&_ZN9S20507C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C19D0Ev,
  (VTBL_ENTRY)&_ZN9S20507C202v9Ev,
  (VTBL_ENTRY)&_ZN9S20507C203v10Ev,
  (VTBL_ENTRY)&_ZN9S20507C193v11Ev,
  (VTBL_ENTRY)&_ZN9S20507C193v12Ev,
};
extern void _ZN9S20507C20D1Ev();
extern void _ZN9S20507C20D0Ev();
extern void _ZN9S20507C202v9Ev();
extern void _ZN9S20507C203v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C209S20507C19__8S20507C1[] = {
  ABISELECT(50160,35064),
  ABISELECT(49520,34620),
  ABISELECT(-17200,-12032),
  ABISELECT(-12896,-9024),
  ABISELECT(-16528,-11556),
  ABISELECT(-12912,-9032),
  ABISELECT(-16960,-11868),
  ABISELECT(-15984,-11172),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN9S20507C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20507C202v9Ev,
  (VTBL_ENTRY)&_ZN9S20507C203v10Ev,
};
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C179S20507C209S20507C19__A1__8S20507C1[] = {
  ABISELECT(-13024,-9108),
  ABISELECT(-17088,-11952),
  ABISELECT(-16656,-11640),
  ABISELECT(-13040,-9116),
  ABISELECT(-17328,-12116),
  ABISELECT(-16112,-11256),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[] = {
  ABISELECT(-13024,-9108),
  ABISELECT(-17088,-11952),
  ABISELECT(-16656,-11640),
  ABISELECT(-13040,-9116),
  ABISELECT(-17328,-12116),
  ABISELECT(-16112,-11256),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[] = {
  ABISELECT(17328,12116),
  ABISELECT(17328,12116),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(13040,9116),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(16656,11640),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[] = {
  ABISELECT(13024,9108),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(13024,9108),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C179S20507C209S20507C19__A1__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(13040,9116),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C179S20507C209S20507C19__A1__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(16656,11640),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C179S20507C209S20507C19__A1__8S20507C1[] = {
  ABISELECT(13024,9108),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(13024,9108),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C179S20507C209S20507C19__A1__8S20507C1[] = {
  ABISELECT(17328,12116),
  ABISELECT(17328,12116),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZThn128_N9S20507C20D1Ev,_ZThn84_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn128_N9S20507C20D0Ev,_ZThn84_N9S20507C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C17__9S20507C209S20507C19__8S20507C1[] = {
  ABISELECT(-13024,-9108),
  ABISELECT(-17088,-11952),
  ABISELECT(-16656,-11640),
  ABISELECT(-13040,-9116),
  ABISELECT(-17328,-12116),
  ABISELECT(-16112,-11256),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C20D1Ev,_ZThn84_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C20D0Ev,_ZThn84_N9S20507C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C209S20507C19__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(12912,9032),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C209S20507C19__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(16528,11556),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C20D1Ev,_ZTv0_n28_N9S20507C20D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C20D0Ev,_ZTv0_n28_N9S20507C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C209S20507C19__8S20507C1[] = {
  ABISELECT(12896,9024),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(12896,9024),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C20D1Ev,_ZTv0_n28_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C20D0Ev,_ZTv0_n28_N9S20507C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C20D1Ev,_ZTv0_n12_N9S20507C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C20D0Ev,_ZTv0_n12_N9S20507C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__9S20507C209S20507C19__8S20507C1[] = {
  ABISELECT(17200,12032),
  ABISELECT(17200,12032),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C20D1Ev,_ZTv0_n12_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C20D0Ev,_ZTv0_n12_N9S20507C20D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev)();
extern void ABISELECT(_ZThn49520_N9S20507C20D1Ev,_ZThn34620_N9S20507C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev)();
extern void ABISELECT(_ZThn49520_N9S20507C20D0Ev,_ZThn34620_N9S20507C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C13__A1__9S20507C209S20507C19__8S20507C1[] = {
  ABISELECT(-49520,-34620),
  ABISELECT(-62416,-43644),
  ABISELECT(-66480,-46488),
  ABISELECT(-66048,-46176),
  ABISELECT(-62432,-43652),
  ABISELECT(-66720,-46652),
  ABISELECT(-65504,-45792),
  ABISELECT(-49520,-34620),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev),
};
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C4__9S20507C209S20507C19__8S20507C1[] = {
  0,
  0,
  0,
  ABISELECT(-50160,-35064),
  (VTBL_ENTRY)&(_ZTI9S20507C20[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
};
extern void _ZN9S20507C18D1Ev();
extern void _ZN9S20507C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C189S20507C19__8S20507C1[] = {
  ABISELECT(-18144,-12668),
  ABISELECT(-17056,-11892),
  ABISELECT(-17600,-12276),
  ABISELECT(-18032,-12588),
  ABISELECT(-18272,-12752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&_ZN9S20507C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C18D0Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C189S20507C19__A3__8S20507C1[] = {
  ABISELECT(-18144,-12668),
  ABISELECT(-17056,-11892),
  ABISELECT(-17600,-12276),
  ABISELECT(-18032,-12588),
  ABISELECT(-18272,-12752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C189S20507C19__A3__8S20507C1[] = {
  ABISELECT(18272,12752),
  ABISELECT(18272,12752),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C189S20507C19__A3__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(17600,12276),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C189S20507C19__A3__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(18144,12668),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C189S20507C19__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(18144,12668),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C189S20507C19__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(17600,12276),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C18D1Ev,_ZTv0_n12_N9S20507C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C18D0Ev,_ZTv0_n12_N9S20507C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C189S20507C19__8S20507C1[] = {
  ABISELECT(18272,12752),
  ABISELECT(18272,12752),
  (VTBL_ENTRY)&(_ZTI9S20507C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C18D1Ev,_ZTv0_n12_N9S20507C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C18D0Ev,_ZTv0_n12_N9S20507C18D0Ev),
};
extern void _ZN9S20507C17D1Ev();
extern void _ZN9S20507C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C179S20507C19__A2__8S20507C1[] = {
  ABISELECT(-21536,-15052),
  ABISELECT(-25600,-17896),
  ABISELECT(-25168,-17584),
  ABISELECT(-21552,-15060),
  ABISELECT(-25840,-18060),
  ABISELECT(-24624,-17200),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN9S20507C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C17D0Ev,
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C139S20507C179S20507C19__A4__8S20507C1[] = {
  ABISELECT(-21536,-15052),
  ABISELECT(-25600,-17896),
  ABISELECT(-25168,-17584),
  ABISELECT(-21552,-15060),
  ABISELECT(-25840,-18060),
  ABISELECT(-24624,-17200),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C139S20507C179S20507C19__A4__8S20507C1[] = {
  ABISELECT(25840,18060),
  ABISELECT(25840,18060),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C139S20507C179S20507C19__A4__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(21552,15060),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C139S20507C179S20507C19__A4__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(25168,17584),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C139S20507C179S20507C19__A4__8S20507C1[] = {
  ABISELECT(21536,15052),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(21536,15052),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C179S20507C19__A2__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(21552,15060),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C179S20507C19__A2__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(25168,17584),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C179S20507C19__A2__8S20507C1[] = {
  ABISELECT(21536,15052),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(21536,15052),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D1Ev,_ZTv0_n28_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C17D0Ev,_ZTv0_n28_N9S20507C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C179S20507C19__A2__8S20507C1[] = {
  ABISELECT(25840,18060),
  ABISELECT(25840,18060),
  (VTBL_ENTRY)&(_ZTI9S20507C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D1Ev,_ZTv0_n12_N9S20507C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C17D0Ev,_ZTv0_n12_N9S20507C17D0Ev),
};
extern void _ZN9S20507C16D1Ev();
extern void _ZN9S20507C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C169S20507C19__A2__8S20507C1[] = {
  ABISELECT(-22320,-15592),
  ABISELECT(-26496,-18516),
  ABISELECT(-26624,-18600),
  ABISELECT(-25408,-17740),
  ABISELECT(-25952,-18124),
  ABISELECT(-26384,-18436),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN9S20507C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C129S20507C169S20507C19__A3__8S20507C1[] = {
  ABISELECT(-25408,-17740),
  ABISELECT(-25952,-18124),
  ABISELECT(-26384,-18436),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C129S20507C169S20507C19__A3__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(25952,18124),
  (VTBL_ENTRY)&(_ZTI9S20507C12[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C169S20507C19__A4__8S20507C1[] = {
  ABISELECT(-26608,-18596),
  ABISELECT(-25520,-17820),
  ABISELECT(-26064,-18204),
  ABISELECT(-26496,-18516),
  ABISELECT(-26736,-18680),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C169S20507C19__A4__8S20507C1[] = {
  ABISELECT(26736,18680),
  ABISELECT(26736,18680),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C169S20507C19__A4__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(26064,18204),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C169S20507C19__A4__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(26608,18596),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C169S20507C19__A2__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(25952,18124),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__9S20507C169S20507C19__A2__8S20507C1[] = {
  ABISELECT(-26608,-18596),
  ABISELECT(-25520,-17820),
  ABISELECT(-26064,-18204),
  ABISELECT(-26496,-18516),
  ABISELECT(-26736,-18680),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D1Ev,_ZThn80_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20507C16D0Ev,_ZThn80_N9S20507C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C169S20507C19__A2__8S20507C1[] = {
  ABISELECT(26624,18600),
  ABISELECT(26624,18600),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__A1__9S20507C169S20507C19__A2__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(26496,18516),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C169S20507C19__A2__8S20507C1[] = {
  ABISELECT(22320,15592),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(22320,15592),
  (VTBL_ENTRY)&(_ZTI9S20507C16[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev),
};
extern void _ZN9S20507C10D1Ev();
extern void _ZN9S20507C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C19__A5__8S20507C1[] = {
  ABISELECT(-36240,-25336),
  ABISELECT(-35152,-24560),
  ABISELECT(-35696,-24944),
  ABISELECT(-36128,-25256),
  ABISELECT(-36368,-25420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN9S20507C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C109S20507C19__A5__8S20507C1[] = {
  ABISELECT(36368,25420),
  ABISELECT(36368,25420),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C109S20507C19__A5__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(35696,24944),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C109S20507C19__A5__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(36240,25336),
  (VTBL_ENTRY)&(_ZTI9S20507C10[0]),
};
extern void ABISELECT(_ZThn128_N9S20507C19D1Ev,_ZThn84_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn128_N9S20507C19D0Ev,_ZThn84_N9S20507C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C179S20507C20__9S20507C19__8S20507C1[] = {
  ABISELECT(-13024,-9108),
  ABISELECT(-17088,-11952),
  ABISELECT(-16656,-11640),
  ABISELECT(-13040,-9116),
  ABISELECT(-17328,-12116),
  ABISELECT(-16112,-11256),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C19D1Ev,_ZThn84_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20507C19D0Ev,_ZThn84_N9S20507C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C19__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(12912,9032),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C19__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(16528,11556),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C19D1Ev,_ZTv0_n28_N9S20507C19D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C19D0Ev,_ZTv0_n28_N9S20507C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C19__8S20507C1[] = {
  ABISELECT(12896,9024),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(12896,9024),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C19D1Ev,_ZTv0_n28_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C19D0Ev,_ZTv0_n28_N9S20507C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20507C19D1Ev,_ZTv0_n12_N9S20507C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C19D0Ev,_ZTv0_n12_N9S20507C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__9S20507C19__8S20507C1[] = {
  ABISELECT(17200,12032),
  ABISELECT(17200,12032),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C19D1Ev,_ZTv0_n12_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C19D0Ev,_ZTv0_n12_N9S20507C19D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S20507C19D1Ev,_ZTv0_n36_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn49520_N9S20507C19D1Ev,_ZThn34620_N9S20507C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20507C19D0Ev,_ZTv0_n36_N9S20507C19D0Ev)();
extern void ABISELECT(_ZThn49520_N9S20507C19D0Ev,_ZThn34620_N9S20507C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C13__A1__9S20507C19__8S20507C1[] = {
  ABISELECT(-49520,-34620),
  ABISELECT(-62416,-43644),
  ABISELECT(-66480,-46488),
  ABISELECT(-66048,-46176),
  ABISELECT(-62432,-43652),
  ABISELECT(-66720,-46652),
  ABISELECT(-65504,-45792),
  ABISELECT(-49520,-34620),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C19D1Ev,_ZTv0_n36_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20507C19D0Ev,_ZTv0_n36_N9S20507C19D0Ev),
};
extern void _ZN8S20507C42v1Ev();
extern void _ZN8S20507C42v2Ev();
extern void _ZN8S20507C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C4__9S20507C19__8S20507C1[] = {
  0,
  0,
  0,
  ABISELECT(-50160,-35064),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&_ZN8S20507C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20507C42v3Ev,
};
extern void ABISELECT(_ZThn1072_N9S20507C19D1Ev,_ZThn720_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn1072_N9S20507C19D0Ev,_ZThn720_N9S20507C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C18__9S20507C19__8S20507C1[] = {
  ABISELECT(-18144,-12668),
  ABISELECT(-17056,-11892),
  ABISELECT(-17600,-12276),
  ABISELECT(-18032,-12588),
  ABISELECT(-18272,-12752),
  ABISELECT(-1072,-720),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S20507C19D1Ev,_ZThn720_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S20507C19D0Ev,_ZThn720_N9S20507C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20507C12__9S20507C19__8S20507C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(17072,11948),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
};
extern void ABISELECT(_ZThn8640_N9S20507C19D1Ev,_ZThn6028_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn8640_N9S20507C19D0Ev,_ZThn6028_N9S20507C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C17__A1__9S20507C19__8S20507C1[] = {
  ABISELECT(-21536,-15052),
  ABISELECT(-25600,-17896),
  ABISELECT(-25168,-17584),
  ABISELECT(-21552,-15060),
  ABISELECT(-25840,-18060),
  ABISELECT(-24624,-17200),
  ABISELECT(-8640,-6028),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N9S20507C19D1Ev,_ZThn6028_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N9S20507C19D0Ev,_ZThn6028_N9S20507C19D0Ev),
};
extern void ABISELECT(_ZThn9424_N9S20507C19D1Ev,_ZThn6568_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn9424_N9S20507C19D0Ev,_ZThn6568_N9S20507C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C16__9S20507C19__8S20507C1[] = {
  ABISELECT(-22320,-15592),
  ABISELECT(-26496,-18516),
  ABISELECT(-26624,-18600),
  ABISELECT(-25408,-17740),
  ABISELECT(-25952,-18124),
  ABISELECT(-26384,-18436),
  ABISELECT(-9424,-6568),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N9S20507C19D1Ev,_ZThn6568_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N9S20507C19D0Ev,_ZThn6568_N9S20507C19D0Ev),
};
extern void ABISELECT(_ZThn9536_N9S20507C19D1Ev,_ZThn6648_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn9536_N9S20507C19D0Ev,_ZThn6648_N9S20507C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C109S20507C16__A1__9S20507C19__8S20507C1[] = {
  ABISELECT(-26608,-18596),
  ABISELECT(-25520,-17820),
  ABISELECT(-26064,-18204),
  ABISELECT(-26496,-18516),
  ABISELECT(-26736,-18680),
  ABISELECT(-9536,-6648),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N9S20507C19D1Ev,_ZThn6648_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N9S20507C19D0Ev,_ZThn6648_N9S20507C19D0Ev),
};
extern void ABISELECT(_ZThn19168_N9S20507C19D1Ev,_ZThn13388_N9S20507C19D1Ev)();
extern void ABISELECT(_ZThn19168_N9S20507C19D0Ev,_ZThn13388_N9S20507C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C10__A2__9S20507C19__8S20507C1[] = {
  ABISELECT(-36240,-25336),
  ABISELECT(-35152,-24560),
  ABISELECT(-35696,-24944),
  ABISELECT(-36128,-25256),
  ABISELECT(-36368,-25420),
  ABISELECT(-19168,-13388),
  (VTBL_ENTRY)&(_ZTI9S20507C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N9S20507C19D1Ev,_ZThn13388_N9S20507C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N9S20507C19D0Ev,_ZThn13388_N9S20507C19D0Ev),
};
extern void _ZN9S20507C13D1Ev();
extern void _ZN9S20507C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20507C13__A3__8S20507C1[] = {
  ABISELECT(-62416,-43644),
  ABISELECT(-66480,-46488),
  ABISELECT(-66048,-46176),
  ABISELECT(-62432,-43652),
  ABISELECT(-66720,-46652),
  ABISELECT(-65504,-45792),
  0,
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN9S20507C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20507C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20507C13__A3__8S20507C1[] = {
  ABISELECT(66720,46652),
  ABISELECT(66720,46652),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D1Ev,_ZTv0_n12_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20507C13D0Ev,_ZTv0_n12_N9S20507C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20507C5__9S20507C13__A3__8S20507C1[] = {
  ABISELECT(-4048,-2836),
  ABISELECT(-3616,-2524),
  ABISELECT(-3072,-2140),
  ABISELECT(62432,43652),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
};
extern void _ZN8S20507C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20507C7__9S20507C13__A3__8S20507C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(66048,46176),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
};
extern void _ZN8S20507C72v4Ev();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C14__9S20507C13__A3__8S20507C1[] = {
  ABISELECT(62416,43644),
  0,
  ABISELECT(-4304,-3008),
  ABISELECT(-4064,-2844),
  ABISELECT(-3088,-2148),
  ABISELECT(62416,43644),
  (VTBL_ENTRY)&(_ZTI9S20507C13[0]),
  (VTBL_ENTRY)&_ZN8S20507C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev),
};
static  VTT_ENTRY vtt_S20507C1[] = {
  {&(_ZTV8S20507C1[17]),  17,263},
  {&(_ZTV8S20507C1[36]),  36,263},
  {&(_ZTV8S20507C1[59]),  59,263},
  {&(_ZTV8S20507C1[82]),  82,263},
  {&(_ZTV8S20507C1[89]),  89,263},
  {&(_ZTV8S20507C1[93]),  93,263},
  {&(_ZTV8S20507C1[72]),  72,263},
  {&(_ZTV8S20507C1[79]),  79,263},
  {&(_ZTV8S20507C1[110]),  110,263},
  {&(_ZTV8S20507C1[124]),  124,263},
  {&(_ZTV8S20507C1[131]),  131,263},
  {&(_ZTV8S20507C1[118]),  118,263},
  {&(_ZTV8S20507C1[143]),  143,263},
  {&(_ZTV8S20507C1[152]),  152,263},
  {&(_ZTV8S20507C1[163]),  163,263},
  {&(_ZTV8S20507C1[45]),  45,263},
  {&(_ZTV8S20507C1[181]),  181,263},
  {&(_ZTV8S20507C1[195]),  195,263},
  {&(_ZTV8S20507C1[253]),  253,263},
  {&(_ZTV8S20507C1[260]),  260,263},
  {&(_ZTV8S20507C1[204]),  204,263},
  {&(_ZTV8S20507C1[214]),  214,263},
  {&(_ZTV8S20507C1[224]),  224,263},
  {&(_ZTV8S20507C1[233]),  233,263},
  {&(_ZTV8S20507C1[242]),  242,263},
  {&(_tg__ZTV8S20507C2__8S20507C1[13]),  13,15},
  {&(_tg__ZTV9S20507C168S20507C2__A1__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C129S20507C168S20507C2__A2__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C129S20507C168S20507C2__A2__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C109S20507C168S20507C2__A2__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C168S20507C2__A2__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C168S20507C2__A2__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C168S20507C2__A2__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C168S20507C2__A1__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C10__9S20507C168S20507C2__A1__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C168S20507C2__A1__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C12__A1__9S20507C168S20507C2__A1__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C14__9S20507C168S20507C2__A1__8S20507C1[7]),  7,10},
  {&(_tg__ZTV8S20507C3__8S20507C2__8S20507C1[12]),  12,18},
  {&(_tg__ZTV9S20507C11__8S20507C2__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C12__8S20507C2__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C2__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C108S20507C3__8S20507C2__8S20507C1[7]),  7,9},
  {&(_tg__ZTV8S20507C58S20507C3__8S20507C2__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C15__8S20507C2__8S20507C1[16]),  16,21},
  {&(_tg__ZTV8S20507C5__A1__8S20507C2__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C14__8S20507C2__8S20507C1[7]),  7,10},
  {&(_tg__ZTV8S20507C79S20507C15__A2__8S20507C2__8S20507C1[3]),  3,4},
  {&(_tg__ZTV9S20507C16__8S20507C2__8S20507C1[9]),  9,11},
  {&(_tg__ZTV9S20507C109S20507C16__A1__8S20507C2__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C17__8S20507C2__8S20507C1[9]),  9,11},
  {&(_tg__ZTV9S20507C109S20507C16__A2__8S20507C2__8S20507C1[7]),  7,9},
  {&(_tg__ZTV8S20507C3__8S20507C1[7]),  7,13},
  {&(_tg__ZTV9S20507C108S20507C3__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C108S20507C3__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C108S20507C3__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C108S20507C3__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C58S20507C3__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C58S20507C3__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__8S20507C3__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C12__8S20507C3__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C3__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C10__8S20507C3__8S20507C1[7]),  7,9},
  {&(_tg__ZTV8S20507C5__8S20507C3__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C12__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C12__8S20507C1[4]),  4,5},
  {&(_tg__ZTV8S20507C7__8S20507C1[3]),  3,4},
  {&(_tg__ZTV9S20507C15__8S20507C1[11]),  11,16},
  {&(_tg__ZTV9S20507C139S20507C15__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C15__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C15__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C15__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C15__8S20507C1[7]),  7,10},
  {&(_tg__ZTV8S20507C79S20507C15__A2__8S20507C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C15__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C15__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C15__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C15__8S20507C1[7]),  7,10},
  {&(_tg__ZTV8S20507C7__A__9S20507C15__8S20507C1[3]),  3,4},
  {&(_tg__ZTV9S20507C16__9S20507C15__8S20507C1[9]),  9,11},
  {&(_tg__ZTV9S20507C109S20507C16__9S20507C15__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C12__A1__9S20507C15__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C17__9S20507C15__8S20507C1[9]),  9,11},
  {&(_tg__ZTV8S20507C5__A1__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__8S20507C5__A1__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__8S20507C1[5]),  5,8},
  {&(_tg__ZTV8S20507C79S20507C14__A1__8S20507C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S20507C14__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C16__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C129S20507C16__A1__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C129S20507C16__A1__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C109S20507C16__A1__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C16__A1__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C16__A1__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C16__A1__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C16__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C10__9S20507C16__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C16__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C12__A1__9S20507C16__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C14__9S20507C16__8S20507C1[7]),  7,10},
  {&(_tg__ZTV9S20507C17__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C139S20507C17__A1__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C17__A1__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C17__A1__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C17__A1__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C17__A1__8S20507C1[7]),  7,10},
  {&(_tg__ZTV8S20507C5__9S20507C17__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C17__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C17__8S20507C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20507C17__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C19__8S20507C1[11]),  11,17},
  {&(_tg__ZTV9S20507C209S20507C19__8S20507C1[10]),  10,14},
  {&(_tg__ZTV9S20507C179S20507C209S20507C19__A1__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C179S20507C209S20507C19__A2__8S20507C1[7]),  7,10},
  {&(_tg__ZTV8S20507C5__9S20507C179S20507C209S20507C19__A1__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C179S20507C209S20507C19__A1__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C179S20507C209S20507C19__A1__8S20507C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20507C179S20507C209S20507C19__A1__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C17__9S20507C209S20507C19__8S20507C1[8]),  8,10},
  {&(_tg__ZTV8S20507C5__9S20507C209S20507C19__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C209S20507C19__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C209S20507C19__8S20507C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__9S20507C209S20507C19__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C13__A1__9S20507C209S20507C19__8S20507C1[9]),  9,11},
  {&(_tg__ZTV8S20507C4__9S20507C209S20507C19__8S20507C1[5]),  5,8},
  {&(_tg__ZTV9S20507C189S20507C19__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C109S20507C189S20507C19__A3__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C189S20507C19__A3__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C189S20507C19__A3__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C189S20507C19__A3__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C12__9S20507C189S20507C19__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C189S20507C19__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__9S20507C189S20507C19__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C179S20507C19__A2__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C139S20507C179S20507C19__A4__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C139S20507C179S20507C19__A4__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C139S20507C179S20507C19__A4__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C139S20507C179S20507C19__A4__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C139S20507C179S20507C19__A4__8S20507C1[7]),  7,10},
  {&(_tg__ZTV8S20507C5__9S20507C179S20507C19__A2__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C179S20507C19__A2__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C179S20507C19__A2__8S20507C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20507C179S20507C19__A2__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C169S20507C19__A2__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C129S20507C169S20507C19__A3__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C129S20507C169S20507C19__A3__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C109S20507C169S20507C19__A4__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C169S20507C19__A4__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C169S20507C19__A4__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C169S20507C19__A4__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C169S20507C19__A2__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C10__9S20507C169S20507C19__A2__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C169S20507C19__A2__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C12__A1__9S20507C169S20507C19__A2__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C14__9S20507C169S20507C19__A2__8S20507C1[7]),  7,10},
  {&(_tg__ZTV9S20507C109S20507C19__A5__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20507C109S20507C19__A5__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C7__9S20507C109S20507C19__A5__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C12__9S20507C109S20507C19__A5__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C179S20507C20__9S20507C19__8S20507C1[8]),  8,10},
  {&(_tg__ZTV8S20507C5__9S20507C19__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C19__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C19__8S20507C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__9S20507C19__8S20507C1[3]),  3,5},
  {&(_tg__ZTV9S20507C13__A1__9S20507C19__8S20507C1[9]),  9,11},
  {&(_tg__ZTV8S20507C4__9S20507C19__8S20507C1[5]),  5,8},
  {&(_tg__ZTV9S20507C18__9S20507C19__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C12__9S20507C19__8S20507C1[5]),  5,5},
  {&(_tg__ZTV9S20507C17__A1__9S20507C19__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C16__9S20507C19__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C109S20507C16__A1__9S20507C19__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C10__A2__9S20507C19__8S20507C1[7]),  7,9},
  {&(_tg__ZTV9S20507C13__A3__8S20507C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S20507C13__A3__8S20507C1[3]),  3,5},
  {&(_tg__ZTV8S20507C5__9S20507C13__A3__8S20507C1[5]),  5,5},
  {&(_tg__ZTV8S20507C7__9S20507C13__A3__8S20507C1[4]),  4,5},
  {&(_tg__ZTV9S20507C14__9S20507C13__A3__8S20507C1[7]),  7,10},
};
extern VTBL_ENTRY _ZTI8S20507C1[];
extern  VTBL_ENTRY _ZTV8S20507C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20507C1[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C19D0Ev,_ZTv0_n36_N9S20507C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49520_N9S20507C19D0Ev,_ZThn34620_N9S20507C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C19D1Ev,_ZTv0_n36_N9S20507C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49520_N9S20507C19D1Ev,_ZThn34620_N9S20507C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C20D0Ev,_ZTv0_n36_N9S20507C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49520_N9S20507C20D0Ev,_ZThn34620_N9S20507C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C20D1Ev,_ZTv0_n36_N9S20507C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49520_N9S20507C20D1Ev,_ZThn34620_N9S20507C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C15D0Ev,_ZTv0_n36_N9S20507C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15104_N9S20507C15D0Ev,_ZThn10568_N9S20507C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N9S20507C15D0Ev,_ZThn3748_N9S20507C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20507C15D1Ev,_ZTv0_n36_N9S20507C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15104_N9S20507C15D1Ev,_ZThn10568_N9S20507C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N9S20507C15D1Ev,_ZThn3748_N9S20507C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C15D0Ev,_ZTv0_n28_N9S20507C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2992_N9S20507C15D0Ev,_ZThn2084_N9S20507C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C15D1Ev,_ZTv0_n28_N9S20507C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2992_N9S20507C15D1Ev,_ZThn2084_N9S20507C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D0Ev,_ZTv0_n28_N9S20507C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2992_N9S20507C13D0Ev,_ZThn2084_N9S20507C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C13D1Ev,_ZTv0_n28_N9S20507C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2992_N9S20507C13D1Ev,_ZThn2084_N9S20507C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C3D0Ev,_ZTv0_n12_N8S20507C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15968_N8S20507C3D0Ev,_ZThn11172_N8S20507C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C3D1Ev,_ZTv0_n12_N8S20507C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15968_N8S20507C3D1Ev,_ZThn11172_N8S20507C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20507C2D0Ev,_ZTv0_n36_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51024_N8S20507C2D0Ev,_ZThn35728_N8S20507C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn41280_N8S20507C2D0Ev,_ZThn28908_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20507C2D1Ev,_ZTv0_n36_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51024_N8S20507C2D1Ev,_ZThn35728_N8S20507C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn41280_N8S20507C2D1Ev,_ZThn28908_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20507C2D0Ev,_ZTv0_n28_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38912_N8S20507C2D0Ev,_ZThn27244_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20507C2D1Ev,_ZTv0_n28_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38912_N8S20507C2D1Ev,_ZThn27244_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20507C2D0Ev,_ZTv0_n48_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35920_N8S20507C2D0Ev,_ZThn25160_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20507C2D1Ev,_ZTv0_n48_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35920_N8S20507C2D1Ev,_ZThn25160_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C2D0Ev,_ZTv0_n12_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34608_N8S20507C2D0Ev,_ZThn24236_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C2D1Ev,_ZTv0_n12_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34608_N8S20507C2D1Ev,_ZThn24236_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20507C2D0Ev,_ZTv0_n44_N8S20507C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18640_N8S20507C2D0Ev,_ZThn13064_N8S20507C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20507C2D1Ev,_ZTv0_n44_N8S20507C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18640_N8S20507C2D1Ev,_ZThn13064_N8S20507C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C16D0Ev,_ZTv0_n28_N9S20507C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38912_N9S20507C16D0Ev,_ZThn27244_N9S20507C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20507C16D1Ev,_ZTv0_n28_N9S20507C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38912_N9S20507C16D1Ev,_ZThn27244_N9S20507C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C16D0Ev,_ZTv0_n12_N9S20507C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34608_N9S20507C16D0Ev,_ZThn24236_N9S20507C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C16D1Ev,_ZTv0_n12_N9S20507C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34608_N9S20507C16D1Ev,_ZThn24236_N9S20507C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D0Ev,_ZTv0_n12_N9S20507C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8960_N9S20507C10D0Ev,_ZThn6260_N9S20507C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34496_N9S20507C10D0Ev,_ZThn24156_N9S20507C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20507C10D1Ev,_ZTv0_n12_N9S20507C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8960_N9S20507C10D1Ev,_ZThn6260_N9S20507C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34496_N9S20507C10D1Ev,_ZThn24156_N9S20507C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20507C1D0Ev,_ZTv0_n36_N8S20507C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108352_N8S20507C1D0Ev,_ZThn75812_N8S20507C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn58048_N8S20507C1D0Ev,_ZThn40652_N8S20507C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48304_N8S20507C1D0Ev,_ZThn33832_N8S20507C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20507C1D1Ev,_ZTv0_n36_N8S20507C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn108352_N8S20507C1D1Ev,_ZThn75812_N8S20507C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn58048_N8S20507C1D1Ev,_ZThn40652_N8S20507C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48304_N8S20507C1D1Ev,_ZThn33832_N8S20507C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20507C1D0Ev,_ZTv0_n28_N8S20507C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn45936_N8S20507C1D0Ev,_ZThn32168_N8S20507C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20507C1D1Ev,_ZTv0_n28_N8S20507C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn45936_N8S20507C1D1Ev,_ZThn32168_N8S20507C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20507C1D0Ev,_ZTv0_n48_N8S20507C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58832_N8S20507C1D0Ev,_ZThn41192_N8S20507C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn42944_N8S20507C1D0Ev,_ZThn30084_N8S20507C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20507C1D1Ev,_ZTv0_n48_N8S20507C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58832_N8S20507C1D1Ev,_ZThn41192_N8S20507C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn42944_N8S20507C1D1Ev,_ZThn30084_N8S20507C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C1D0Ev,_ZTv0_n12_N8S20507C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41632_N8S20507C1D0Ev,_ZThn29160_N8S20507C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20507C1D1Ev,_ZTv0_n12_N8S20507C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41632_N8S20507C1D1Ev,_ZThn29160_N8S20507C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20507C1D0Ev,_ZTv0_n44_N8S20507C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N8S20507C1D0Ev,_ZThn17988_N8S20507C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20507C1D1Ev,_ZTv0_n44_N8S20507C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N8S20507C1D1Ev,_ZThn17988_N8S20507C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20507C1D0Ev,_ZTv0_n56_N8S20507C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S20507C1D0Ev,_ZThn4924_N8S20507C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20507C1D1Ev,_ZTv0_n56_N8S20507C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7024_N8S20507C1D1Ev,_ZThn4924_N8S20507C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20507C1 = {  "S20507C1", // class name
  bases_S20507C1, 52,
  &(vtc_S20507C1[0]), // expected_vtbl_contents
  &(vtt_S20507C1[0]), // expected_vtt_contents
  ABISELECT(116000,81168), // object size
  NSPAIRA(_ZTI8S20507C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20507C1),263, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20507C1),181, //virtual table table var
  38, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19921C2  {
  __tsi64 s19921c2f0[8];
  char s19921c2f1[4];
  int s19921c2f2:7;
  int s19921c2f3;
  long double s19921c2f4;
  __tsi64 s19921c2f5;
  virtual void  v1(); // _ZN8S19921C22v1Ev
  ~S19921C2(); // tgen
  S19921C2(); // tgen
};
//SIG(-1 S19921C2) C1{ v1 FL[8] Fc[4] Fi:7 Fi FD FL}


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

static void Test_S19921C2()
{
  extern Class_Descriptor cd_S19921C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S19921C2, buf);
    S19921C2 *dp, &lv = *(dp=new (buf) S19921C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S19921C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C2)");
    check_field_offset(lv, s19921c2f0, ABISELECT(8,4), "S19921C2.s19921c2f0");
    check_field_offset(lv, s19921c2f1, ABISELECT(72,68), "S19921C2.s19921c2f1");
    set_bf_and_test(lv, s19921c2f2, ABISELECT(76,72), 0, 7, 1, "S19921C2");
    set_bf_and_test(lv, s19921c2f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S19921C2");
    check_field_offset(lv, s19921c2f3, ABISELECT(80,76), "S19921C2.s19921c2f3");
    check_field_offset(lv, s19921c2f4, ABISELECT(96,80), "S19921C2.s19921c2f4");
    check_field_offset(lv, s19921c2f5, ABISELECT(112,92), "S19921C2.s19921c2f5");
    test_class_info(&lv, &cd_S19921C2);
    dp->~S19921C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C2(Test_S19921C2, "S19921C2", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S19921C2C1Ev();
extern void _ZN8S19921C2D1Ev();
Name_Map name_map_S19921C2[] = {
  NSPAIR(_ZN8S19921C2C1Ev),
  NSPAIR(_ZN8S19921C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19921C2[];
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY vtc_S19921C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C2[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
Class_Descriptor cd_S19921C2 = {  "S19921C2", // class name
  0,0,//no base classes
  &(vtc_S19921C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S19921C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19921C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S19921C7  {
  int s19921c7f0;
  void *s19921c7f1;
  void *s19921c7f2;
  void *s19921c7f3;
  __tsi64 s19921c7f4[3];
  char s19921c7f5;
  __tsi64 s19921c7f6;
  int s19921c7f7[7];
  void  mf19921c7(); // _ZN8S19921C79mf19921c7Ev
};
//SIG(1 S19921C7) U1{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19921C6  : S19921C2 {
  ::S19921C2 s19921c6f0;
  ::S19921C2 s19921c6f1;
  ::S19921C7 s19921c6f2;
  virtual void  v2(); // _ZN8S19921C62v2Ev
  ~S19921C6(); // tgen
  S19921C6(); // tgen
};
//SIG(-1 S19921C6) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


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

static void Test_S19921C6()
{
  extern Class_Descriptor cd_S19921C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S19921C6, buf);
    S19921C6 *dp, &lv = *(dp=new (buf) S19921C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S19921C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C6)");
    check_base_class_offset(lv, (S19921C2*), 0, "S19921C6");
    check_field_offset(lv, s19921c6f0, ABISELECT(128,100), "S19921C6.s19921c6f0");
    check_field_offset(lv, s19921c6f1, ABISELECT(256,200), "S19921C6.s19921c6f1");
    check_field_offset(lv, s19921c6f2, ABISELECT(384,300), "S19921C6.s19921c6f2");
    test_class_info(&lv, &cd_S19921C6);
    dp->~S19921C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C6(Test_S19921C6, "S19921C6", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S19921C6C1Ev();
extern void _ZN8S19921C6D1Ev();
Name_Map name_map_S19921C6[] = {
  NSPAIR(_ZN8S19921C6C1Ev),
  NSPAIR(_ZN8S19921C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
static Base_Class bases_S19921C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19921C6[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY vtc_S19921C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C6[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
Class_Descriptor cd_S19921C6 = {  "S19921C6", // class name
  bases_S19921C6, 1,
  &(vtc_S19921C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S19921C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19921C6),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  S19921C8  {
  char s19921c8f0;
  ::S19921C7 s19921c8f1;
  ::S19921C2 s19921c8f2;
  __tsi64 s19921c8f3;
  ::S19921C7 s19921c8f4[3];
  char s19921c8f5;
  void  mf19921c8(); // _ZN8S19921C89mf19921c8Ev
};
//SIG(-1 S19921C8) C1{ m Fc FU2{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU2[3] Fc}


void  S19921C8 ::mf19921c8(){}

static void Test_S19921C8()
{
  {
    init_simple_test("S19921C8");
    static S19921C8 lv;
    check2(sizeof(lv), ABISELECT(288,228), "sizeof(S19921C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C8)");
    check_field_offset(lv, s19921c8f0, 0, "S19921C8.s19921c8f0");
    check_field_offset(lv, s19921c8f1, ABISELECT(8,4), "S19921C8.s19921c8f1");
    check_field_offset(lv, s19921c8f2, ABISELECT(48,32), "S19921C8.s19921c8f2");
    check_field_offset(lv, s19921c8f3, ABISELECT(176,132), "S19921C8.s19921c8f3");
    check_field_offset(lv, s19921c8f4, ABISELECT(184,140), "S19921C8.s19921c8f4");
    check_field_offset(lv, s19921c8f5, ABISELECT(280,224), "S19921C8.s19921c8f5");
  }
}
static Arrange_To_Call_Me vS19921C8(Test_S19921C8, "S19921C8", ABISELECT(288,228));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19921C8[];
VTBL_ENTRY *P__ZTI8S19921C8 = _ZTI8S19921C8; 
Class_Descriptor cd_S19921C8 = {  "S19921C8", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(288,228), // object size
  NSPAIRA(_ZTI8S19921C8),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  S19921C10  : S19921C2 {
  ::S19921C2 s19921c10f0;
  int s19921c10f1;
  ::S19921C2 s19921c10f2;
  int s19921c10f3;
  char s19921c10f4[6];
  char s19921c10f5:4;
  void *s19921c10f6;
  ::S19921C2 s19921c10f7;
  int s19921c10f8;
  virtual void  v5(); // _ZN9S19921C102v5Ev
  virtual void  v6(); // _ZN9S19921C102v6Ev
  virtual void  v7(); // _ZN9S19921C102v7Ev
  ~S19921C10(); // tgen
  S19921C10(); // tgen
};
//SIG(-1 S19921C10) C1{ BC2{ v4 FL[8] Fc[4] Fi:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S19921C10 ::v5(){vfunc_called(this, "_ZN9S19921C102v5Ev");}
void  S19921C10 ::v6(){vfunc_called(this, "_ZN9S19921C102v6Ev");}
void  S19921C10 ::v7(){vfunc_called(this, "_ZN9S19921C102v7Ev");}
S19921C10 ::~S19921C10(){ note_dtor("S19921C10", this);} // tgen
S19921C10 ::S19921C10(){ note_ctor("S19921C10", this);} // tgen

static void Test_S19921C10()
{
  extern Class_Descriptor cd_S19921C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S19921C10, buf);
    S19921C10 *dp, &lv = *(dp=new (buf) S19921C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S19921C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C10)");
    check_base_class_offset(lv, (S19921C2*), 0, "S19921C10");
    check_field_offset(lv, s19921c10f0, ABISELECT(128,100), "S19921C10.s19921c10f0");
    check_field_offset(lv, s19921c10f1, ABISELECT(256,200), "S19921C10.s19921c10f1");
    check_field_offset(lv, s19921c10f2, ABISELECT(272,204), "S19921C10.s19921c10f2");
    check_field_offset(lv, s19921c10f3, ABISELECT(400,304), "S19921C10.s19921c10f3");
    check_field_offset(lv, s19921c10f4, ABISELECT(404,308), "S19921C10.s19921c10f4");
    set_bf_and_test(lv, s19921c10f5, ABISELECT(410,314), 0, 4, 1, "S19921C10");
    set_bf_and_test(lv, s19921c10f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S19921C10");
    check_field_offset(lv, s19921c10f6, ABISELECT(416,316), "S19921C10.s19921c10f6");
    check_field_offset(lv, s19921c10f7, ABISELECT(432,320), "S19921C10.s19921c10f7");
    check_field_offset(lv, s19921c10f8, ABISELECT(560,420), "S19921C10.s19921c10f8");
    test_class_info(&lv, &cd_S19921C10);
    dp->~S19921C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C10(Test_S19921C10, "S19921C10", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN9S19921C10C1Ev();
extern void _ZN9S19921C10D1Ev();
Name_Map name_map_S19921C10[] = {
  NSPAIR(_ZN9S19921C10C1Ev),
  NSPAIR(_ZN9S19921C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
static Base_Class bases_S19921C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19921C10[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY vtc_S19921C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C10[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
Class_Descriptor cd_S19921C10 = {  "S19921C10", // class name
  bases_S19921C10, 1,
  &(vtc_S19921C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI9S19921C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19921C10),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  S19921C9  : S19921C10 , virtual S19921C8 , S19921C2 , virtual S19921C6 {
  long s19921c9f0;
  __tsi64 s19921c9f1;
  ~S19921C9(); // tgen
  S19921C9(); // tgen
};
//SIG(-1 S19921C9) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC3 FL FU5[3] Fc} BC3 VBC6{ BC3 v5 FC3 FC3 FU5} Fl FL}


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

static void Test_S19921C9()
{
  extern Class_Descriptor cd_S19921C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,274)];
    init_test(&cd_S19921C9, buf);
    S19921C9 *dp, &lv = *(dp=new (buf) S19921C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1092), "sizeof(S19921C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C9)");
    check_base_class_offset(lv, (S19921C2*)(S19921C10*), 0, "S19921C9");
    check_base_class_offset(lv, (S19921C10*), 0, "S19921C9");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(720,536), "S19921C9");
    /*is_ambiguous_... S19921C9::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*), ABISELECT(576,424), "S19921C9");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(1008,764), "S19921C9");
    check_base_class_offset(lv, (S19921C6*), ABISELECT(1008,764), "S19921C9");
    check_field_offset(lv, s19921c9f0, ABISELECT(696,524), "S19921C9.s19921c9f0");
    check_field_offset(lv, s19921c9f1, ABISELECT(704,528), "S19921C9.s19921c9f1");
    test_class_info(&lv, &cd_S19921C9);
    dp->~S19921C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C9(Test_S19921C9, "S19921C9", ABISELECT(1424,1092));

#else // __cplusplus

extern void _ZN8S19921C9C1Ev();
extern void _ZN8S19921C9D1Ev();
Name_Map name_map_S19921C9[] = {
  NSPAIR(_ZN8S19921C9C1Ev),
  NSPAIR(_ZN8S19921C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
static Base_Class bases_S19921C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19921C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C8,    ABISELECT(720,536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19921C2,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C2,    ABISELECT(1008,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C6,    ABISELECT(1008,764), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19921C9[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY vtc_S19921C9[] = {
  ABISELECT(1008,764),
  ABISELECT(720,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  0,
  ABISELECT(-1008,-764),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S19921C9[];
static  VTT_ENTRY vtt_S19921C9[] = {
  {&(_ZTV8S19921C9[4]),  4,17},
  {&(_ZTV8S19921C9[15]),  15,17},
};
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
Class_Descriptor cd_S19921C9 = {  "S19921C9", // class name
  bases_S19921C9, 6,
  &(vtc_S19921C9[0]), // expected_vtbl_contents
  &(vtt_S19921C9[0]), // expected_vtt_contents
  ABISELECT(1424,1092), // object size
  NSPAIRA(_ZTI8S19921C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19921C9),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19921C9),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19921C12  {
  long double s19921c12f0;
  void *s19921c12f1[10];
  long double s19921c12f2;
  int  :0;
  int s19921c12f4;
  long double s19921c12f5;
  ::S19921C6 s19921c12f6;
  char s19921c12f7:8;
  __tsi64 s19921c12f8;
  long double s19921c12f9;
  ::S19921C10 s19921c12f10;
  void  mf19921c12(); // _ZN9S19921C1210mf19921c12Ev
};
//SIG(-1 S19921C12) C1{ m FD Fp[10] FD Fi:0 Fi FD FC2{ BC3{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} v1 FC3 FC3 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 FL FD FC5{ BC3 v3 v4 v5 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi}}


void  S19921C12 ::mf19921c12(){}

static void Test_S19921C12()
{
  {
    init_simple_test("S19921C12");
    static S19921C12 lv;
    check2(sizeof(lv), ABISELECT(1168,856), "sizeof(S19921C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C12)");
    check_field_offset(lv, s19921c12f0, 0, "S19921C12.s19921c12f0");
    check_field_offset(lv, s19921c12f1, ABISELECT(16,12), "S19921C12.s19921c12f1");
    check_field_offset(lv, s19921c12f2, ABISELECT(96,52), "S19921C12.s19921c12f2");
    check_field_offset(lv, s19921c12f4, ABISELECT(112,64), "S19921C12.s19921c12f4");
    check_field_offset(lv, s19921c12f5, ABISELECT(128,68), "S19921C12.s19921c12f5");
    check_field_offset(lv, s19921c12f6, ABISELECT(144,80), "S19921C12.s19921c12f6");
    set_bf_and_test(lv, s19921c12f7, ABISELECT(560,408), 0, 8, 1, "S19921C12");
    set_bf_and_test(lv, s19921c12f7, ABISELECT(560,408), 0, 8, hide_sll(1LL<<7), "S19921C12");
    check_field_offset(lv, s19921c12f8, ABISELECT(568,412), "S19921C12.s19921c12f8");
    check_field_offset(lv, s19921c12f9, ABISELECT(576,420), "S19921C12.s19921c12f9");
    check_field_offset(lv, s19921c12f10, ABISELECT(592,432), "S19921C12.s19921c12f10");
  }
}
static Arrange_To_Call_Me vS19921C12(Test_S19921C12, "S19921C12", ABISELECT(1168,856));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19921C12[];
VTBL_ENTRY *P__ZTI9S19921C12 = _ZTI9S19921C12; 
Class_Descriptor cd_S19921C12 = {  "S19921C12", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(1168,856), // object size
  NSPAIRA(_ZTI9S19921C12),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  S19921C11  {
  long double s19921c11f0;
  void *s19921c11f1;
  long double s19921c11f2[8];
  void *s19921c11f3[9];
  ::S19921C12 s19921c11f4;
  int s19921c11f5;
  char s19921c11f6;
  long double s19921c11f7[4];
  char s19921c11f8;
  int s19921c11f9;
  virtual void  v12(); // _ZN9S19921C113v12Ev
  ~S19921C11(); // tgen
  S19921C11(); // tgen
};
//SIG(-1 S19921C11) C1{ v1 FD Fp FD[8] Fp[9] FC2{ m FD Fp[10] FD Fi:0 Fi FD FC3{ BC4{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} v2 FC4 FC4 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 FL FD FC6{ BC4 v4 v5 v6 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi}} Fi Fc FD[4] Fc Fi}


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

static void Test_S19921C11()
{
  extern Class_Descriptor cd_S19921C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,269)];
    init_test(&cd_S19921C11, buf);
    S19921C11 *dp, &lv = *(dp=new (buf) S19921C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1072), "sizeof(S19921C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C11)");
    check_field_offset(lv, s19921c11f0, ABISELECT(16,4), "S19921C11.s19921c11f0");
    check_field_offset(lv, s19921c11f1, ABISELECT(32,16), "S19921C11.s19921c11f1");
    check_field_offset(lv, s19921c11f2, ABISELECT(48,20), "S19921C11.s19921c11f2");
    check_field_offset(lv, s19921c11f3, ABISELECT(176,116), "S19921C11.s19921c11f3");
    check_field_offset(lv, s19921c11f4, ABISELECT(256,152), "S19921C11.s19921c11f4");
    check_field_offset(lv, s19921c11f5, ABISELECT(1424,1008), "S19921C11.s19921c11f5");
    check_field_offset(lv, s19921c11f6, ABISELECT(1428,1012), "S19921C11.s19921c11f6");
    check_field_offset(lv, s19921c11f7, ABISELECT(1440,1016), "S19921C11.s19921c11f7");
    check_field_offset(lv, s19921c11f8, ABISELECT(1504,1064), "S19921C11.s19921c11f8");
    check_field_offset(lv, s19921c11f9, ABISELECT(1508,1068), "S19921C11.s19921c11f9");
    test_class_info(&lv, &cd_S19921C11);
    dp->~S19921C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C11(Test_S19921C11, "S19921C11", ABISELECT(1520,1072));

#else // __cplusplus

extern void _ZN9S19921C11C1Ev();
extern void _ZN9S19921C11D1Ev();
Name_Map name_map_S19921C11[] = {
  NSPAIR(_ZN9S19921C11C1Ev),
  NSPAIR(_ZN9S19921C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19921C11[];
extern void _ZN9S19921C113v12Ev();
static  VTBL_ENTRY vtc_S19921C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C11[0]),
  (VTBL_ENTRY)&_ZN9S19921C113v12Ev,
};
extern VTBL_ENTRY _ZTI9S19921C11[];
extern  VTBL_ENTRY _ZTV9S19921C11[];
Class_Descriptor cd_S19921C11 = {  "S19921C11", // class name
  0,0,//no base classes
  &(vtc_S19921C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1520,1072), // object size
  NSPAIRA(_ZTI9S19921C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19921C11),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  S19921C5  : S19921C2 , S19921C6 , S19921C8 {
  ::S19921C7 s19921c5f0;
  char s19921c5f1;
  char s19921c5f2;
  ::S19921C9 s19921c5f3;
  ::S19921C11 s19921c5f4;
  int s19921c5f5;
  long s19921c5f6;
  virtual void  v3(); // _ZN8S19921C52v3Ev
  virtual void  v4(); // _ZN8S19921C52v4Ev
  ~S19921C5(); // tgen
  S19921C5(); // tgen
};
//SIG(-1 S19921C5) C1{ BC2{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC2 FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC6{ BC7{ BC2 v5 v6 v7 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl FL} FC8{ v8 FD Fp FD[8] Fp[9] FC9{ m FD Fp[10] FD Fi:0 Fi FD FC3 Fc:8 FL FD FC7} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S19921C5 ::v3(){vfunc_called(this, "_ZN8S19921C52v3Ev");}
void  S19921C5 ::v4(){vfunc_called(this, "_ZN8S19921C52v4Ev");}
S19921C5 ::~S19921C5(){ note_dtor("S19921C5", this);} // tgen
S19921C5 ::S19921C5(){ note_ctor("S19921C5", this);} // tgen

static void Test_S19921C5()
{
  extern Class_Descriptor cd_S19921C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,716)];
    init_test(&cd_S19921C5, buf);
    S19921C5 *dp, &lv = *(dp=new (buf) S19921C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2860), "sizeof(S19921C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C5)");
    /*is_ambiguous_... S19921C5::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*), 0, "S19921C5");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(128,100), "S19921C5");
    check_base_class_offset(lv, (S19921C6*), ABISELECT(128,100), "S19921C5");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(544,428), "S19921C5");
    check_field_offset(lv, s19921c5f0, ABISELECT(832,656), "S19921C5.s19921c5f0");
    check_field_offset(lv, s19921c5f1, ABISELECT(864,684), "S19921C5.s19921c5f1");
    check_field_offset(lv, s19921c5f2, ABISELECT(865,685), "S19921C5.s19921c5f2");
    check_field_offset(lv, s19921c5f3, ABISELECT(880,688), "S19921C5.s19921c5f3");
    check_field_offset(lv, s19921c5f4, ABISELECT(2304,1780), "S19921C5.s19921c5f4");
    check_field_offset(lv, s19921c5f5, ABISELECT(3824,2852), "S19921C5.s19921c5f5");
    check_field_offset(lv, s19921c5f6, ABISELECT(3832,2856), "S19921C5.s19921c5f6");
    test_class_info(&lv, &cd_S19921C5);
    dp->~S19921C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C5(Test_S19921C5, "S19921C5", ABISELECT(3840,2860));

#else // __cplusplus

extern void _ZN8S19921C5C1Ev();
extern void _ZN8S19921C5D1Ev();
Name_Map name_map_S19921C5[] = {
  NSPAIR(_ZN8S19921C5C1Ev),
  NSPAIR(_ZN8S19921C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S19921C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C2,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19921C6,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19921C5[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY vtc_S19921C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C5[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19921C5[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S19921C5[];
extern  VTBL_ENTRY _ZTV8S19921C5[];
Class_Descriptor cd_S19921C5 = {  "S19921C5", // class name
  bases_S19921C5, 4,
  &(vtc_S19921C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2860), // object size
  NSPAIRA(_ZTI8S19921C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19921C5),9, //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  S19921C13  : S19921C2 , virtual S19921C10 , virtual S19921C6 , S19921C9 , S19921C8 {
  int s19921c13f0;
  virtual void  v8(); // _ZN9S19921C132v8Ev
  ~S19921C13(); // tgen
  S19921C13(); // tgen
};
//SIG(-1 S19921C13) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC2 FL FU5[3] Fc} BC2 VBC4 Fl FL} BC7 v1 Fi}


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

static void Test_S19921C13()
{
  extern Class_Descriptor cd_S19921C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,463)];
    init_test(&cd_S19921C13, buf);
    S19921C13 *dp, &lv = *(dp=new (buf) S19921C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1848), "sizeof(S19921C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C13)");
    /*is_ambiguous_... S19921C13::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*), 0, "S19921C13");
    /*is_ambiguous_... S19921C13::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C10*), ABISELECT(1136,868), "S19921C13");
    /*is_ambiguous_... S19921C13::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C10*), ABISELECT(1136,868), "S19921C13");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(1712,1292), "S19921C13");
    check_base_class_offset(lv, (S19921C6*), ABISELECT(1712,1292), "S19921C13");
    check_base_class_offset(lv, (S19921C6*)(S19921C9*), ABISELECT(1712,1292), "S19921C13");
    check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*), ABISELECT(128,100), "S19921C13");
    check_base_class_offset(lv, (S19921C10*)(S19921C9*), ABISELECT(128,100), "S19921C13");
    check_base_class_offset(lv, (S19921C8*)(S19921C9*), ABISELECT(2128,1620), "S19921C13");
    /*is_ambiguous_... S19921C9::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*), ABISELECT(704,524), "S19921C13");
    check_base_class_offset(lv, (S19921C9*), ABISELECT(128,100), "S19921C13");
    /*is_ambiguous_... S19921C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(848,636), "S19921C13");
    check_field_offset(lv, s19921c13f0, ABISELECT(1132,864), "S19921C13.s19921c13f0");
    test_class_info(&lv, &cd_S19921C13);
    dp->~S19921C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C13(Test_S19921C13, "S19921C13", ABISELECT(2416,1848));

#else // __cplusplus

extern void _ZN9S19921C13C1Ev();
extern void _ZN9S19921C13D1Ev();
Name_Map name_map_S19921C13[] = {
  NSPAIR(_ZN9S19921C13C1Ev),
  NSPAIR(_ZN9S19921C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S19921C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(1136,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(1136,868), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C2,    ABISELECT(1712,1292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C6,    ABISELECT(1712,1292), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C2,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(2128,1620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19921C9,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(848,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19921C13[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY vtc_S19921C13[] = {
  ABISELECT(2128,1620),
  ABISELECT(1712,1292),
  ABISELECT(1136,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-868),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  0,
  0,
  ABISELECT(-1712,-1292),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S19921C13[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C13[] = {
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C9__9S19921C13[] = {
  0,
  0,
  ABISELECT(-1584,-1192),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
static  VTT_ENTRY vtt_S19921C13[] = {
  {&(_ZTV9S19921C13[5]),  5,34},
  {&(_tg__ZTV8S19921C9__9S19921C13[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C9__9S19921C13[4]),  4,6},
  {&(_ZTV9S19921C13[24]),  24,34},
  {&(_ZTV9S19921C13[32]),  32,34},
  {&(_ZTV9S19921C13[11]),  11,34},
};
extern VTBL_ENTRY _ZTI9S19921C13[];
extern  VTBL_ENTRY _ZTV9S19921C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C13[];
Class_Descriptor cd_S19921C13 = {  "S19921C13", // class name
  bases_S19921C13, 11,
  &(vtc_S19921C13[0]), // expected_vtbl_contents
  &(vtt_S19921C13[0]), // expected_vtt_contents
  ABISELECT(2416,1848), // object size
  NSPAIRA(_ZTI9S19921C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19921C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19921C13),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19921C4  : S19921C5 , S19921C13 , S19921C12 , S19921C8 , virtual S19921C2 {
  void *s19921c4f0;
  long double s19921c4f1;
  int s19921c4f2;
  int s19921c4f3;
  char s19921c4f4[7];
  ~S19921C4(); // tgen
  S19921C4(); // tgen
};
//SIG(-1 S19921C4) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC3 FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC7{ BC8{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl FL} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC4 Fc:8 FL FD FC8} Fi Fc FD[4] Fc Fi} Fi Fl} BC11{ BC3 VBC8 VBC4 BC7 BC6 v8 Fi} BC10 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S19921C4()
{
  extern Class_Descriptor cd_S19921C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1482)];
    init_test(&cd_S19921C4, buf);
    S19921C4 *dp, &lv = *(dp=new (buf) S19921C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5924), "sizeof(S19921C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C4)");
    /*is_ambiguous_... S19921C5::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C5*), 0, "S19921C4");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*)(S19921C5*), ABISELECT(128,100), "S19921C4");
    check_base_class_offset(lv, (S19921C6*)(S19921C5*), ABISELECT(128,100), "S19921C4");
    check_base_class_offset(lv, (S19921C8*)(S19921C5*), ABISELECT(544,428), "S19921C4");
    check_base_class_offset(lv, (S19921C5*), 0, "S19921C4");
    /*is_ambiguous_... S19921C13::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C13*), ABISELECT(3840,2860), "S19921C4");
    /*is_ambiguous_... S19921C4::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C10*), ABISELECT(6480,4844), "S19921C4");
    /*is_ambiguous_... S19921C13::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C10*)(S19921C13*), ABISELECT(6480,4844), "S19921C4");
    /*is_ambiguous_... S19921C4::S19921C6 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(7056,5268), "S19921C4");
    check_base_class_offset(lv, (S19921C6*)(S19921C13*), ABISELECT(7056,5268), "S19921C4");
    check_base_class_offset(lv, (S19921C6*)(S19921C9*)(S19921C13*), ABISELECT(7056,5268), "S19921C4");
    check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*)(S19921C13*), ABISELECT(3968,2960), "S19921C4");
    check_base_class_offset(lv, (S19921C10*)(S19921C9*)(S19921C13*), ABISELECT(3968,2960), "S19921C4");
    check_base_class_offset(lv, (S19921C8*)(S19921C9*)(S19921C13*), ABISELECT(7472,5596), "S19921C4");
    /*is_ambiguous_... S19921C9::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*)(S19921C13*), ABISELECT(4544,3384), "S19921C4");
    check_base_class_offset(lv, (S19921C9*)(S19921C13*), ABISELECT(3968,2960), "S19921C4");
    /*is_ambiguous_... S19921C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C13*), ABISELECT(4688,3496), "S19921C4");
    check_base_class_offset(lv, (S19921C13*), ABISELECT(3840,2860), "S19921C4");
    check_base_class_offset(lv, (S19921C12*), ABISELECT(4976,3728), "S19921C4");
    /*is_ambiguous_... S19921C4::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(6144,4584), "S19921C4");
    /*is_ambiguous_... S19921C4::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*), ABISELECT(7760,5824), "S19921C4");
    check_field_offset(lv, s19921c4f0, ABISELECT(6432,4812), "S19921C4.s19921c4f0");
    check_field_offset(lv, s19921c4f1, ABISELECT(6448,4816), "S19921C4.s19921c4f1");
    check_field_offset(lv, s19921c4f2, ABISELECT(6464,4828), "S19921C4.s19921c4f2");
    check_field_offset(lv, s19921c4f3, ABISELECT(6468,4832), "S19921C4.s19921c4f3");
    check_field_offset(lv, s19921c4f4, ABISELECT(6472,4836), "S19921C4.s19921c4f4");
    test_class_info(&lv, &cd_S19921C4);
    dp->~S19921C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C4(Test_S19921C4, "S19921C4", ABISELECT(7888,5924));

#else // __cplusplus

extern void _ZN8S19921C4C1Ev();
extern void _ZN8S19921C4D1Ev();
Name_Map name_map_S19921C4[] = {
  NSPAIR(_ZN8S19921C4C1Ev),
  NSPAIR(_ZN8S19921C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C5;
extern VTBL_ENTRY _ZTI8S19921C5[];
extern  VTBL_ENTRY _ZTV8S19921C5[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C13;
extern VTBL_ENTRY _ZTI9S19921C13[];
extern  VTBL_ENTRY _ZTV9S19921C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
static Base_Class bases_S19921C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C2,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19921C6,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C2,    ABISELECT(3840,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C2,    ABISELECT(6480,4844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C10,    ABISELECT(6480,4844), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(7056,5268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C6,    ABISELECT(7056,5268), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7472,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(4544,3384), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19921C9,    ABISELECT(3968,2960), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(4688,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C13,    ABISELECT(3840,2860), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C12,    ABISELECT(4976,3728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(6144,4584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C2,    ABISELECT(7760,5824), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19921C4[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY vtc_S19921C4[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-4544,-3384),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19921C4[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C13__8S19921C4[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C13__8S19921C4[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C99S19921C13__8S19921C4[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__9S19921C13__8S19921C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__9S19921C13__8S19921C4[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C13__8S19921C4[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
static  VTT_ENTRY vtt_S19921C4[] = {
  {&(_ZTV8S19921C4[6]),  6,51},
  {&(_tg__ZTV9S19921C13__8S19921C4[5]),  5,7},
  {&(_tg__ZTV8S19921C99S19921C13__8S19921C4[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C99S19921C13__8S19921C4[4]),  4,6},
  {&(_tg__ZTV9S19921C10__9S19921C13__8S19921C4[6]),  6,10},
  {&(_tg__ZTV8S19921C6__9S19921C13__8S19921C4[4]),  4,6},
  {&(_tg__ZTV8S19921C9__9S19921C13__8S19921C4[4]),  4,8},
  {&(_ZTV8S19921C4[18]),  18,51},
  {&(_ZTV8S19921C4[37]),  37,51},
  {&(_ZTV8S19921C4[45]),  45,51},
  {&(_ZTV8S19921C4[24]),  24,51},
  {&(_ZTV8S19921C4[50]),  50,51},
};
extern VTBL_ENTRY _ZTI8S19921C4[];
extern  VTBL_ENTRY _ZTV8S19921C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C4[];
Class_Descriptor cd_S19921C4 = {  "S19921C4", // class name
  bases_S19921C4, 20,
  &(vtc_S19921C4[0]), // expected_vtbl_contents
  &(vtt_S19921C4[0]), // expected_vtt_contents
  ABISELECT(7888,5924), // object size
  NSPAIRA(_ZTI8S19921C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19921C4),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19921C4),12, //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  S19921C14  : virtual S19921C8 , virtual S19921C9 {
  int s19921c14f0;
  void *s19921c14f1;
  unsigned char s19921c14f2:1;
  int s19921c14f3;
  int s19921c14f4;
  void *s19921c14f5;
  int s19921c14f6;
  int s19921c14f7;
  int s19921c14f8;
  int s19921c14f9[8];
  char s19921c14f10;
  virtual  ~S19921C14(); // _ZN9S19921C14D2Ev
  virtual void  v13(); // _ZN9S19921C143v13Ev
  virtual void  v14(); // _ZN9S19921C143v14Ev
  S19921C14(); // tgen
};
//SIG(-1 S19921C14) C1{ VBC2{ m Fc FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC4{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU3[3] Fc} VBC5{ BC6{ BC4 v4 v5 v6 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC2 BC4 VBC7{ BC4 v7 FC4 FC4 FU3} Fl FL} vd v1 v2 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc}


 S19921C14 ::~S19921C14(){ note_dtor("S19921C14", this);}
void  S19921C14 ::v13(){vfunc_called(this, "_ZN9S19921C143v13Ev");}
void  S19921C14 ::v14(){vfunc_called(this, "_ZN9S19921C143v14Ev");}
S19921C14 ::S19921C14(){ note_ctor("S19921C14", this);} // tgen

static void Test_S19921C14()
{
  extern Class_Descriptor cd_S19921C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,293)];
    init_test(&cd_S19921C14, buf);
    S19921C14 *dp, &lv = *(dp=new (buf) S19921C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1168), "sizeof(S19921C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C14)");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(96,76), "S19921C14");
    check_base_class_offset(lv, (S19921C8*)(S19921C9*), ABISELECT(96,76), "S19921C14");
    check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*), ABISELECT(384,304), "S19921C14");
    check_base_class_offset(lv, (S19921C10*)(S19921C9*), ABISELECT(384,304), "S19921C14");
    /*is_ambiguous_... S19921C9::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*), ABISELECT(960,728), "S19921C14");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(1104,840), "S19921C14");
    check_base_class_offset(lv, (S19921C6*)(S19921C9*), ABISELECT(1104,840), "S19921C14");
    check_base_class_offset(lv, (S19921C9*), ABISELECT(384,304), "S19921C14");
    check_field_offset(lv, s19921c14f0, ABISELECT(8,4), "S19921C14.s19921c14f0");
    check_field_offset(lv, s19921c14f1, ABISELECT(16,8), "S19921C14.s19921c14f1");
    set_bf_and_test(lv, s19921c14f2, ABISELECT(24,12), 0, 1, 1, "S19921C14");
    check_field_offset(lv, s19921c14f3, ABISELECT(28,16), "S19921C14.s19921c14f3");
    check_field_offset(lv, s19921c14f4, ABISELECT(32,20), "S19921C14.s19921c14f4");
    check_field_offset(lv, s19921c14f5, ABISELECT(40,24), "S19921C14.s19921c14f5");
    check_field_offset(lv, s19921c14f6, ABISELECT(48,28), "S19921C14.s19921c14f6");
    check_field_offset(lv, s19921c14f7, ABISELECT(52,32), "S19921C14.s19921c14f7");
    check_field_offset(lv, s19921c14f8, ABISELECT(56,36), "S19921C14.s19921c14f8");
    check_field_offset(lv, s19921c14f9, ABISELECT(60,40), "S19921C14.s19921c14f9");
    check_field_offset(lv, s19921c14f10, ABISELECT(92,72), "S19921C14.s19921c14f10");
    test_class_info(&lv, &cd_S19921C14);
    dp->~S19921C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C14(Test_S19921C14, "S19921C14", ABISELECT(1520,1168));

#else // __cplusplus

extern void _ZN9S19921C14C1Ev();
extern void _ZN9S19921C14D2Ev();
Name_Map name_map_S19921C14[] = {
  NSPAIR(_ZN9S19921C14C1Ev),
  NSPAIR(_ZN9S19921C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
static Base_Class bases_S19921C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C8,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C2,    ABISELECT(384,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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(384,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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(960,728), //bcp->offset
    21, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(1104,840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C6,    ABISELECT(1104,840), //bcp->offset
    24, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19921C9,    ABISELECT(384,304), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19921C14[];
extern void _ZN9S19921C14D1Ev();
extern void _ZN9S19921C14D0Ev();
extern void _ZN9S19921C143v13Ev();
extern void _ZN9S19921C143v14Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY vtc_S19921C14[] = {
  ABISELECT(1104,840),
  ABISELECT(384,304),
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C14[0]),
  (VTBL_ENTRY)&_ZN9S19921C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19921C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19921C143v13Ev,
  (VTBL_ENTRY)&_ZN9S19921C143v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  ABISELECT(-384,-304),
  (VTBL_ENTRY)&(_ZTI9S19921C14[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-960,-728),
  (VTBL_ENTRY)&(_ZTI9S19921C14[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  0,
  ABISELECT(-1104,-840),
  (VTBL_ENTRY)&(_ZTI9S19921C14[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S19921C14[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C14[] = {
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C9__9S19921C14[] = {
  0,
  0,
  ABISELECT(-720,-536),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
static  VTT_ENTRY vtt_S19921C14[] = {
  {&(_ZTV9S19921C14[5]),  5,30},
  {&(_ZTV9S19921C14[17]),  17,30},
  {&(_ZTV9S19921C14[23]),  23,30},
  {&(_ZTV9S19921C14[28]),  28,30},
  {&(_tg__ZTV8S19921C9__9S19921C14[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C9__9S19921C14[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19921C14[];
extern  VTBL_ENTRY _ZTV9S19921C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C14[];
Class_Descriptor cd_S19921C14 = {  "S19921C14", // class name
  bases_S19921C14, 7,
  &(vtc_S19921C14[0]), // expected_vtbl_contents
  &(vtt_S19921C14[0]), // expected_vtt_contents
  ABISELECT(1520,1168), // object size
  NSPAIRA(_ZTI9S19921C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19921C14),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19921C14),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19921C3  : virtual S19921C4 , virtual S19921C12 {
  ::S19921C9 s19921c3f0;
  int s19921c3f1;
  void *s19921c3f2;
  int s19921c3f3:32;
  int s19921c3f4;
  ::S19921C14 s19921c3f5;
  char  :0;
  void *s19921c3f7;
  long double s19921c3f8;
  virtual  ~S19921C3(); // _ZN8S19921C3D2Ev
  virtual void  v9(); // _ZN8S19921C32v9Ev
  S19921C3(); // tgen
};
//SIG(-1 S19921C3) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} BC5{ BC4 v3 FC4 FC4 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC7{ m Fc FU6 FC4 FL FU6[3] Fc} v4 v5 FU6 Fc Fc FC8{ BC9{ BC4 v6 v7 v8 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC7 BC4 VBC5 Fl FL} FC10{ v12 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC5 Fc:8 FL FD FC9} Fi Fc FD[4] Fc Fi} Fi Fl} BC12{ BC4 VBC9 VBC5 BC8 BC7 v9 Fi} BC11 BC7 VBC4 Fp FD Fi Fi Fc[7]} VBC11 vd v1 FC8 Fi Fp Fi:32 Fi FC13{ VBC7 VBC8 vd v10 v11 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD}


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

static void Test_S19921C3()
{
  extern Class_Descriptor cd_S19921C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,2270)];
    init_test(&cd_S19921C3, buf);
    S19921C3 *dp, &lv = *(dp=new (buf) S19921C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,9076), "sizeof(S19921C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C3)");
    /*is_ambiguous_... S19921C5::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C5*)(S19921C4*), ABISELECT(3024,2296), "S19921C3");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*)(S19921C5*)(S19921C4*), ABISELECT(3152,2396), "S19921C3");
    check_base_class_offset(lv, (S19921C6*)(S19921C5*)(S19921C4*), ABISELECT(3152,2396), "S19921C3");
    check_base_class_offset(lv, (S19921C8*)(S19921C5*)(S19921C4*), ABISELECT(3568,2724), "S19921C3");
    check_base_class_offset(lv, (S19921C5*)(S19921C4*), ABISELECT(3024,2296), "S19921C3");
    /*is_ambiguous_... S19921C13::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C13*)(S19921C4*), ABISELECT(6864,5156), "S19921C3");
    /*is_ambiguous_... S19921C3::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C10*), ABISELECT(9504,7140), "S19921C3");
    /*is_ambiguous_... S19921C13::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C10*)(S19921C13*)(S19921C4*), ABISELECT(9504,7140), "S19921C3");
    /*is_ambiguous_... S19921C3::S19921C6 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(10080,7564), "S19921C3");
    check_base_class_offset(lv, (S19921C6*)(S19921C13*)(S19921C4*), ABISELECT(10080,7564), "S19921C3");
    check_base_class_offset(lv, (S19921C6*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(10080,7564), "S19921C3");
    check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(6992,5256), "S19921C3");
    check_base_class_offset(lv, (S19921C10*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(6992,5256), "S19921C3");
    check_base_class_offset(lv, (S19921C8*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(10496,7892), "S19921C3");
    /*is_ambiguous_... S19921C9::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(7568,5680), "S19921C3");
    check_base_class_offset(lv, (S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(6992,5256), "S19921C3");
    /*is_ambiguous_... S19921C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C13*)(S19921C4*), ABISELECT(7712,5792), "S19921C3");
    check_base_class_offset(lv, (S19921C13*)(S19921C4*), ABISELECT(6864,5156), "S19921C3");
    check_base_class_offset(lv, (S19921C12*)(S19921C4*), ABISELECT(8000,6024), "S19921C3");
    /*is_ambiguous_... S19921C4::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C4*), ABISELECT(9168,6880), "S19921C3");
    /*is_ambiguous_... S19921C4::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C4*), ABISELECT(10784,8120), "S19921C3");
    check_base_class_offset(lv, (S19921C4*), ABISELECT(3024,2296), "S19921C3");
    /*is_ambiguous_... S19921C3::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*), ABISELECT(10912,8220), "S19921C3");
    check_field_offset(lv, s19921c3f0, ABISELECT(16,4), "S19921C3.s19921c3f0");
    check_field_offset(lv, s19921c3f1, ABISELECT(1440,1096), "S19921C3.s19921c3f1");
    check_field_offset(lv, s19921c3f2, ABISELECT(1448,1100), "S19921C3.s19921c3f2");
    set_bf_and_test(lv, s19921c3f3, ABISELECT(1456,1104), 0, 32, 1, "S19921C3");
    set_bf_and_test(lv, s19921c3f3, ABISELECT(1456,1104), 0, 32, hide_sll(1LL<<31), "S19921C3");
    check_field_offset(lv, s19921c3f4, ABISELECT(1460,1108), "S19921C3.s19921c3f4");
    check_field_offset(lv, s19921c3f5, ABISELECT(1472,1112), "S19921C3.s19921c3f5");
    check_field_offset(lv, s19921c3f7, ABISELECT(2992,2280), "S19921C3.s19921c3f7");
    check_field_offset(lv, s19921c3f8, ABISELECT(3008,2284), "S19921C3.s19921c3f8");
    test_class_info(&lv, &cd_S19921C3);
    dp->~S19921C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C3(Test_S19921C3, "S19921C3", ABISELECT(12080,9076));

#else // __cplusplus

extern void _ZN8S19921C3C1Ev();
extern void _ZN8S19921C3D2Ev();
Name_Map name_map_S19921C3[] = {
  NSPAIR(_ZN8S19921C3C1Ev),
  NSPAIR(_ZN8S19921C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C5;
extern VTBL_ENTRY _ZTI8S19921C5[];
extern  VTBL_ENTRY _ZTV8S19921C5[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C13;
extern VTBL_ENTRY _ZTI9S19921C13[];
extern  VTBL_ENTRY _ZTV9S19921C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C4;
extern VTBL_ENTRY _ZTI8S19921C4[];
extern  VTBL_ENTRY _ZTV8S19921C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C4[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
static Base_Class bases_S19921C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    ABISELECT(3024,2296), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C2,    ABISELECT(3152,2396), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19921C6,    ABISELECT(3152,2396), //bcp->offset
    28, //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(3568,2724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C5,    ABISELECT(3024,2296), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(6864,5156), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C2,    ABISELECT(9504,7140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C10,    ABISELECT(9504,7140), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(10080,7564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C6,    ABISELECT(10080,7564), //bcp->offset
    60, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(6992,5256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(6992,5256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(10496,7892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(7568,5680), //bcp->offset
    47, //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19921C9,    ABISELECT(6992,5256), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7712,5792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C13,    ABISELECT(6864,5156), //bcp->offset
    32, //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(8000,6024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(9168,6880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(10784,8120), //bcp->offset
    66, //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_S19921C4,    ABISELECT(3024,2296), //bcp->offset
    11, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C12,    ABISELECT(10912,8220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19921C3[];
extern void _ZN8S19921C3D1Ev();
extern void _ZN8S19921C3D0Ev();
extern void _ZN8S19921C32v9Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY vtc_S19921C3[] = {
  ABISELECT(10912,8220),
  ABISELECT(10784,8120),
  ABISELECT(10496,7892),
  ABISELECT(10080,7564),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19921C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19921C32v9Ev,
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  ABISELECT(-3024,-2296),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
  ABISELECT(-3152,-2396),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-6864,-5156),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-6992,-5256),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-7568,-5680),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7140),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  0,
  0,
  ABISELECT(-10080,-7564),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
  0,
  ABISELECT(-10784,-8120),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19921C3[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C4__8S19921C3[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C138S19921C4__8S19921C3[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C138S19921C4__8S19921C3[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C99S19921C138S19921C4__8S19921C3[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__9S19921C138S19921C4__8S19921C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__9S19921C138S19921C4__8S19921C3[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C138S19921C4__8S19921C3[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C13__8S19921C4__8S19921C3[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__8S19921C4__8S19921C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__A1__8S19921C4__8S19921C3[] = {
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C13__8S19921C4__8S19921C3[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C2__A7__8S19921C4__8S19921C3[] = {
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
static  VTT_ENTRY vtt_S19921C3[] = {
  {&(_ZTV8S19921C3[8]),  8,70},
  {&(_ZTV8S19921C3[25]),  25,70},
  {&(_ZTV8S19921C3[30]),  30,70},
  {&(_ZTV8S19921C3[37]),  37,70},
  {&(_ZTV8S19921C3[56]),  56,70},
  {&(_ZTV8S19921C3[64]),  64,70},
  {&(_ZTV8S19921C3[43]),  43,70},
  {&(_ZTV8S19921C3[49]),  49,70},
  {&(_ZTV8S19921C3[69]),  69,70},
  {&(_tg__ZTV8S19921C4__8S19921C3[6]),  6,9},
  {&(_tg__ZTV9S19921C138S19921C4__8S19921C3[5]),  5,7},
  {&(_tg__ZTV8S19921C99S19921C138S19921C4__8S19921C3[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C99S19921C138S19921C4__8S19921C3[4]),  4,6},
  {&(_tg__ZTV9S19921C10__9S19921C138S19921C4__8S19921C3[6]),  6,10},
  {&(_tg__ZTV8S19921C6__9S19921C138S19921C4__8S19921C3[4]),  4,6},
  {&(_tg__ZTV8S19921C9__9S19921C138S19921C4__8S19921C3[4]),  4,8},
  {&(_tg__ZTV9S19921C13__8S19921C4__8S19921C3[5]),  5,7},
  {&(_tg__ZTV9S19921C10__8S19921C4__8S19921C3[6]),  6,10},
  {&(_tg__ZTV8S19921C6__A1__8S19921C4__8S19921C3[4]),  4,6},
  {&(_tg__ZTV8S19921C99S19921C13__8S19921C4__8S19921C3[4]),  4,8},
  {&(_tg__ZTV8S19921C2__A7__8S19921C4__8S19921C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19921C3[];
extern  VTBL_ENTRY _ZTV8S19921C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C3[];
Class_Descriptor cd_S19921C3 = {  "S19921C3", // class name
  bases_S19921C3, 22,
  &(vtc_S19921C3[0]), // expected_vtbl_contents
  &(vtt_S19921C3[0]), // expected_vtt_contents
  ABISELECT(12080,9076), // object size
  NSPAIRA(_ZTI8S19921C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19921C3),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19921C3),21, //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

union  S19921C16  {
  char s19921c16f0:6;
  void  mf19921c16(); // _ZN9S19921C1610mf19921c16Ev
};
//SIG(1 S19921C16) U1{ m Fc:6}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19921C15  : virtual S19921C9 , S19921C5 {
  ::S19921C10 s19921c15f0;
  ::S19921C10 s19921c15f1;
  __tsi64 s19921c15f2;
  ::S19921C5 s19921c15f3[9];
  ::S19921C16 s19921c15f4;
  void *s19921c15f5;
  char s19921c15f6;
  virtual void  v10(); // _ZN9S19921C153v10Ev
  ~S19921C15(); // tgen
  S19921C15(); // tgen
};
//SIG(-1 S19921C15) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} v3 v4 v5 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC5{ m Fc FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC4 FL FU6[3] Fc} BC4 VBC7{ BC4 v6 FC4 FC4 FU6} Fl FL} BC8{ BC4 BC7 BC5 v7 v8 FU6 Fc Fc FC2 FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC7 Fc:8 FL FD FC3} Fi Fc FD[4] Fc Fi} Fi Fl} v1 FC3 FC3 FL FC8[9] FU11{ m Fc:6} Fp Fc}


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

static void Test_S19921C15()
{
  extern Class_Descriptor cd_S19921C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2565,7641)];
    init_test(&cd_S19921C15, buf);
    S19921C15 *dp, &lv = *(dp=new (buf) S19921C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(41024,30560), "sizeof(S19921C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C15)");
    check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*), ABISELECT(39600,29468), "S19921C15");
    check_base_class_offset(lv, (S19921C10*)(S19921C9*), ABISELECT(39600,29468), "S19921C15");
    check_base_class_offset(lv, (S19921C8*)(S19921C9*), ABISELECT(40320,30004), "S19921C15");
    /*is_ambiguous_... S19921C9::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*), ABISELECT(40176,29892), "S19921C15");
    /*is_ambiguous_... S19921C15::S19921C6 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(40608,30232), "S19921C15");
    check_base_class_offset(lv, (S19921C6*)(S19921C9*), ABISELECT(40608,30232), "S19921C15");
    check_base_class_offset(lv, (S19921C9*), ABISELECT(39600,29468), "S19921C15");
    /*is_ambiguous_... S19921C5::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C5*), 0, "S19921C15");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*)(S19921C5*), ABISELECT(128,100), "S19921C15");
    check_base_class_offset(lv, (S19921C6*)(S19921C5*), ABISELECT(128,100), "S19921C15");
    check_base_class_offset(lv, (S19921C8*)(S19921C5*), ABISELECT(544,428), "S19921C15");
    check_base_class_offset(lv, (S19921C5*), 0, "S19921C15");
    check_field_offset(lv, s19921c15f0, ABISELECT(3840,2860), "S19921C15.s19921c15f0");
    check_field_offset(lv, s19921c15f1, ABISELECT(4416,3284), "S19921C15.s19921c15f1");
    check_field_offset(lv, s19921c15f2, ABISELECT(4992,3708), "S19921C15.s19921c15f2");
    check_field_offset(lv, s19921c15f3, ABISELECT(5008,3716), "S19921C15.s19921c15f3");
    check_field_offset(lv, s19921c15f4, ABISELECT(39568,29456), "S19921C15.s19921c15f4");
    check_field_offset(lv, s19921c15f5, ABISELECT(39576,29460), "S19921C15.s19921c15f5");
    check_field_offset(lv, s19921c15f6, ABISELECT(39584,29464), "S19921C15.s19921c15f6");
    test_class_info(&lv, &cd_S19921C15);
    dp->~S19921C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C15(Test_S19921C15, "S19921C15", ABISELECT(41024,30560));

#else // __cplusplus

extern void _ZN9S19921C15C1Ev();
extern void _ZN9S19921C15D1Ev();
Name_Map name_map_S19921C15[] = {
  NSPAIR(_ZN9S19921C15C1Ev),
  NSPAIR(_ZN9S19921C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C5;
extern VTBL_ENTRY _ZTI8S19921C5[];
extern  VTBL_ENTRY _ZTV8S19921C5[];
static Base_Class bases_S19921C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    ABISELECT(39600,29468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(39600,29468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(40320,30004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(40176,29892), //bcp->offset
    25, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(40608,30232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C6,    ABISELECT(40608,30232), //bcp->offset
    28, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19921C9,    ABISELECT(39600,29468), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(128,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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19921C6,    ABISELECT(128,100), //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
    11, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S19921C15[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
extern void _ZN9S19921C153v10Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY vtc_S19921C15[] = {
  ABISELECT(40608,30232),
  ABISELECT(40320,30004),
  ABISELECT(39600,29468),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
  (VTBL_ENTRY)&_ZN9S19921C153v10Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(1008,764),
  ABISELECT(720,536),
  ABISELECT(-39600,-29468),
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-40176,-29892),
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  0,
  ABISELECT(-40608,-30232),
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S19921C15[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C15[] = {
  ABISELECT(1008,764),
  ABISELECT(720,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C9__9S19921C15[] = {
  0,
  0,
  ABISELECT(-1008,-764),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
static  VTT_ENTRY vtt_S19921C15[] = {
  {&(_ZTV9S19921C15[5]),  5,34},
  {&(_ZTV9S19921C15[21]),  21,34},
  {&(_ZTV9S19921C15[27]),  27,34},
  {&(_ZTV9S19921C15[32]),  32,34},
  {&(_tg__ZTV8S19921C9__9S19921C15[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C9__9S19921C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19921C15[];
extern  VTBL_ENTRY _ZTV9S19921C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C15[];
Class_Descriptor cd_S19921C15 = {  "S19921C15", // class name
  bases_S19921C15, 12,
  &(vtc_S19921C15[0]), // expected_vtbl_contents
  &(vtt_S19921C15[0]), // expected_vtt_contents
  ABISELECT(41024,30560), // object size
  NSPAIRA(_ZTI9S19921C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19921C15),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19921C15),6, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19921C17  : S19921C2 , virtual S19921C12 , virtual S19921C13 {
  void *s19921c17f0;
  long double s19921c17f1;
  int s19921c17f2:4;
  void *s19921c17f3[6];
  ::S19921C2 s19921c17f4;
  int s19921c17f5;
  long s19921c17f6;
  int s19921c17f7;
  __tsi64 s19921c17f8;
  ~S19921C17(); // tgen
  S19921C17(); // tgen
};
//SIG(-1 S19921C17) C1{ BC2{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} VBC3{ m FD Fp[10] FD Fi:0 Fi FD FC4{ BC2 v5 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 FL FD FC6{ BC2 v2 v3 v4 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}} VBC7{ BC2 VBC6 VBC4 BC8{ BC6 VBC9{ m Fc FU5 FC2 FL FU5[3] Fc} BC2 VBC4 Fl FL} BC9 v6 Fi} Fp FD Fi:4 Fp[6] FC2 Fi Fl Fi FL}


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

static void Test_S19921C17()
{
  extern Class_Descriptor cd_S19921C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(248,743)];
    init_test(&cd_S19921C17, buf);
    S19921C17 *dp, &lv = *(dp=new (buf) S19921C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3952,2968), "sizeof(S19921C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C17)");
    /*is_ambiguous_... S19921C17::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*), 0, "S19921C17");
    check_base_class_offset(lv, (S19921C12*), ABISELECT(368,264), "S19921C17");
    /*is_ambiguous_... S19921C13::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C13*), ABISELECT(1536,1120), "S19921C17");
    /*is_ambiguous_... S19921C17::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C10*), ABISELECT(2672,1988), "S19921C17");
    /*is_ambiguous_... S19921C13::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C10*)(S19921C13*), ABISELECT(2672,1988), "S19921C17");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(3248,2412), "S19921C17");
    check_base_class_offset(lv, (S19921C6*)(S19921C13*), ABISELECT(3248,2412), "S19921C17");
    check_base_class_offset(lv, (S19921C6*)(S19921C9*)(S19921C13*), ABISELECT(3248,2412), "S19921C17");
    check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*)(S19921C13*), ABISELECT(1664,1220), "S19921C17");
    check_base_class_offset(lv, (S19921C10*)(S19921C9*)(S19921C13*), ABISELECT(1664,1220), "S19921C17");
    check_base_class_offset(lv, (S19921C8*)(S19921C9*)(S19921C13*), ABISELECT(3664,2740), "S19921C17");
    /*is_ambiguous_... S19921C9::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*)(S19921C13*), ABISELECT(2240,1644), "S19921C17");
    check_base_class_offset(lv, (S19921C9*)(S19921C13*), ABISELECT(1664,1220), "S19921C17");
    /*is_ambiguous_... S19921C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C13*), ABISELECT(2384,1756), "S19921C17");
    check_base_class_offset(lv, (S19921C13*), ABISELECT(1536,1120), "S19921C17");
    check_field_offset(lv, s19921c17f0, ABISELECT(120,100), "S19921C17.s19921c17f0");
    check_field_offset(lv, s19921c17f1, ABISELECT(128,104), "S19921C17.s19921c17f1");
    set_bf_and_test(lv, s19921c17f2, ABISELECT(144,116), 0, 4, 1, "S19921C17");
    set_bf_and_test(lv, s19921c17f2, ABISELECT(144,116), 0, 4, hide_sll(1LL<<3), "S19921C17");
    check_field_offset(lv, s19921c17f3, ABISELECT(152,120), "S19921C17.s19921c17f3");
    check_field_offset(lv, s19921c17f4, ABISELECT(208,144), "S19921C17.s19921c17f4");
    check_field_offset(lv, s19921c17f5, ABISELECT(336,244), "S19921C17.s19921c17f5");
    check_field_offset(lv, s19921c17f6, ABISELECT(344,248), "S19921C17.s19921c17f6");
    check_field_offset(lv, s19921c17f7, ABISELECT(352,252), "S19921C17.s19921c17f7");
    check_field_offset(lv, s19921c17f8, ABISELECT(360,256), "S19921C17.s19921c17f8");
    test_class_info(&lv, &cd_S19921C17);
    dp->~S19921C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C17(Test_S19921C17, "S19921C17", ABISELECT(3952,2968));

#else // __cplusplus

extern void _ZN9S19921C17C1Ev();
extern void _ZN9S19921C17D1Ev();
Name_Map name_map_S19921C17[] = {
  NSPAIR(_ZN9S19921C17C1Ev),
  NSPAIR(_ZN9S19921C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C13;
extern VTBL_ENTRY _ZTI9S19921C13[];
extern  VTBL_ENTRY _ZTV9S19921C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C13[];
static Base_Class bases_S19921C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C12,    ABISELECT(368,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C2,    ABISELECT(1536,1120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(2672,1988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C10,    ABISELECT(2672,1988), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //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
    13, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(3248,2412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C6,    ABISELECT(3248,2412), //bcp->offset
    41, //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
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(1664,1220), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(1664,1220), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(3664,2740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(2240,1644), //bcp->offset
    28, //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
    11, //immediately_derived
  0, 0},
  {&cd_S19921C9,    ABISELECT(1664,1220), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(2384,1756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C13,    ABISELECT(1536,1120), //bcp->offset
    8, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19921C17[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY vtc_S19921C17[] = {
  ABISELECT(3664,2740),
  ABISELECT(3248,2412),
  ABISELECT(2672,1988),
  ABISELECT(1536,1120),
  ABISELECT(368,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  ABISELECT(128,100),
  ABISELECT(128,100),
  ABISELECT(128,100),
  0,
  0,
  ABISELECT(2128,1620),
  ABISELECT(1712,1292),
  ABISELECT(1136,868),
  ABISELECT(-1536,-1120),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  ABISELECT(-1664,-1220),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-2240,-1644),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-2672,-1988),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  0,
  0,
  ABISELECT(-3248,-2412),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S19921C17[];
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C13__9S19921C17[] = {
  ABISELECT(2128,1620),
  ABISELECT(1712,1292),
  ABISELECT(1136,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C13__9S19921C17[] = {
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C99S19921C13__9S19921C17[] = {
  0,
  0,
  ABISELECT(-1584,-1192),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__9S19921C13__9S19921C17[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-868),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__9S19921C13__9S19921C17[] = {
  0,
  0,
  ABISELECT(-1712,-1292),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C13__9S19921C17[] = {
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
static  VTT_ENTRY vtt_S19921C17[] = {
  {&(_ZTV9S19921C17[7]),  7,47},
  {&(_ZTV9S19921C17[18]),  18,47},
  {&(_ZTV9S19921C17[37]),  37,47},
  {&(_ZTV9S19921C17[45]),  45,47},
  {&(_ZTV9S19921C17[24]),  24,47},
  {&(_ZTV9S19921C17[30]),  30,47},
  {&(_tg__ZTV9S19921C13__9S19921C17[5]),  5,7},
  {&(_tg__ZTV8S19921C99S19921C13__9S19921C17[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C99S19921C13__9S19921C17[4]),  4,6},
  {&(_tg__ZTV9S19921C10__9S19921C13__9S19921C17[6]),  6,10},
  {&(_tg__ZTV8S19921C6__9S19921C13__9S19921C17[4]),  4,6},
  {&(_tg__ZTV8S19921C9__9S19921C13__9S19921C17[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S19921C17[];
extern  VTBL_ENTRY _ZTV9S19921C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C17[];
Class_Descriptor cd_S19921C17 = {  "S19921C17", // class name
  bases_S19921C17, 14,
  &(vtc_S19921C17[0]), // expected_vtbl_contents
  &(vtt_S19921C17[0]), // expected_vtt_contents
  ABISELECT(3952,2968), // object size
  NSPAIRA(_ZTI9S19921C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19921C17),47, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19921C17),12, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19921C18  {
  char s19921c18f0;
  int s19921c18f1;
  long double s19921c18f2;
  int s19921c18f3;
  char s19921c18f4;
  int s19921c18f5;
  virtual void  v11(); // _ZN9S19921C183v11Ev
  ~S19921C18(); // tgen
  S19921C18(); // tgen
};
//SIG(-1 S19921C18) C1{ v1 Fc Fi FD Fi Fc Fi}


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

static void Test_S19921C18()
{
  extern Class_Descriptor cd_S19921C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,10)];
    init_test(&cd_S19921C18, buf);
    S19921C18 *dp, &lv = *(dp=new (buf) S19921C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S19921C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C18)");
    check_field_offset(lv, s19921c18f0, ABISELECT(8,4), "S19921C18.s19921c18f0");
    check_field_offset(lv, s19921c18f1, ABISELECT(12,8), "S19921C18.s19921c18f1");
    check_field_offset(lv, s19921c18f2, ABISELECT(16,12), "S19921C18.s19921c18f2");
    check_field_offset(lv, s19921c18f3, ABISELECT(32,24), "S19921C18.s19921c18f3");
    check_field_offset(lv, s19921c18f4, ABISELECT(36,28), "S19921C18.s19921c18f4");
    check_field_offset(lv, s19921c18f5, ABISELECT(40,32), "S19921C18.s19921c18f5");
    test_class_info(&lv, &cd_S19921C18);
    dp->~S19921C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C18(Test_S19921C18, "S19921C18", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN9S19921C18C1Ev();
extern void _ZN9S19921C18D1Ev();
Name_Map name_map_S19921C18[] = {
  NSPAIR(_ZN9S19921C18C1Ev),
  NSPAIR(_ZN9S19921C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19921C18[];
extern void _ZN9S19921C183v11Ev();
static  VTBL_ENTRY vtc_S19921C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C18[0]),
  (VTBL_ENTRY)&_ZN9S19921C183v11Ev,
};
extern VTBL_ENTRY _ZTI9S19921C18[];
extern  VTBL_ENTRY _ZTV9S19921C18[];
Class_Descriptor cd_S19921C18 = {  "S19921C18", // class name
  0,0,//no base classes
  &(vtc_S19921C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI9S19921C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19921C18),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S19921C19  {
  int s19921c19f0:6;
  void  mf19921c19(); // _ZN9S19921C1910mf19921c19Ev
};
//SIG(1 S19921C19) U1{ m Fi:6}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19921C1  : virtual S19921C2 , virtual S19921C3 , virtual S19921C15 , virtual S19921C17 , virtual S19921C18 {
  ::S19921C18 s19921c1f0;
  ::S19921C19 s19921c1f1;
  char s19921c1f2;
  ::S468C20_nt s19921c1f3;
  void *s19921c1f4;
  int s19921c1f5;
  int s19921c1f6;
  ::S19921C4 s19921c1f7;
  virtual  ~S19921C1(); // _ZN8S19921C1D2Ev
  S19921C1(); // tgen
};
//SIG(1 S19921C1) C1{ VBC2{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} VBC3{ VBC4{ BC5{ BC2 BC6{ BC2 v2 FC2 FC2 FU7{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC8{ m Fc FU7 FC2 FL FU7[3] Fc} v3 v4 FU7 Fc Fc FC9{ BC10{ BC2 v5 v6 v7 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC8 BC2 VBC6 Fl FL} FC11{ v12 FD Fp FD[8] Fp[9] FC12{ m FD Fp[10] FD Fi:0 Fi FD FC6 Fc:8 FL FD FC10} Fi Fc FD[4] Fc Fi} Fi Fl} BC13{ BC2 VBC10 VBC6 BC9 BC8 v8 Fi} BC12 BC8 VBC2 Fp FD Fi Fi Fc[7]} VBC12 vd v9 FC9 Fi Fp Fi:32 Fi FC14{ VBC8 VBC9 vd v13 v14 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD} VBC15{ VBC9 BC5 v10 FC10 FC10 FL FC5[9] FU16{ m Fc:6} Fp Fc} VBC17{ BC2 VBC12 VBC13 Fp FD Fi:4 Fp[6] FC2 Fi Fl Fi FL} VBC18{ v11 Fc Fi FD Fi Fc Fi} vd FC18 FU19{ m Fi:6} Fc FC20{} Fp Fi Fi FC4}


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

static void Test_S19921C1()
{
  extern Class_Descriptor cd_S19921C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3872,11559)];
    init_test(&cd_S19921C1, buf);
    S19921C1 *dp, &lv = *(dp=new (buf) S19921C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(61936,46232), "sizeof(S19921C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19921C1)");
    /*is_ambiguous_... S19921C1::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*), ABISELECT(7984,5984), "S19921C1");
    /*is_ambiguous_... S19921C4::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C4*), ABISELECT(7984,5984), "S19921C1");
    /*is_ambiguous_... S19921C5::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C5*)(S19921C4*), ABISELECT(11136,8380), "S19921C1");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*)(S19921C5*)(S19921C4*), ABISELECT(11264,8480), "S19921C1");
    check_base_class_offset(lv, (S19921C6*)(S19921C5*)(S19921C4*), ABISELECT(11264,8480), "S19921C1");
    check_base_class_offset(lv, (S19921C8*)(S19921C5*)(S19921C4*), ABISELECT(11680,8808), "S19921C1");
    check_base_class_offset(lv, (S19921C5*)(S19921C4*), ABISELECT(11136,8380), "S19921C1");
    /*is_ambiguous_... S19921C13::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C13*)(S19921C4*), ABISELECT(14976,11240), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C10*), ABISELECT(17616,13224), "S19921C1");
    /*is_ambiguous_... S19921C13::S19921C10 */ AMB_check_base_class_offset(lv, (S19921C10*)(S19921C13*)(S19921C4*), ABISELECT(17616,13224), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C10*)(S19921C13*), ABISELECT(17616,13224), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C6 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C6*), ABISELECT(18192,13648), "S19921C1");
    check_base_class_offset(lv, (S19921C6*)(S19921C13*)(S19921C4*), ABISELECT(18192,13648), "S19921C1");
    check_base_class_offset(lv, (S19921C6*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(18192,13648), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C9 */ AMB_check_base_class_offset(lv, (S19921C6*)(S19921C9*), ABISELECT(18192,13648), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C6*)(S19921C13*), ABISELECT(18192,13648), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C6*)(S19921C9*)(S19921C13*), ABISELECT(18192,13648), "S19921C1");
    check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(15104,11340), "S19921C1");
    check_base_class_offset(lv, (S19921C10*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(15104,11340), "S19921C1");
    check_base_class_offset(lv, (S19921C8*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(18608,13976), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C9 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C9*), ABISELECT(18608,13976), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C9*)(S19921C13*), ABISELECT(18608,13976), "S19921C1");
    /*is_ambiguous_... S19921C9::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(15680,11764), "S19921C1");
    check_base_class_offset(lv, (S19921C9*)(S19921C13*)(S19921C4*), ABISELECT(15104,11340), "S19921C1");
    /*is_ambiguous_... S19921C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C13*)(S19921C4*), ABISELECT(15824,11876), "S19921C1");
    check_base_class_offset(lv, (S19921C13*)(S19921C4*), ABISELECT(14976,11240), "S19921C1");
    check_base_class_offset(lv, (S19921C12*)(S19921C4*), ABISELECT(16112,12108), "S19921C1");
    /*is_ambiguous_... S19921C4::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C4*), ABISELECT(17280,12964), "S19921C1");
    check_base_class_offset(lv, (S19921C4*)(S19921C3*), ABISELECT(11136,8380), "S19921C1");
    /*is_ambiguous_... S19921C3::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*)(S19921C3*), ABISELECT(18896,14204), "S19921C1");
    check_base_class_offset(lv, (S19921C12*)(S19921C17*), ABISELECT(18896,14204), "S19921C1");
    check_base_class_offset(lv, (S19921C3*), ABISELECT(8112,6084), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C9 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*), ABISELECT(59664,44528), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C9 */ AMB_check_base_class_offset(lv, (S19921C10*)(S19921C9*), ABISELECT(59664,44528), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C9 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*), ABISELECT(60240,44952), "S19921C1");
    check_base_class_offset(lv, (S19921C9*)(S19921C15*), ABISELECT(59664,44528), "S19921C1");
    /*is_ambiguous_... S19921C5::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C5*)(S19921C15*), ABISELECT(20064,15060), "S19921C1");
    check_base_class_offset(lv, (S19921C2*)(S19921C6*)(S19921C5*)(S19921C15*), ABISELECT(20192,15160), "S19921C1");
    check_base_class_offset(lv, (S19921C6*)(S19921C5*)(S19921C15*), ABISELECT(20192,15160), "S19921C1");
    check_base_class_offset(lv, (S19921C8*)(S19921C5*)(S19921C15*), ABISELECT(20608,15488), "S19921C1");
    check_base_class_offset(lv, (S19921C5*)(S19921C15*), ABISELECT(20064,15060), "S19921C1");
    check_base_class_offset(lv, (S19921C15*), ABISELECT(20064,15060), "S19921C1");
    /*is_ambiguous_... S19921C17::S19921C2 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C17*), ABISELECT(60384,45064), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C13*), ABISELECT(60752,45328), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C10*)(S19921C9*)(S19921C13*), ABISELECT(60880,45428), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C10*)(S19921C9*)(S19921C13*), ABISELECT(60880,45428), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C2*)(S19921C9*)(S19921C13*), ABISELECT(61456,45852), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C9*)(S19921C13*), ABISELECT(60880,45428), "S19921C1");
    /*is_ambiguous_... S19921C1::S19921C13 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19921C13*), ABISELECT(61600,45964), "S19921C1");
    check_base_class_offset(lv, (S19921C13*)(S19921C17*), ABISELECT(60752,45328), "S19921C1");
    check_base_class_offset(lv, (S19921C17*), ABISELECT(60384,45064), "S19921C1");
    check_base_class_offset(lv, (S19921C18*), ABISELECT(61888,46196), "S19921C1");
    check_field_offset(lv, s19921c1f0, ABISELECT(16,4), "S19921C1.s19921c1f0");
    check_field_offset(lv, s19921c1f1, ABISELECT(64,40), "S19921C1.s19921c1f1");
    check_field_offset(lv, s19921c1f2, ABISELECT(68,44), "S19921C1.s19921c1f2");
    check_field_offset(lv, s19921c1f3, ABISELECT(69,45), "S19921C1.s19921c1f3");
    check_field_offset(lv, s19921c1f4, ABISELECT(72,48), "S19921C1.s19921c1f4");
    check_field_offset(lv, s19921c1f5, ABISELECT(80,52), "S19921C1.s19921c1f5");
    check_field_offset(lv, s19921c1f6, ABISELECT(84,56), "S19921C1.s19921c1f6");
    check_field_offset(lv, s19921c1f7, ABISELECT(96,60), "S19921C1.s19921c1f7");
    test_class_info(&lv, &cd_S19921C1);
    dp->~S19921C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19921C1(Test_S19921C1, "S19921C1", ABISELECT(61936,46232));

#else // __cplusplus

extern void _ZN8S19921C1C1Ev();
extern void _ZN8S19921C1D2Ev();
Name_Map name_map_S19921C1[] = {
  NSPAIR(_ZN8S19921C1C1Ev),
  NSPAIR(_ZN8S19921C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C5;
extern VTBL_ENTRY _ZTI8S19921C5[];
extern  VTBL_ENTRY _ZTV8S19921C5[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C13;
extern VTBL_ENTRY _ZTI9S19921C13[];
extern  VTBL_ENTRY _ZTV9S19921C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C4;
extern VTBL_ENTRY _ZTI8S19921C4[];
extern  VTBL_ENTRY _ZTV8S19921C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C4[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C3;
extern VTBL_ENTRY _ZTI8S19921C3[];
extern  VTBL_ENTRY _ZTV8S19921C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C3[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C6;
extern VTBL_ENTRY _ZTI8S19921C6[];
extern  VTBL_ENTRY _ZTV8S19921C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C5;
extern VTBL_ENTRY _ZTI8S19921C5[];
extern  VTBL_ENTRY _ZTV8S19921C5[];
extern Class_Descriptor cd_S19921C15;
extern VTBL_ENTRY _ZTI9S19921C15[];
extern  VTBL_ENTRY _ZTV9S19921C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C15[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C10;
extern VTBL_ENTRY _ZTI9S19921C10[];
extern  VTBL_ENTRY _ZTV9S19921C10[];
extern Class_Descriptor cd_S19921C2;
extern VTBL_ENTRY _ZTI8S19921C2[];
extern  VTBL_ENTRY _ZTV8S19921C2[];
extern Class_Descriptor cd_S19921C9;
extern VTBL_ENTRY _ZTI8S19921C9[];
extern  VTBL_ENTRY _ZTV8S19921C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19921C13;
extern VTBL_ENTRY _ZTI9S19921C13[];
extern  VTBL_ENTRY _ZTV9S19921C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C13[];
extern Class_Descriptor cd_S19921C17;
extern VTBL_ENTRY _ZTI9S19921C17[];
extern  VTBL_ENTRY _ZTV9S19921C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19921C17[];
extern Class_Descriptor cd_S19921C18;
extern VTBL_ENTRY _ZTI9S19921C18[];
extern  VTBL_ENTRY _ZTV9S19921C18[];
static Base_Class bases_S19921C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C2,    ABISELECT(7984,5984), //bcp->offset
    16, //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_S19921C2,    ABISELECT(11136,8380), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C2,    ABISELECT(11264,8480), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19921C6,    ABISELECT(11264,8480), //bcp->offset
    50, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(11680,8808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C5,    ABISELECT(11136,8380), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(14976,11240), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C2,    ABISELECT(17616,13224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(17616,13224), //bcp->offset
    72, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(18192,13648), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19921C6,    ABISELECT(18192,13648), //bcp->offset
    82, //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
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(15104,11340), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C10,    ABISELECT(15104,11340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(18608,13976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C2,    ABISELECT(15680,11764), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19921C9,    ABISELECT(15104,11340), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(15824,11876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C13,    ABISELECT(14976,11240), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(16112,12108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(17280,12964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C4,    ABISELECT(11136,8380), //bcp->offset
    33, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19921C12,    ABISELECT(18896,14204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C3,    ABISELECT(8112,6084), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C2,    ABISELECT(59664,44528), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C10,    ABISELECT(59664,44528), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(60240,44952), //bcp->offset
    118, //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
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19921C9,    ABISELECT(59664,44528), //bcp->offset
    106, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S19921C2,    ABISELECT(20064,15060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(20192,15160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19921C6,    ABISELECT(20192,15160), //bcp->offset
    102, //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
    24, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(20608,15488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C5,    ABISELECT(20064,15060), //bcp->offset
    -1, //bcp->virtual_function_table_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
    32, //immediately_derived
  0, 0},
  {&cd_S19921C15,    ABISELECT(20064,15060), //bcp->offset
    88, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C2,    ABISELECT(60384,45064), //bcp->offset
    -1, //bcp->virtual_function_table_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
    41, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(60752,45328), //bcp->offset
    -1, //bcp->virtual_function_table_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
    40, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(60880,45428), //bcp->offset
    -1, //bcp->virtual_function_table_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
    36, //immediately_derived
  0, 0},
  {&cd_S19921C10,    ABISELECT(60880,45428), //bcp->offset
    -1, //bcp->virtual_function_table_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
    38, //immediately_derived
  0, 0},
  {&cd_S19921C2,    ABISELECT(61456,45852), //bcp->offset
    150, //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
    30, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19921C9,    ABISELECT(60880,45428), //bcp->offset
    142, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(61600,45964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C13,    ABISELECT(60752,45328), //bcp->offset
    130, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S19921C17,    ABISELECT(60384,45064), //bcp->offset
    121, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C18,    ABISELECT(61888,46196), //bcp->offset
    153, //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
    35, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19921C1[];
extern void _ZN8S19921C1D1Ev();
extern void _ZN8S19921C1D0Ev();
extern void _ZN8S19921C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19921C1D1Ev,_ZTv0_n36_N8S19921C1D1Ev)();
extern void ABISELECT(_ZThn8112_N8S19921C1D1Ev,_ZThn6084_N8S19921C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19921C1D0Ev,_ZTv0_n36_N8S19921C1D0Ev)();
extern void ABISELECT(_ZThn8112_N8S19921C1D0Ev,_ZThn6084_N8S19921C1D0Ev)() __attribute__((weak));
extern void _ZN8S19921C32v9Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
extern void _ZN9S19921C153v10Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C183v11Ev();
static  VTBL_ENTRY vtc_S19921C1[] = {
  ABISELECT(61888,46196),
  ABISELECT(60752,45328),
  ABISELECT(60384,45064),
  ABISELECT(59664,44528),
  ABISELECT(20064,15060),
  ABISELECT(18896,14204),
  ABISELECT(18608,13976),
  ABISELECT(18192,13648),
  ABISELECT(17616,13224),
  ABISELECT(11136,8380),
  ABISELECT(8112,6084),
  ABISELECT(7984,5984),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19921C1D0Ev,
  0,
  ABISELECT(-7984,-5984),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  ABISELECT(-8112,-6084),
  ABISELECT(10784,8120),
  ABISELECT(-128,-100),
  ABISELECT(10496,7892),
  ABISELECT(10080,7564),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  ABISELECT(-8112,-6084),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19921C1D1Ev,_ZTv0_n36_N8S19921C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19921C1D0Ev,_ZTv0_n36_N8S19921C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19921C32v9Ev,
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(-3152,-2396),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  ABISELECT(-11136,-8380),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
  ABISELECT(-11264,-8480),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-14976,-11240),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-15104,-11340),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-15680,-11764),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-17616,-13224),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  0,
  0,
  ABISELECT(-18192,-13648),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
  0,
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(-1872,-1412),
  ABISELECT(-1456,-1084),
  ABISELECT(39600,29468),
  ABISELECT(-20064,-15060),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
  (VTBL_ENTRY)&_ZN9S19921C153v10Ev,
  ABISELECT(-20192,-15160),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-41472,-30880),
  ABISELECT(-41056,-30552),
  ABISELECT(-59664,-44528),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-60240,-44952),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  ABISELECT(-41776,-31088),
  ABISELECT(-42192,-31416),
  ABISELECT(-42768,-31840),
  ABISELECT(368,264),
  ABISELECT(-41488,-30860),
  ABISELECT(-60384,-45064),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  ABISELECT(128,100),
  ABISELECT(128,100),
  ABISELECT(128,100),
  0,
  0,
  ABISELECT(-42144,-31352),
  ABISELECT(-42560,-31680),
  ABISELECT(-43136,-32104),
  ABISELECT(-60752,-45328),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
  ABISELECT(-42688,-31780),
  ABISELECT(-42272,-31452),
  ABISELECT(-60880,-45428),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
  ABISELECT(-61456,-45852),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  0,
  ABISELECT(-61888,-46196),
  (VTBL_ENTRY)&(_ZTI8S19921C1[0]),
  (VTBL_ENTRY)&_ZN9S19921C183v11Ev,
};
extern VTBL_ENTRY _ZTV8S19921C1[];
extern void _ZN8S19921C3D1Ev();
extern void _ZN8S19921C3D0Ev();
extern void _ZN8S19921C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C3__8S19921C1[] = {
  ABISELECT(10784,8120),
  ABISELECT(-128,-100),
  ABISELECT(10496,7892),
  ABISELECT(10080,7564),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19921C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19921C32v9Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C4__8S19921C3__8S19921C1[] = {
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(-3152,-2396),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  ABISELECT(-3024,-2296),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C68S19921C58S19921C4__8S19921C3__8S19921C1[] = {
  ABISELECT(-3152,-2396),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C138S19921C4__8S19921C3__8S19921C1[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-6864,-5156),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__8S19921C3__8S19921C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7140),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__A1__8S19921C3__8S19921C1[] = {
  0,
  0,
  ABISELECT(-10080,-7564),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C138S19921C4__8S19921C3__8S19921C1[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-6992,-5256),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C28S19921C99S19921C138S19921C4__A6__8S19921C3__8S19921C1[] = {
  ABISELECT(-7568,-5680),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C2__A7__8S19921C3__8S19921C1[] = {
  0,
  ABISELECT(128,100),
  (VTBL_ENTRY)&(_ZTI8S19921C3[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C4__8S19921C1[] = {
  ABISELECT(-3152,-2396),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C138S19921C4__8S19921C1[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C138S19921C4__8S19921C1[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C99S19921C138S19921C4__8S19921C1[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__9S19921C138S19921C4__8S19921C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__9S19921C138S19921C4__8S19921C1[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C138S19921C4__8S19921C1[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C13__8S19921C4__8S19921C1[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__8S19921C4__8S19921C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__A1__8S19921C4__8S19921C1[] = {
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C13__8S19921C4__8S19921C1[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C2__A7__8S19921C4__8S19921C1[] = {
  0,
  ABISELECT(3152,2396),
  (VTBL_ENTRY)&(_ZTI8S19921C4[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C52v3Ev();
extern void _ZN8S19921C52v4Ev();
extern void _ZN9S19921C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C15__8S19921C1[] = {
  ABISELECT(-1872,-1412),
  ABISELECT(-1456,-1084),
  ABISELECT(39600,29468),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19921C52v4Ev,
  (VTBL_ENTRY)&_ZN9S19921C153v10Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C15__8S19921C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-41472,-30880),
  ABISELECT(-41056,-30552),
  ABISELECT(-39600,-29468),
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C28S19921C9__A1__9S19921C15__8S19921C1[] = {
  ABISELECT(-40176,-29892),
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__9S19921C15__8S19921C1[] = {
  0,
  0,
  ABISELECT(1872,1412),
  (VTBL_ENTRY)&(_ZTI9S19921C15[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__A1__8S19921C1[] = {
  ABISELECT(-41472,-30880),
  ABISELECT(-41056,-30552),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C9__A1__8S19921C1[] = {
  0,
  0,
  ABISELECT(41472,30880),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C17__8S19921C1[] = {
  ABISELECT(-41776,-31088),
  ABISELECT(-42192,-31416),
  ABISELECT(-42768,-31840),
  ABISELECT(368,264),
  ABISELECT(-41488,-30860),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C13__9S19921C17__8S19921C1[] = {
  ABISELECT(128,100),
  ABISELECT(128,100),
  ABISELECT(128,100),
  0,
  0,
  ABISELECT(-42144,-31352),
  ABISELECT(-42560,-31680),
  ABISELECT(-43136,-32104),
  ABISELECT(-368,-264),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__9S19921C17__8S19921C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(42768,31840),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__9S19921C17__8S19921C1[] = {
  0,
  0,
  ABISELECT(42192,31416),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C13__9S19921C17__8S19921C1[] = {
  ABISELECT(-42688,-31780),
  ABISELECT(-42272,-31452),
  ABISELECT(-496,-364),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C28S19921C99S19921C13__A5__9S19921C17__8S19921C1[] = {
  ABISELECT(-1072,-788),
  (VTBL_ENTRY)&(_ZTI9S19921C17[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C13__A1__8S19921C1[] = {
  ABISELECT(-42144,-31352),
  ABISELECT(-42560,-31680),
  ABISELECT(-43136,-32104),
  0,
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C132v8Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C99S19921C13__A2__8S19921C1[] = {
  ABISELECT(-42688,-31780),
  ABISELECT(-42272,-31452),
  0,
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__8S19921C99S19921C13__A2__8S19921C1[] = {
  0,
  0,
  ABISELECT(42688,31780),
  (VTBL_ENTRY)&(_ZTI8S19921C9[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19921C10__9S19921C13__A1__8S19921C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(43136,32104),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN8S19921C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C6__9S19921C13__A1__8S19921C1[] = {
  0,
  0,
  ABISELECT(42560,31680),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19921C62v2Ev,
};
extern void _ZN8S19921C22v1Ev();
extern void _ZN9S19921C102v5Ev();
extern void _ZN9S19921C102v6Ev();
extern void _ZN9S19921C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19921C9__9S19921C13__A1__8S19921C1[] = {
  ABISELECT(-42688,-31780),
  ABISELECT(-42272,-31452),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19921C13[0]),
  (VTBL_ENTRY)&_ZN8S19921C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19921C102v7Ev,
};
static  VTT_ENTRY vtt_S19921C1[] = {
  {&(_ZTV8S19921C1[14]),  14,157},
  {&(_ZTV8S19921C1[19]),  19,157},
  {&(_ZTV8S19921C1[30]),  30,157},
  {&(_ZTV8S19921C1[47]),  47,157},
  {&(_ZTV8S19921C1[52]),  52,157},
  {&(_ZTV8S19921C1[59]),  59,157},
  {&(_ZTV8S19921C1[78]),  78,157},
  {&(_ZTV8S19921C1[86]),  86,157},
  {&(_ZTV8S19921C1[65]),  65,157},
  {&(_ZTV8S19921C1[71]),  71,157},
  {&(_ZTV8S19921C1[98]),  98,157},
  {&(_ZTV8S19921C1[114]),  114,157},
  {&(_ZTV8S19921C1[120]),  120,157},
  {&(_ZTV8S19921C1[104]),  104,157},
  {&(_ZTV8S19921C1[129]),  129,157},
  {&(_ZTV8S19921C1[140]),  140,157},
  {&(_ZTV8S19921C1[146]),  146,157},
  {&(_ZTV8S19921C1[152]),  152,157},
  {&(_ZTV8S19921C1[156]),  156,157},
  {&(_tg__ZTV8S19921C3__8S19921C1[8]),  8,11},
  {&(_tg__ZTV8S19921C4__8S19921C3__8S19921C1[14]),  14,17},
  {&(_tg__ZTV8S19921C68S19921C58S19921C4__8S19921C3__8S19921C1[2]),  2,4},
  {&(_tg__ZTV9S19921C138S19921C4__8S19921C3__8S19921C1[5]),  5,7},
  {&(_tg__ZTV9S19921C10__8S19921C3__8S19921C1[6]),  6,10},
  {&(_tg__ZTV8S19921C6__A1__8S19921C3__8S19921C1[4]),  4,6},
  {&(_tg__ZTV8S19921C99S19921C138S19921C4__8S19921C3__8S19921C1[4]),  4,8},
  {&(_tg__ZTV8S19921C28S19921C99S19921C138S19921C4__A6__8S19921C3__8S19921C1[2]),  2,3},
  {&(_tg__ZTV8S19921C2__A7__8S19921C3__8S19921C1[3]),  3,4},
  {&(_tg__ZTV8S19921C4__8S19921C1[6]),  6,9},
  {&(_tg__ZTV9S19921C138S19921C4__8S19921C1[5]),  5,7},
  {&(_tg__ZTV8S19921C99S19921C138S19921C4__8S19921C1[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C99S19921C138S19921C4__8S19921C1[4]),  4,6},
  {&(_tg__ZTV9S19921C10__9S19921C138S19921C4__8S19921C1[6]),  6,10},
  {&(_tg__ZTV8S19921C6__9S19921C138S19921C4__8S19921C1[4]),  4,6},
  {&(_tg__ZTV8S19921C9__9S19921C138S19921C4__8S19921C1[4]),  4,8},
  {&(_tg__ZTV9S19921C13__8S19921C4__8S19921C1[5]),  5,7},
  {&(_tg__ZTV9S19921C10__8S19921C4__8S19921C1[6]),  6,10},
  {&(_tg__ZTV8S19921C6__A1__8S19921C4__8S19921C1[4]),  4,6},
  {&(_tg__ZTV8S19921C99S19921C13__8S19921C4__8S19921C1[4]),  4,8},
  {&(_tg__ZTV8S19921C2__A7__8S19921C4__8S19921C1[3]),  3,4},
  {&(_tg__ZTV9S19921C15__8S19921C1[5]),  5,9},
  {&(_tg__ZTV8S19921C9__9S19921C15__8S19921C1[8]),  8,12},
  {&(_tg__ZTV8S19921C28S19921C9__A1__9S19921C15__8S19921C1[2]),  2,3},
  {&(_tg__ZTV8S19921C6__9S19921C15__8S19921C1[4]),  4,6},
  {&(_tg__ZTV8S19921C9__A1__8S19921C1[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C9__A1__8S19921C1[4]),  4,6},
  {&(_tg__ZTV9S19921C17__8S19921C1[7]),  7,8},
  {&(_tg__ZTV9S19921C13__9S19921C17__8S19921C1[10]),  10,12},
  {&(_tg__ZTV9S19921C10__9S19921C17__8S19921C1[6]),  6,10},
  {&(_tg__ZTV8S19921C6__9S19921C17__8S19921C1[4]),  4,6},
  {&(_tg__ZTV8S19921C99S19921C13__9S19921C17__8S19921C1[4]),  4,8},
  {&(_tg__ZTV8S19921C28S19921C99S19921C13__A5__9S19921C17__8S19921C1[2]),  2,3},
  {&(_tg__ZTV9S19921C13__A1__8S19921C1[5]),  5,7},
  {&(_tg__ZTV8S19921C99S19921C13__A2__8S19921C1[4]),  4,8},
  {&(_tg__ZTV8S19921C6__8S19921C99S19921C13__A2__8S19921C1[4]),  4,6},
  {&(_tg__ZTV9S19921C10__9S19921C13__A1__8S19921C1[6]),  6,10},
  {&(_tg__ZTV8S19921C6__9S19921C13__A1__8S19921C1[4]),  4,6},
  {&(_tg__ZTV8S19921C9__9S19921C13__A1__8S19921C1[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19921C1[];
extern  VTBL_ENTRY _ZTV8S19921C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19921C1[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19921C1D0Ev,_ZTv0_n36_N8S19921C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8112_N8S19921C1D0Ev,_ZThn6084_N8S19921C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19921C1D1Ev,_ZTv0_n36_N8S19921C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8112_N8S19921C1D1Ev,_ZThn6084_N8S19921C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19921C1 = {  "S19921C1", // class name
  bases_S19921C1, 43,
  &(vtc_S19921C1[0]), // expected_vtbl_contents
  &(vtt_S19921C1[0]), // expected_vtt_contents
  ABISELECT(61936,46232), // object size
  NSPAIRA(_ZTI8S19921C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19921C1),157, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19921C1),58, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19922C2  {
  __tsi64 s19922c2f0[8];
  char s19922c2f1[4];
  __tsi64 s19922c2f2:7;
  int s19922c2f3;
  long double s19922c2f4;
  __tsi64 s19922c2f5;
  virtual void  v1(); // _ZN8S19922C22v1Ev
  ~S19922C2(); // tgen
  S19922C2(); // tgen
};
//SIG(-1 S19922C2) C1{ v1 FL[8] Fc[4] FL:7 Fi FD FL}


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

static void Test_S19922C2()
{
  extern Class_Descriptor cd_S19922C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S19922C2, buf);
    S19922C2 *dp, &lv = *(dp=new (buf) S19922C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S19922C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C2)");
    check_field_offset(lv, s19922c2f0, ABISELECT(8,4), "S19922C2.s19922c2f0");
    check_field_offset(lv, s19922c2f1, ABISELECT(72,68), "S19922C2.s19922c2f1");
    set_bf_and_test(lv, s19922c2f2, ABISELECT(76,72), 0, 7, 1, "S19922C2");
    set_bf_and_test(lv, s19922c2f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S19922C2");
    check_field_offset(lv, s19922c2f3, ABISELECT(80,76), "S19922C2.s19922c2f3");
    check_field_offset(lv, s19922c2f4, ABISELECT(96,80), "S19922C2.s19922c2f4");
    check_field_offset(lv, s19922c2f5, ABISELECT(112,92), "S19922C2.s19922c2f5");
    test_class_info(&lv, &cd_S19922C2);
    dp->~S19922C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C2(Test_S19922C2, "S19922C2", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S19922C2C1Ev();
extern void _ZN8S19922C2D1Ev();
Name_Map name_map_S19922C2[] = {
  NSPAIR(_ZN8S19922C2C1Ev),
  NSPAIR(_ZN8S19922C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19922C2[];
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY vtc_S19922C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C2[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
Class_Descriptor cd_S19922C2 = {  "S19922C2", // class name
  0,0,//no base classes
  &(vtc_S19922C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S19922C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19922C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19922C6  : S19922C2 {
  ::S19922C2 s19922c6f0;
  ::S19922C2 s19922c6f1;
  ::S19921C7 s19922c6f2;
  virtual void  v2(); // _ZN8S19922C62v2Ev
  ~S19922C6(); // tgen
  S19922C6(); // tgen
};
//SIG(-1 S19922C6) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


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

static void Test_S19922C6()
{
  extern Class_Descriptor cd_S19922C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S19922C6, buf);
    S19922C6 *dp, &lv = *(dp=new (buf) S19922C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S19922C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C6)");
    check_base_class_offset(lv, (S19922C2*), 0, "S19922C6");
    check_field_offset(lv, s19922c6f0, ABISELECT(128,100), "S19922C6.s19922c6f0");
    check_field_offset(lv, s19922c6f1, ABISELECT(256,200), "S19922C6.s19922c6f1");
    check_field_offset(lv, s19922c6f2, ABISELECT(384,300), "S19922C6.s19922c6f2");
    test_class_info(&lv, &cd_S19922C6);
    dp->~S19922C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C6(Test_S19922C6, "S19922C6", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S19922C6C1Ev();
extern void _ZN8S19922C6D1Ev();
Name_Map name_map_S19922C6[] = {
  NSPAIR(_ZN8S19922C6C1Ev),
  NSPAIR(_ZN8S19922C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
static Base_Class bases_S19922C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19922C6[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY vtc_S19922C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C6[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
Class_Descriptor cd_S19922C6 = {  "S19922C6", // class name
  bases_S19922C6, 1,
  &(vtc_S19922C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S19922C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19922C6),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  S19922C8  {
  char s19922c8f0;
  ::S19921C7 s19922c8f1;
  ::S19922C2 s19922c8f2;
  __tsi64 s19922c8f3;
  ::S19921C7 s19922c8f4[3];
  char s19922c8f5;
  void  mf19922c8(); // _ZN8S19922C89mf19922c8Ev
};
//SIG(-1 S19922C8) C1{ m Fc FU2{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} FL FU2[3] Fc}


void  S19922C8 ::mf19922c8(){}

static void Test_S19922C8()
{
  {
    init_simple_test("S19922C8");
    static S19922C8 lv;
    check2(sizeof(lv), ABISELECT(288,228), "sizeof(S19922C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C8)");
    check_field_offset(lv, s19922c8f0, 0, "S19922C8.s19922c8f0");
    check_field_offset(lv, s19922c8f1, ABISELECT(8,4), "S19922C8.s19922c8f1");
    check_field_offset(lv, s19922c8f2, ABISELECT(48,32), "S19922C8.s19922c8f2");
    check_field_offset(lv, s19922c8f3, ABISELECT(176,132), "S19922C8.s19922c8f3");
    check_field_offset(lv, s19922c8f4, ABISELECT(184,140), "S19922C8.s19922c8f4");
    check_field_offset(lv, s19922c8f5, ABISELECT(280,224), "S19922C8.s19922c8f5");
  }
}
static Arrange_To_Call_Me vS19922C8(Test_S19922C8, "S19922C8", ABISELECT(288,228));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19922C8[];
VTBL_ENTRY *P__ZTI8S19922C8 = _ZTI8S19922C8; 
Class_Descriptor cd_S19922C8 = {  "S19922C8", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(288,228), // object size
  NSPAIRA(_ZTI8S19922C8),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  S19922C10  : S19922C2 {
  ::S19922C2 s19922c10f0;
  int s19922c10f1;
  ::S19922C2 s19922c10f2;
  int s19922c10f3;
  char s19922c10f4[6];
  char s19922c10f5:4;
  void *s19922c10f6;
  ::S19922C2 s19922c10f7;
  int s19922c10f8;
  virtual void  v5(); // _ZN9S19922C102v5Ev
  virtual void  v6(); // _ZN9S19922C102v6Ev
  virtual void  v7(); // _ZN9S19922C102v7Ev
  ~S19922C10(); // tgen
  S19922C10(); // tgen
};
//SIG(-1 S19922C10) C1{ BC2{ v4 FL[8] Fc[4] FL:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S19922C10 ::v5(){vfunc_called(this, "_ZN9S19922C102v5Ev");}
void  S19922C10 ::v6(){vfunc_called(this, "_ZN9S19922C102v6Ev");}
void  S19922C10 ::v7(){vfunc_called(this, "_ZN9S19922C102v7Ev");}
S19922C10 ::~S19922C10(){ note_dtor("S19922C10", this);} // tgen
S19922C10 ::S19922C10(){ note_ctor("S19922C10", this);} // tgen

static void Test_S19922C10()
{
  extern Class_Descriptor cd_S19922C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S19922C10, buf);
    S19922C10 *dp, &lv = *(dp=new (buf) S19922C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S19922C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C10)");
    check_base_class_offset(lv, (S19922C2*), 0, "S19922C10");
    check_field_offset(lv, s19922c10f0, ABISELECT(128,100), "S19922C10.s19922c10f0");
    check_field_offset(lv, s19922c10f1, ABISELECT(256,200), "S19922C10.s19922c10f1");
    check_field_offset(lv, s19922c10f2, ABISELECT(272,204), "S19922C10.s19922c10f2");
    check_field_offset(lv, s19922c10f3, ABISELECT(400,304), "S19922C10.s19922c10f3");
    check_field_offset(lv, s19922c10f4, ABISELECT(404,308), "S19922C10.s19922c10f4");
    set_bf_and_test(lv, s19922c10f5, ABISELECT(410,314), 0, 4, 1, "S19922C10");
    set_bf_and_test(lv, s19922c10f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S19922C10");
    check_field_offset(lv, s19922c10f6, ABISELECT(416,316), "S19922C10.s19922c10f6");
    check_field_offset(lv, s19922c10f7, ABISELECT(432,320), "S19922C10.s19922c10f7");
    check_field_offset(lv, s19922c10f8, ABISELECT(560,420), "S19922C10.s19922c10f8");
    test_class_info(&lv, &cd_S19922C10);
    dp->~S19922C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C10(Test_S19922C10, "S19922C10", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN9S19922C10C1Ev();
extern void _ZN9S19922C10D1Ev();
Name_Map name_map_S19922C10[] = {
  NSPAIR(_ZN9S19922C10C1Ev),
  NSPAIR(_ZN9S19922C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
static Base_Class bases_S19922C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19922C10[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY vtc_S19922C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C10[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
Class_Descriptor cd_S19922C10 = {  "S19922C10", // class name
  bases_S19922C10, 1,
  &(vtc_S19922C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI9S19922C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19922C10),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  S19922C9  : S19922C10 , virtual S19922C8 , S19922C2 , virtual S19922C6 {
  long s19922c9f0;
  long s19922c9f1;
  ~S19922C9(); // tgen
  S19922C9(); // tgen
};
//SIG(-1 S19922C9) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC3 FL FU5[3] Fc} BC3 VBC6{ BC3 v5 FC3 FC3 FU5} Fl Fl}


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

static void Test_S19922C9()
{
  extern Class_Descriptor cd_S19922C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,273)];
    init_test(&cd_S19922C9, buf);
    S19922C9 *dp, &lv = *(dp=new (buf) S19922C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1088), "sizeof(S19922C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C9)");
    check_base_class_offset(lv, (S19922C2*)(S19922C10*), 0, "S19922C9");
    check_base_class_offset(lv, (S19922C10*), 0, "S19922C9");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(720,532), "S19922C9");
    /*is_ambiguous_... S19922C9::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*), ABISELECT(576,424), "S19922C9");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(1008,760), "S19922C9");
    check_base_class_offset(lv, (S19922C6*), ABISELECT(1008,760), "S19922C9");
    check_field_offset(lv, s19922c9f0, ABISELECT(696,524), "S19922C9.s19922c9f0");
    check_field_offset(lv, s19922c9f1, ABISELECT(704,528), "S19922C9.s19922c9f1");
    test_class_info(&lv, &cd_S19922C9);
    dp->~S19922C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C9(Test_S19922C9, "S19922C9", ABISELECT(1424,1088));

#else // __cplusplus

extern void _ZN8S19922C9C1Ev();
extern void _ZN8S19922C9D1Ev();
Name_Map name_map_S19922C9[] = {
  NSPAIR(_ZN8S19922C9C1Ev),
  NSPAIR(_ZN8S19922C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
static Base_Class bases_S19922C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19922C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C8,    ABISELECT(720,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19922C2,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C2,    ABISELECT(1008,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C6,    ABISELECT(1008,760), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19922C9[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY vtc_S19922C9[] = {
  ABISELECT(1008,760),
  ABISELECT(720,532),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  0,
  ABISELECT(-1008,-760),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S19922C9[];
static  VTT_ENTRY vtt_S19922C9[] = {
  {&(_ZTV8S19922C9[4]),  4,17},
  {&(_ZTV8S19922C9[15]),  15,17},
};
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
Class_Descriptor cd_S19922C9 = {  "S19922C9", // class name
  bases_S19922C9, 6,
  &(vtc_S19922C9[0]), // expected_vtbl_contents
  &(vtt_S19922C9[0]), // expected_vtt_contents
  ABISELECT(1424,1088), // object size
  NSPAIRA(_ZTI8S19922C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19922C9),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19922C9),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19922C12  {
  long double s19922c12f0;
  void *s19922c12f1[10];
  long double s19922c12f2;
  int  :0;
  int s19922c12f4;
  long double s19922c12f5;
  ::S19922C6 s19922c12f6;
  char s19922c12f7:8;
  long s19922c12f8;
  long double s19922c12f9;
  ::S19922C10 s19922c12f10;
  void  mf19922c12(); // _ZN9S19922C1210mf19922c12Ev
};
//SIG(-1 S19922C12) C1{ m FD Fp[10] FD Fi:0 Fi FD FC2{ BC3{ v2 FL[8] Fc[4] FL:7 Fi FD FL} v1 FC3 FC3 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 Fl FD FC5{ BC3 v3 v4 v5 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi}}


void  S19922C12 ::mf19922c12(){}

static void Test_S19922C12()
{
  {
    init_simple_test("S19922C12");
    static S19922C12 lv;
    check2(sizeof(lv), ABISELECT(1168,852), "sizeof(S19922C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C12)");
    check_field_offset(lv, s19922c12f0, 0, "S19922C12.s19922c12f0");
    check_field_offset(lv, s19922c12f1, ABISELECT(16,12), "S19922C12.s19922c12f1");
    check_field_offset(lv, s19922c12f2, ABISELECT(96,52), "S19922C12.s19922c12f2");
    check_field_offset(lv, s19922c12f4, ABISELECT(112,64), "S19922C12.s19922c12f4");
    check_field_offset(lv, s19922c12f5, ABISELECT(128,68), "S19922C12.s19922c12f5");
    check_field_offset(lv, s19922c12f6, ABISELECT(144,80), "S19922C12.s19922c12f6");
    set_bf_and_test(lv, s19922c12f7, ABISELECT(560,408), 0, 8, 1, "S19922C12");
    set_bf_and_test(lv, s19922c12f7, ABISELECT(560,408), 0, 8, hide_sll(1LL<<7), "S19922C12");
    check_field_offset(lv, s19922c12f8, ABISELECT(568,412), "S19922C12.s19922c12f8");
    check_field_offset(lv, s19922c12f9, ABISELECT(576,416), "S19922C12.s19922c12f9");
    check_field_offset(lv, s19922c12f10, ABISELECT(592,428), "S19922C12.s19922c12f10");
  }
}
static Arrange_To_Call_Me vS19922C12(Test_S19922C12, "S19922C12", ABISELECT(1168,852));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19922C12[];
VTBL_ENTRY *P__ZTI9S19922C12 = _ZTI9S19922C12; 
Class_Descriptor cd_S19922C12 = {  "S19922C12", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(1168,852), // object size
  NSPAIRA(_ZTI9S19922C12),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  S19922C11  {
  long double s19922c11f0;
  void *s19922c11f1;
  long double s19922c11f2[8];
  void *s19922c11f3[9];
  ::S19922C12 s19922c11f4;
  int s19922c11f5;
  char s19922c11f6;
  long double s19922c11f7[4];
  char s19922c11f8;
  int s19922c11f9;
  virtual void  v12(); // _ZN9S19922C113v12Ev
  ~S19922C11(); // tgen
  S19922C11(); // tgen
};
//SIG(-1 S19922C11) C1{ v1 FD Fp FD[8] Fp[9] FC2{ m FD Fp[10] FD Fi:0 Fi FD FC3{ BC4{ v3 FL[8] Fc[4] FL:7 Fi FD FL} v2 FC4 FC4 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 Fl FD FC6{ BC4 v4 v5 v6 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi}} Fi Fc FD[4] Fc Fi}


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

static void Test_S19922C11()
{
  extern Class_Descriptor cd_S19922C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,268)];
    init_test(&cd_S19922C11, buf);
    S19922C11 *dp, &lv = *(dp=new (buf) S19922C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1068), "sizeof(S19922C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C11)");
    check_field_offset(lv, s19922c11f0, ABISELECT(16,4), "S19922C11.s19922c11f0");
    check_field_offset(lv, s19922c11f1, ABISELECT(32,16), "S19922C11.s19922c11f1");
    check_field_offset(lv, s19922c11f2, ABISELECT(48,20), "S19922C11.s19922c11f2");
    check_field_offset(lv, s19922c11f3, ABISELECT(176,116), "S19922C11.s19922c11f3");
    check_field_offset(lv, s19922c11f4, ABISELECT(256,152), "S19922C11.s19922c11f4");
    check_field_offset(lv, s19922c11f5, ABISELECT(1424,1004), "S19922C11.s19922c11f5");
    check_field_offset(lv, s19922c11f6, ABISELECT(1428,1008), "S19922C11.s19922c11f6");
    check_field_offset(lv, s19922c11f7, ABISELECT(1440,1012), "S19922C11.s19922c11f7");
    check_field_offset(lv, s19922c11f8, ABISELECT(1504,1060), "S19922C11.s19922c11f8");
    check_field_offset(lv, s19922c11f9, ABISELECT(1508,1064), "S19922C11.s19922c11f9");
    test_class_info(&lv, &cd_S19922C11);
    dp->~S19922C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C11(Test_S19922C11, "S19922C11", ABISELECT(1520,1068));

#else // __cplusplus

extern void _ZN9S19922C11C1Ev();
extern void _ZN9S19922C11D1Ev();
Name_Map name_map_S19922C11[] = {
  NSPAIR(_ZN9S19922C11C1Ev),
  NSPAIR(_ZN9S19922C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19922C11[];
extern void _ZN9S19922C113v12Ev();
static  VTBL_ENTRY vtc_S19922C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C11[0]),
  (VTBL_ENTRY)&_ZN9S19922C113v12Ev,
};
extern VTBL_ENTRY _ZTI9S19922C11[];
extern  VTBL_ENTRY _ZTV9S19922C11[];
Class_Descriptor cd_S19922C11 = {  "S19922C11", // class name
  0,0,//no base classes
  &(vtc_S19922C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1520,1068), // object size
  NSPAIRA(_ZTI9S19922C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19922C11),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  S19922C5  : S19922C2 , S19922C6 , S19922C8 {
  ::S19921C7 s19922c5f0;
  char s19922c5f1;
  char s19922c5f2;
  ::S19922C9 s19922c5f3;
  ::S19922C11 s19922c5f4;
  int s19922c5f5;
  long s19922c5f6;
  virtual void  v3(); // _ZN8S19922C52v3Ev
  virtual void  v4(); // _ZN8S19922C52v4Ev
  ~S19922C5(); // tgen
  S19922C5(); // tgen
};
//SIG(-1 S19922C5) C1{ BC2{ v3 FL[8] Fc[4] FL:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC2 FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC6{ BC7{ BC2 v5 v6 v7 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl Fl} FC8{ v8 FD Fp FD[8] Fp[9] FC9{ m FD Fp[10] FD Fi:0 Fi FD FC3 Fc:8 Fl FD FC7} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S19922C5 ::v3(){vfunc_called(this, "_ZN8S19922C52v3Ev");}
void  S19922C5 ::v4(){vfunc_called(this, "_ZN8S19922C52v4Ev");}
S19922C5 ::~S19922C5(){ note_dtor("S19922C5", this);} // tgen
S19922C5 ::S19922C5(){ note_ctor("S19922C5", this);} // tgen

static void Test_S19922C5()
{
  extern Class_Descriptor cd_S19922C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,714)];
    init_test(&cd_S19922C5, buf);
    S19922C5 *dp, &lv = *(dp=new (buf) S19922C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2852), "sizeof(S19922C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C5)");
    /*is_ambiguous_... S19922C5::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*), 0, "S19922C5");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(128,100), "S19922C5");
    check_base_class_offset(lv, (S19922C6*), ABISELECT(128,100), "S19922C5");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(544,428), "S19922C5");
    check_field_offset(lv, s19922c5f0, ABISELECT(832,656), "S19922C5.s19922c5f0");
    check_field_offset(lv, s19922c5f1, ABISELECT(864,684), "S19922C5.s19922c5f1");
    check_field_offset(lv, s19922c5f2, ABISELECT(865,685), "S19922C5.s19922c5f2");
    check_field_offset(lv, s19922c5f3, ABISELECT(880,688), "S19922C5.s19922c5f3");
    check_field_offset(lv, s19922c5f4, ABISELECT(2304,1776), "S19922C5.s19922c5f4");
    check_field_offset(lv, s19922c5f5, ABISELECT(3824,2844), "S19922C5.s19922c5f5");
    check_field_offset(lv, s19922c5f6, ABISELECT(3832,2848), "S19922C5.s19922c5f6");
    test_class_info(&lv, &cd_S19922C5);
    dp->~S19922C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C5(Test_S19922C5, "S19922C5", ABISELECT(3840,2852));

#else // __cplusplus

extern void _ZN8S19922C5C1Ev();
extern void _ZN8S19922C5D1Ev();
Name_Map name_map_S19922C5[] = {
  NSPAIR(_ZN8S19922C5C1Ev),
  NSPAIR(_ZN8S19922C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S19922C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C2,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19922C6,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19922C5[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY vtc_S19922C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C5[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19922C5[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S19922C5[];
extern  VTBL_ENTRY _ZTV8S19922C5[];
Class_Descriptor cd_S19922C5 = {  "S19922C5", // class name
  bases_S19922C5, 4,
  &(vtc_S19922C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2852), // object size
  NSPAIRA(_ZTI8S19922C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19922C5),9, //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  S19922C13  : S19922C2 , virtual S19922C10 , virtual S19922C6 , S19922C9 , S19922C8 {
  int s19922c13f0;
  virtual void  v8(); // _ZN9S19922C132v8Ev
  ~S19922C13(); // tgen
  S19922C13(); // tgen
};
//SIG(-1 S19922C13) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC2 FL FU5[3] Fc} BC2 VBC4 Fl Fl} BC7 v1 Fi}


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

static void Test_S19922C13()
{
  extern Class_Descriptor cd_S19922C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,462)];
    init_test(&cd_S19922C13, buf);
    S19922C13 *dp, &lv = *(dp=new (buf) S19922C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1844), "sizeof(S19922C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C13)");
    /*is_ambiguous_... S19922C13::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*), 0, "S19922C13");
    /*is_ambiguous_... S19922C13::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C10*), ABISELECT(1136,864), "S19922C13");
    /*is_ambiguous_... S19922C13::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C10*), ABISELECT(1136,864), "S19922C13");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(1712,1288), "S19922C13");
    check_base_class_offset(lv, (S19922C6*), ABISELECT(1712,1288), "S19922C13");
    check_base_class_offset(lv, (S19922C6*)(S19922C9*), ABISELECT(1712,1288), "S19922C13");
    check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*), ABISELECT(128,100), "S19922C13");
    check_base_class_offset(lv, (S19922C10*)(S19922C9*), ABISELECT(128,100), "S19922C13");
    check_base_class_offset(lv, (S19922C8*)(S19922C9*), ABISELECT(2128,1616), "S19922C13");
    /*is_ambiguous_... S19922C9::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*), ABISELECT(704,524), "S19922C13");
    check_base_class_offset(lv, (S19922C9*), ABISELECT(128,100), "S19922C13");
    /*is_ambiguous_... S19922C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(848,632), "S19922C13");
    check_field_offset(lv, s19922c13f0, ABISELECT(1132,860), "S19922C13.s19922c13f0");
    test_class_info(&lv, &cd_S19922C13);
    dp->~S19922C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C13(Test_S19922C13, "S19922C13", ABISELECT(2416,1844));

#else // __cplusplus

extern void _ZN9S19922C13C1Ev();
extern void _ZN9S19922C13D1Ev();
Name_Map name_map_S19922C13[] = {
  NSPAIR(_ZN9S19922C13C1Ev),
  NSPAIR(_ZN9S19922C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S19922C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(1136,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(1136,864), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C2,    ABISELECT(1712,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C6,    ABISELECT(1712,1288), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C2,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(2128,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19922C9,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(848,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19922C13[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY vtc_S19922C13[] = {
  ABISELECT(2128,1616),
  ABISELECT(1712,1288),
  ABISELECT(1136,864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-864),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  0,
  0,
  ABISELECT(-1712,-1288),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S19922C13[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C13[] = {
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C9__9S19922C13[] = {
  0,
  0,
  ABISELECT(-1584,-1188),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
static  VTT_ENTRY vtt_S19922C13[] = {
  {&(_ZTV9S19922C13[5]),  5,34},
  {&(_tg__ZTV8S19922C9__9S19922C13[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C9__9S19922C13[4]),  4,6},
  {&(_ZTV9S19922C13[24]),  24,34},
  {&(_ZTV9S19922C13[32]),  32,34},
  {&(_ZTV9S19922C13[11]),  11,34},
};
extern VTBL_ENTRY _ZTI9S19922C13[];
extern  VTBL_ENTRY _ZTV9S19922C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C13[];
Class_Descriptor cd_S19922C13 = {  "S19922C13", // class name
  bases_S19922C13, 11,
  &(vtc_S19922C13[0]), // expected_vtbl_contents
  &(vtt_S19922C13[0]), // expected_vtt_contents
  ABISELECT(2416,1844), // object size
  NSPAIRA(_ZTI9S19922C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19922C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19922C13),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19922C4  : S19922C5 , S19922C13 , S19922C12 , S19922C8 , virtual S19922C2 {
  void *s19922c4f0;
  long double s19922c4f1;
  int s19922c4f2;
  int s19922c4f3;
  char s19922c4f4[7];
  ~S19922C4(); // tgen
  S19922C4(); // tgen
};
//SIG(-1 S19922C4) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC3 FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC7{ BC8{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl Fl} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC4 Fc:8 Fl FD FC8} Fi Fc FD[4] Fc Fi} Fi Fl} BC11{ BC3 VBC8 VBC4 BC7 BC6 v8 Fi} BC10 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S19922C4()
{
  extern Class_Descriptor cd_S19922C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1478)];
    init_test(&cd_S19922C4, buf);
    S19922C4 *dp, &lv = *(dp=new (buf) S19922C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5908), "sizeof(S19922C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C4)");
    /*is_ambiguous_... S19922C5::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C5*), 0, "S19922C4");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*)(S19922C5*), ABISELECT(128,100), "S19922C4");
    check_base_class_offset(lv, (S19922C6*)(S19922C5*), ABISELECT(128,100), "S19922C4");
    check_base_class_offset(lv, (S19922C8*)(S19922C5*), ABISELECT(544,428), "S19922C4");
    check_base_class_offset(lv, (S19922C5*), 0, "S19922C4");
    /*is_ambiguous_... S19922C13::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C13*), ABISELECT(3840,2852), "S19922C4");
    /*is_ambiguous_... S19922C4::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C10*), ABISELECT(6480,4828), "S19922C4");
    /*is_ambiguous_... S19922C13::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C10*)(S19922C13*), ABISELECT(6480,4828), "S19922C4");
    /*is_ambiguous_... S19922C4::S19922C6 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(7056,5252), "S19922C4");
    check_base_class_offset(lv, (S19922C6*)(S19922C13*), ABISELECT(7056,5252), "S19922C4");
    check_base_class_offset(lv, (S19922C6*)(S19922C9*)(S19922C13*), ABISELECT(7056,5252), "S19922C4");
    check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*)(S19922C13*), ABISELECT(3968,2952), "S19922C4");
    check_base_class_offset(lv, (S19922C10*)(S19922C9*)(S19922C13*), ABISELECT(3968,2952), "S19922C4");
    check_base_class_offset(lv, (S19922C8*)(S19922C9*)(S19922C13*), ABISELECT(7472,5580), "S19922C4");
    /*is_ambiguous_... S19922C9::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*)(S19922C13*), ABISELECT(4544,3376), "S19922C4");
    check_base_class_offset(lv, (S19922C9*)(S19922C13*), ABISELECT(3968,2952), "S19922C4");
    /*is_ambiguous_... S19922C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C13*), ABISELECT(4688,3484), "S19922C4");
    check_base_class_offset(lv, (S19922C13*), ABISELECT(3840,2852), "S19922C4");
    check_base_class_offset(lv, (S19922C12*), ABISELECT(4976,3716), "S19922C4");
    /*is_ambiguous_... S19922C4::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(6144,4568), "S19922C4");
    /*is_ambiguous_... S19922C4::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*), ABISELECT(7760,5808), "S19922C4");
    check_field_offset(lv, s19922c4f0, ABISELECT(6432,4796), "S19922C4.s19922c4f0");
    check_field_offset(lv, s19922c4f1, ABISELECT(6448,4800), "S19922C4.s19922c4f1");
    check_field_offset(lv, s19922c4f2, ABISELECT(6464,4812), "S19922C4.s19922c4f2");
    check_field_offset(lv, s19922c4f3, ABISELECT(6468,4816), "S19922C4.s19922c4f3");
    check_field_offset(lv, s19922c4f4, ABISELECT(6472,4820), "S19922C4.s19922c4f4");
    test_class_info(&lv, &cd_S19922C4);
    dp->~S19922C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C4(Test_S19922C4, "S19922C4", ABISELECT(7888,5908));

#else // __cplusplus

extern void _ZN8S19922C4C1Ev();
extern void _ZN8S19922C4D1Ev();
Name_Map name_map_S19922C4[] = {
  NSPAIR(_ZN8S19922C4C1Ev),
  NSPAIR(_ZN8S19922C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C5;
extern VTBL_ENTRY _ZTI8S19922C5[];
extern  VTBL_ENTRY _ZTV8S19922C5[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C13;
extern VTBL_ENTRY _ZTI9S19922C13[];
extern  VTBL_ENTRY _ZTV9S19922C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
static Base_Class bases_S19922C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C2,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19922C6,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C2,    ABISELECT(3840,2852), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C2,    ABISELECT(6480,4828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C10,    ABISELECT(6480,4828), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(7056,5252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C6,    ABISELECT(7056,5252), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7472,5580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(4544,3376), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19922C9,    ABISELECT(3968,2952), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(4688,3484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C13,    ABISELECT(3840,2852), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C12,    ABISELECT(4976,3716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(6144,4568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C2,    ABISELECT(7760,5808), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19922C4[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY vtc_S19922C4[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-4544,-3376),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19922C4[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C13__8S19922C4[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C13__8S19922C4[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C99S19922C13__8S19922C4[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__9S19922C13__8S19922C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__9S19922C13__8S19922C4[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C13__8S19922C4[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
static  VTT_ENTRY vtt_S19922C4[] = {
  {&(_ZTV8S19922C4[6]),  6,51},
  {&(_tg__ZTV9S19922C13__8S19922C4[5]),  5,7},
  {&(_tg__ZTV8S19922C99S19922C13__8S19922C4[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C99S19922C13__8S19922C4[4]),  4,6},
  {&(_tg__ZTV9S19922C10__9S19922C13__8S19922C4[6]),  6,10},
  {&(_tg__ZTV8S19922C6__9S19922C13__8S19922C4[4]),  4,6},
  {&(_tg__ZTV8S19922C9__9S19922C13__8S19922C4[4]),  4,8},
  {&(_ZTV8S19922C4[18]),  18,51},
  {&(_ZTV8S19922C4[37]),  37,51},
  {&(_ZTV8S19922C4[45]),  45,51},
  {&(_ZTV8S19922C4[24]),  24,51},
  {&(_ZTV8S19922C4[50]),  50,51},
};
extern VTBL_ENTRY _ZTI8S19922C4[];
extern  VTBL_ENTRY _ZTV8S19922C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C4[];
Class_Descriptor cd_S19922C4 = {  "S19922C4", // class name
  bases_S19922C4, 20,
  &(vtc_S19922C4[0]), // expected_vtbl_contents
  &(vtt_S19922C4[0]), // expected_vtt_contents
  ABISELECT(7888,5908), // object size
  NSPAIRA(_ZTI8S19922C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19922C4),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19922C4),12, //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  S19922C14  : virtual S19922C8 , virtual S19922C9 {
  int s19922c14f0;
  void *s19922c14f1;
  unsigned char s19922c14f2:1;
  int s19922c14f3;
  int s19922c14f4;
  void *s19922c14f5;
  int s19922c14f6;
  int s19922c14f7;
  int s19922c14f8;
  int s19922c14f9[8];
  char s19922c14f10;
  virtual  ~S19922C14(); // _ZN9S19922C14D2Ev
  virtual void  v13(); // _ZN9S19922C143v13Ev
  virtual void  v14(); // _ZN9S19922C143v14Ev
  S19922C14(); // tgen
};
//SIG(-1 S19922C14) C1{ VBC2{ m Fc FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC4{ v3 FL[8] Fc[4] FL:7 Fi FD FL} FL FU3[3] Fc} VBC5{ BC6{ BC4 v4 v5 v6 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC2 BC4 VBC7{ BC4 v7 FC4 FC4 FU3} Fl Fl} vd v1 v2 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc}


 S19922C14 ::~S19922C14(){ note_dtor("S19922C14", this);}
void  S19922C14 ::v13(){vfunc_called(this, "_ZN9S19922C143v13Ev");}
void  S19922C14 ::v14(){vfunc_called(this, "_ZN9S19922C143v14Ev");}
S19922C14 ::S19922C14(){ note_ctor("S19922C14", this);} // tgen

static void Test_S19922C14()
{
  extern Class_Descriptor cd_S19922C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,292)];
    init_test(&cd_S19922C14, buf);
    S19922C14 *dp, &lv = *(dp=new (buf) S19922C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1164), "sizeof(S19922C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C14)");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(96,76), "S19922C14");
    check_base_class_offset(lv, (S19922C8*)(S19922C9*), ABISELECT(96,76), "S19922C14");
    check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*), ABISELECT(384,304), "S19922C14");
    check_base_class_offset(lv, (S19922C10*)(S19922C9*), ABISELECT(384,304), "S19922C14");
    /*is_ambiguous_... S19922C9::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*), ABISELECT(960,728), "S19922C14");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(1104,836), "S19922C14");
    check_base_class_offset(lv, (S19922C6*)(S19922C9*), ABISELECT(1104,836), "S19922C14");
    check_base_class_offset(lv, (S19922C9*), ABISELECT(384,304), "S19922C14");
    check_field_offset(lv, s19922c14f0, ABISELECT(8,4), "S19922C14.s19922c14f0");
    check_field_offset(lv, s19922c14f1, ABISELECT(16,8), "S19922C14.s19922c14f1");
    set_bf_and_test(lv, s19922c14f2, ABISELECT(24,12), 0, 1, 1, "S19922C14");
    check_field_offset(lv, s19922c14f3, ABISELECT(28,16), "S19922C14.s19922c14f3");
    check_field_offset(lv, s19922c14f4, ABISELECT(32,20), "S19922C14.s19922c14f4");
    check_field_offset(lv, s19922c14f5, ABISELECT(40,24), "S19922C14.s19922c14f5");
    check_field_offset(lv, s19922c14f6, ABISELECT(48,28), "S19922C14.s19922c14f6");
    check_field_offset(lv, s19922c14f7, ABISELECT(52,32), "S19922C14.s19922c14f7");
    check_field_offset(lv, s19922c14f8, ABISELECT(56,36), "S19922C14.s19922c14f8");
    check_field_offset(lv, s19922c14f9, ABISELECT(60,40), "S19922C14.s19922c14f9");
    check_field_offset(lv, s19922c14f10, ABISELECT(92,72), "S19922C14.s19922c14f10");
    test_class_info(&lv, &cd_S19922C14);
    dp->~S19922C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C14(Test_S19922C14, "S19922C14", ABISELECT(1520,1164));

#else // __cplusplus

extern void _ZN9S19922C14C1Ev();
extern void _ZN9S19922C14D2Ev();
Name_Map name_map_S19922C14[] = {
  NSPAIR(_ZN9S19922C14C1Ev),
  NSPAIR(_ZN9S19922C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
static Base_Class bases_S19922C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C8,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C2,    ABISELECT(384,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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(384,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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(960,728), //bcp->offset
    21, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(1104,836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C6,    ABISELECT(1104,836), //bcp->offset
    24, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19922C9,    ABISELECT(384,304), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19922C14[];
extern void _ZN9S19922C14D1Ev();
extern void _ZN9S19922C14D0Ev();
extern void _ZN9S19922C143v13Ev();
extern void _ZN9S19922C143v14Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY vtc_S19922C14[] = {
  ABISELECT(1104,836),
  ABISELECT(384,304),
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C14[0]),
  (VTBL_ENTRY)&_ZN9S19922C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19922C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19922C143v13Ev,
  (VTBL_ENTRY)&_ZN9S19922C143v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  ABISELECT(-384,-304),
  (VTBL_ENTRY)&(_ZTI9S19922C14[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-960,-728),
  (VTBL_ENTRY)&(_ZTI9S19922C14[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  0,
  ABISELECT(-1104,-836),
  (VTBL_ENTRY)&(_ZTI9S19922C14[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S19922C14[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C14[] = {
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C9__9S19922C14[] = {
  0,
  0,
  ABISELECT(-720,-532),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
static  VTT_ENTRY vtt_S19922C14[] = {
  {&(_ZTV9S19922C14[5]),  5,30},
  {&(_ZTV9S19922C14[17]),  17,30},
  {&(_ZTV9S19922C14[23]),  23,30},
  {&(_ZTV9S19922C14[28]),  28,30},
  {&(_tg__ZTV8S19922C9__9S19922C14[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C9__9S19922C14[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19922C14[];
extern  VTBL_ENTRY _ZTV9S19922C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C14[];
Class_Descriptor cd_S19922C14 = {  "S19922C14", // class name
  bases_S19922C14, 7,
  &(vtc_S19922C14[0]), // expected_vtbl_contents
  &(vtt_S19922C14[0]), // expected_vtt_contents
  ABISELECT(1520,1164), // object size
  NSPAIRA(_ZTI9S19922C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19922C14),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19922C14),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19922C3  : virtual S19922C4 , virtual S19922C12 {
  ::S19922C9 s19922c3f0;
  int s19922c3f1;
  void *s19922c3f2;
  int s19922c3f3:32;
  int s19922c3f4;
  ::S19922C14 s19922c3f5;
  char  :0;
  void *s19922c3f7;
  long double s19922c3f8;
  virtual  ~S19922C3(); // _ZN8S19922C3D2Ev
  virtual void  v9(); // _ZN8S19922C32v9Ev
  S19922C3(); // tgen
};
//SIG(-1 S19922C3) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] FL:7 Fi FD FL} BC5{ BC4 v3 FC4 FC4 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC7{ m Fc FU6 FC4 FL FU6[3] Fc} v4 v5 FU6 Fc Fc FC8{ BC9{ BC4 v6 v7 v8 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC7 BC4 VBC5 Fl Fl} FC10{ v12 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC5 Fc:8 Fl FD FC9} Fi Fc FD[4] Fc Fi} Fi Fl} BC12{ BC4 VBC9 VBC5 BC8 BC7 v9 Fi} BC11 BC7 VBC4 Fp FD Fi Fi Fc[7]} VBC11 vd v1 FC8 Fi Fp Fi:32 Fi FC13{ VBC7 VBC8 vd v10 v11 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD}


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

static void Test_S19922C3()
{
  extern Class_Descriptor cd_S19922C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,2263)];
    init_test(&cd_S19922C3, buf);
    S19922C3 *dp, &lv = *(dp=new (buf) S19922C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,9048), "sizeof(S19922C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C3)");
    /*is_ambiguous_... S19922C5::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C5*)(S19922C4*), ABISELECT(3024,2288), "S19922C3");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*)(S19922C5*)(S19922C4*), ABISELECT(3152,2388), "S19922C3");
    check_base_class_offset(lv, (S19922C6*)(S19922C5*)(S19922C4*), ABISELECT(3152,2388), "S19922C3");
    check_base_class_offset(lv, (S19922C8*)(S19922C5*)(S19922C4*), ABISELECT(3568,2716), "S19922C3");
    check_base_class_offset(lv, (S19922C5*)(S19922C4*), ABISELECT(3024,2288), "S19922C3");
    /*is_ambiguous_... S19922C13::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C13*)(S19922C4*), ABISELECT(6864,5140), "S19922C3");
    /*is_ambiguous_... S19922C3::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C10*), ABISELECT(9504,7116), "S19922C3");
    /*is_ambiguous_... S19922C13::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C10*)(S19922C13*)(S19922C4*), ABISELECT(9504,7116), "S19922C3");
    /*is_ambiguous_... S19922C3::S19922C6 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(10080,7540), "S19922C3");
    check_base_class_offset(lv, (S19922C6*)(S19922C13*)(S19922C4*), ABISELECT(10080,7540), "S19922C3");
    check_base_class_offset(lv, (S19922C6*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(10080,7540), "S19922C3");
    check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(6992,5240), "S19922C3");
    check_base_class_offset(lv, (S19922C10*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(6992,5240), "S19922C3");
    check_base_class_offset(lv, (S19922C8*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(10496,7868), "S19922C3");
    /*is_ambiguous_... S19922C9::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(7568,5664), "S19922C3");
    check_base_class_offset(lv, (S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(6992,5240), "S19922C3");
    /*is_ambiguous_... S19922C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C13*)(S19922C4*), ABISELECT(7712,5772), "S19922C3");
    check_base_class_offset(lv, (S19922C13*)(S19922C4*), ABISELECT(6864,5140), "S19922C3");
    check_base_class_offset(lv, (S19922C12*)(S19922C4*), ABISELECT(8000,6004), "S19922C3");
    /*is_ambiguous_... S19922C4::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C4*), ABISELECT(9168,6856), "S19922C3");
    /*is_ambiguous_... S19922C4::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C4*), ABISELECT(10784,8096), "S19922C3");
    check_base_class_offset(lv, (S19922C4*), ABISELECT(3024,2288), "S19922C3");
    /*is_ambiguous_... S19922C3::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*), ABISELECT(10912,8196), "S19922C3");
    check_field_offset(lv, s19922c3f0, ABISELECT(16,4), "S19922C3.s19922c3f0");
    check_field_offset(lv, s19922c3f1, ABISELECT(1440,1092), "S19922C3.s19922c3f1");
    check_field_offset(lv, s19922c3f2, ABISELECT(1448,1096), "S19922C3.s19922c3f2");
    set_bf_and_test(lv, s19922c3f3, ABISELECT(1456,1100), 0, 32, 1, "S19922C3");
    set_bf_and_test(lv, s19922c3f3, ABISELECT(1456,1100), 0, 32, hide_sll(1LL<<31), "S19922C3");
    check_field_offset(lv, s19922c3f4, ABISELECT(1460,1104), "S19922C3.s19922c3f4");
    check_field_offset(lv, s19922c3f5, ABISELECT(1472,1108), "S19922C3.s19922c3f5");
    check_field_offset(lv, s19922c3f7, ABISELECT(2992,2272), "S19922C3.s19922c3f7");
    check_field_offset(lv, s19922c3f8, ABISELECT(3008,2276), "S19922C3.s19922c3f8");
    test_class_info(&lv, &cd_S19922C3);
    dp->~S19922C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C3(Test_S19922C3, "S19922C3", ABISELECT(12080,9048));

#else // __cplusplus

extern void _ZN8S19922C3C1Ev();
extern void _ZN8S19922C3D2Ev();
Name_Map name_map_S19922C3[] = {
  NSPAIR(_ZN8S19922C3C1Ev),
  NSPAIR(_ZN8S19922C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C5;
extern VTBL_ENTRY _ZTI8S19922C5[];
extern  VTBL_ENTRY _ZTV8S19922C5[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C13;
extern VTBL_ENTRY _ZTI9S19922C13[];
extern  VTBL_ENTRY _ZTV9S19922C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C4;
extern VTBL_ENTRY _ZTI8S19922C4[];
extern  VTBL_ENTRY _ZTV8S19922C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C4[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
static Base_Class bases_S19922C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    ABISELECT(3024,2288), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C2,    ABISELECT(3152,2388), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19922C6,    ABISELECT(3152,2388), //bcp->offset
    28, //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(3568,2716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C5,    ABISELECT(3024,2288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(6864,5140), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C2,    ABISELECT(9504,7116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C10,    ABISELECT(9504,7116), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(10080,7540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C6,    ABISELECT(10080,7540), //bcp->offset
    60, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(6992,5240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(6992,5240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(10496,7868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(7568,5664), //bcp->offset
    47, //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19922C9,    ABISELECT(6992,5240), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7712,5772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C13,    ABISELECT(6864,5140), //bcp->offset
    32, //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(8000,6004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(9168,6856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(10784,8096), //bcp->offset
    66, //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_S19922C4,    ABISELECT(3024,2288), //bcp->offset
    11, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C12,    ABISELECT(10912,8196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19922C3[];
extern void _ZN8S19922C3D1Ev();
extern void _ZN8S19922C3D0Ev();
extern void _ZN8S19922C32v9Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY vtc_S19922C3[] = {
  ABISELECT(10912,8196),
  ABISELECT(10784,8096),
  ABISELECT(10496,7868),
  ABISELECT(10080,7540),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19922C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19922C32v9Ev,
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  ABISELECT(-3024,-2288),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
  ABISELECT(-3152,-2388),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-6864,-5140),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-6992,-5240),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-7568,-5664),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7116),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  0,
  0,
  ABISELECT(-10080,-7540),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
  0,
  ABISELECT(-10784,-8096),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19922C3[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C4__8S19922C3[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C138S19922C4__8S19922C3[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C138S19922C4__8S19922C3[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C99S19922C138S19922C4__8S19922C3[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__9S19922C138S19922C4__8S19922C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__9S19922C138S19922C4__8S19922C3[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C138S19922C4__8S19922C3[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C13__8S19922C4__8S19922C3[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__8S19922C4__8S19922C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__A1__8S19922C4__8S19922C3[] = {
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C13__8S19922C4__8S19922C3[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C2__A7__8S19922C4__8S19922C3[] = {
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
static  VTT_ENTRY vtt_S19922C3[] = {
  {&(_ZTV8S19922C3[8]),  8,70},
  {&(_ZTV8S19922C3[25]),  25,70},
  {&(_ZTV8S19922C3[30]),  30,70},
  {&(_ZTV8S19922C3[37]),  37,70},
  {&(_ZTV8S19922C3[56]),  56,70},
  {&(_ZTV8S19922C3[64]),  64,70},
  {&(_ZTV8S19922C3[43]),  43,70},
  {&(_ZTV8S19922C3[49]),  49,70},
  {&(_ZTV8S19922C3[69]),  69,70},
  {&(_tg__ZTV8S19922C4__8S19922C3[6]),  6,9},
  {&(_tg__ZTV9S19922C138S19922C4__8S19922C3[5]),  5,7},
  {&(_tg__ZTV8S19922C99S19922C138S19922C4__8S19922C3[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C99S19922C138S19922C4__8S19922C3[4]),  4,6},
  {&(_tg__ZTV9S19922C10__9S19922C138S19922C4__8S19922C3[6]),  6,10},
  {&(_tg__ZTV8S19922C6__9S19922C138S19922C4__8S19922C3[4]),  4,6},
  {&(_tg__ZTV8S19922C9__9S19922C138S19922C4__8S19922C3[4]),  4,8},
  {&(_tg__ZTV9S19922C13__8S19922C4__8S19922C3[5]),  5,7},
  {&(_tg__ZTV9S19922C10__8S19922C4__8S19922C3[6]),  6,10},
  {&(_tg__ZTV8S19922C6__A1__8S19922C4__8S19922C3[4]),  4,6},
  {&(_tg__ZTV8S19922C99S19922C13__8S19922C4__8S19922C3[4]),  4,8},
  {&(_tg__ZTV8S19922C2__A7__8S19922C4__8S19922C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19922C3[];
extern  VTBL_ENTRY _ZTV8S19922C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C3[];
Class_Descriptor cd_S19922C3 = {  "S19922C3", // class name
  bases_S19922C3, 22,
  &(vtc_S19922C3[0]), // expected_vtbl_contents
  &(vtt_S19922C3[0]), // expected_vtt_contents
  ABISELECT(12080,9048), // object size
  NSPAIRA(_ZTI8S19922C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19922C3),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19922C3),21, //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  S19922C15  : virtual S19922C9 , S19922C5 {
  ::S19922C10 s19922c15f0;
  ::S19922C10 s19922c15f1;
  __tsi64 s19922c15f2;
  ::S19922C5 s19922c15f3[9];
  ::S19921C16 s19922c15f4;
  void *s19922c15f5;
  char s19922c15f6;
  virtual void  v10(); // _ZN9S19922C153v10Ev
  ~S19922C15(); // tgen
  S19922C15(); // tgen
};
//SIG(-1 S19922C15) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] FL:7 Fi FD FL} v3 v4 v5 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC5{ m Fc FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC4 FL FU6[3] Fc} BC4 VBC7{ BC4 v6 FC4 FC4 FU6} Fl Fl} BC8{ BC4 BC7 BC5 v7 v8 FU6 Fc Fc FC2 FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC7 Fc:8 Fl FD FC3} Fi Fc FD[4] Fc Fi} Fi Fl} v1 FC3 FC3 FL FC8[9] FU11{ m Fc:6} Fp Fc}


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

static void Test_S19922C15()
{
  extern Class_Descriptor cd_S19922C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2565,7620)];
    init_test(&cd_S19922C15, buf);
    S19922C15 *dp, &lv = *(dp=new (buf) S19922C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(41024,30476), "sizeof(S19922C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C15)");
    check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*), ABISELECT(39600,29388), "S19922C15");
    check_base_class_offset(lv, (S19922C10*)(S19922C9*), ABISELECT(39600,29388), "S19922C15");
    check_base_class_offset(lv, (S19922C8*)(S19922C9*), ABISELECT(40320,29920), "S19922C15");
    /*is_ambiguous_... S19922C9::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*), ABISELECT(40176,29812), "S19922C15");
    /*is_ambiguous_... S19922C15::S19922C6 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(40608,30148), "S19922C15");
    check_base_class_offset(lv, (S19922C6*)(S19922C9*), ABISELECT(40608,30148), "S19922C15");
    check_base_class_offset(lv, (S19922C9*), ABISELECT(39600,29388), "S19922C15");
    /*is_ambiguous_... S19922C5::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C5*), 0, "S19922C15");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*)(S19922C5*), ABISELECT(128,100), "S19922C15");
    check_base_class_offset(lv, (S19922C6*)(S19922C5*), ABISELECT(128,100), "S19922C15");
    check_base_class_offset(lv, (S19922C8*)(S19922C5*), ABISELECT(544,428), "S19922C15");
    check_base_class_offset(lv, (S19922C5*), 0, "S19922C15");
    check_field_offset(lv, s19922c15f0, ABISELECT(3840,2852), "S19922C15.s19922c15f0");
    check_field_offset(lv, s19922c15f1, ABISELECT(4416,3276), "S19922C15.s19922c15f1");
    check_field_offset(lv, s19922c15f2, ABISELECT(4992,3700), "S19922C15.s19922c15f2");
    check_field_offset(lv, s19922c15f3, ABISELECT(5008,3708), "S19922C15.s19922c15f3");
    check_field_offset(lv, s19922c15f4, ABISELECT(39568,29376), "S19922C15.s19922c15f4");
    check_field_offset(lv, s19922c15f5, ABISELECT(39576,29380), "S19922C15.s19922c15f5");
    check_field_offset(lv, s19922c15f6, ABISELECT(39584,29384), "S19922C15.s19922c15f6");
    test_class_info(&lv, &cd_S19922C15);
    dp->~S19922C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C15(Test_S19922C15, "S19922C15", ABISELECT(41024,30476));

#else // __cplusplus

extern void _ZN9S19922C15C1Ev();
extern void _ZN9S19922C15D1Ev();
Name_Map name_map_S19922C15[] = {
  NSPAIR(_ZN9S19922C15C1Ev),
  NSPAIR(_ZN9S19922C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C5;
extern VTBL_ENTRY _ZTI8S19922C5[];
extern  VTBL_ENTRY _ZTV8S19922C5[];
static Base_Class bases_S19922C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    ABISELECT(39600,29388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(39600,29388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(40320,29920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(40176,29812), //bcp->offset
    25, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(40608,30148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C6,    ABISELECT(40608,30148), //bcp->offset
    28, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19922C9,    ABISELECT(39600,29388), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(128,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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19922C6,    ABISELECT(128,100), //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
    11, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S19922C15[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
extern void _ZN9S19922C153v10Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY vtc_S19922C15[] = {
  ABISELECT(40608,30148),
  ABISELECT(40320,29920),
  ABISELECT(39600,29388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
  (VTBL_ENTRY)&_ZN9S19922C153v10Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(1008,760),
  ABISELECT(720,532),
  ABISELECT(-39600,-29388),
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-40176,-29812),
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  0,
  ABISELECT(-40608,-30148),
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S19922C15[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C15[] = {
  ABISELECT(1008,760),
  ABISELECT(720,532),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C9__9S19922C15[] = {
  0,
  0,
  ABISELECT(-1008,-760),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
static  VTT_ENTRY vtt_S19922C15[] = {
  {&(_ZTV9S19922C15[5]),  5,34},
  {&(_ZTV9S19922C15[21]),  21,34},
  {&(_ZTV9S19922C15[27]),  27,34},
  {&(_ZTV9S19922C15[32]),  32,34},
  {&(_tg__ZTV8S19922C9__9S19922C15[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C9__9S19922C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19922C15[];
extern  VTBL_ENTRY _ZTV9S19922C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C15[];
Class_Descriptor cd_S19922C15 = {  "S19922C15", // class name
  bases_S19922C15, 12,
  &(vtc_S19922C15[0]), // expected_vtbl_contents
  &(vtt_S19922C15[0]), // expected_vtt_contents
  ABISELECT(41024,30476), // object size
  NSPAIRA(_ZTI9S19922C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19922C15),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19922C15),6, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19922C17  : S19922C2 , virtual S19922C12 , virtual S19922C13 {
  void *s19922c17f0;
  long double s19922c17f1;
  int s19922c17f2:4;
  void *s19922c17f3[6];
  ::S19922C2 s19922c17f4;
  int s19922c17f5;
  long s19922c17f6;
  int s19922c17f7;
  __tsi64 s19922c17f8;
  ~S19922C17(); // tgen
  S19922C17(); // tgen
};
//SIG(-1 S19922C17) C1{ BC2{ v1 FL[8] Fc[4] FL:7 Fi FD FL} VBC3{ m FD Fp[10] FD Fi:0 Fi FD FC4{ BC2 v5 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 Fl FD FC6{ BC2 v2 v3 v4 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}} VBC7{ BC2 VBC6 VBC4 BC8{ BC6 VBC9{ m Fc FU5 FC2 FL FU5[3] Fc} BC2 VBC4 Fl Fl} BC9 v6 Fi} Fp FD Fi:4 Fp[6] FC2 Fi Fl Fi FL}


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

static void Test_S19922C17()
{
  extern Class_Descriptor cd_S19922C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(248,741)];
    init_test(&cd_S19922C17, buf);
    S19922C17 *dp, &lv = *(dp=new (buf) S19922C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3952,2960), "sizeof(S19922C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C17)");
    /*is_ambiguous_... S19922C17::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*), 0, "S19922C17");
    check_base_class_offset(lv, (S19922C12*), ABISELECT(368,264), "S19922C17");
    /*is_ambiguous_... S19922C13::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C13*), ABISELECT(1536,1116), "S19922C17");
    /*is_ambiguous_... S19922C17::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C10*), ABISELECT(2672,1980), "S19922C17");
    /*is_ambiguous_... S19922C13::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C10*)(S19922C13*), ABISELECT(2672,1980), "S19922C17");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(3248,2404), "S19922C17");
    check_base_class_offset(lv, (S19922C6*)(S19922C13*), ABISELECT(3248,2404), "S19922C17");
    check_base_class_offset(lv, (S19922C6*)(S19922C9*)(S19922C13*), ABISELECT(3248,2404), "S19922C17");
    check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*)(S19922C13*), ABISELECT(1664,1216), "S19922C17");
    check_base_class_offset(lv, (S19922C10*)(S19922C9*)(S19922C13*), ABISELECT(1664,1216), "S19922C17");
    check_base_class_offset(lv, (S19922C8*)(S19922C9*)(S19922C13*), ABISELECT(3664,2732), "S19922C17");
    /*is_ambiguous_... S19922C9::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*)(S19922C13*), ABISELECT(2240,1640), "S19922C17");
    check_base_class_offset(lv, (S19922C9*)(S19922C13*), ABISELECT(1664,1216), "S19922C17");
    /*is_ambiguous_... S19922C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C13*), ABISELECT(2384,1748), "S19922C17");
    check_base_class_offset(lv, (S19922C13*), ABISELECT(1536,1116), "S19922C17");
    check_field_offset(lv, s19922c17f0, ABISELECT(120,100), "S19922C17.s19922c17f0");
    check_field_offset(lv, s19922c17f1, ABISELECT(128,104), "S19922C17.s19922c17f1");
    set_bf_and_test(lv, s19922c17f2, ABISELECT(144,116), 0, 4, 1, "S19922C17");
    set_bf_and_test(lv, s19922c17f2, ABISELECT(144,116), 0, 4, hide_sll(1LL<<3), "S19922C17");
    check_field_offset(lv, s19922c17f3, ABISELECT(152,120), "S19922C17.s19922c17f3");
    check_field_offset(lv, s19922c17f4, ABISELECT(208,144), "S19922C17.s19922c17f4");
    check_field_offset(lv, s19922c17f5, ABISELECT(336,244), "S19922C17.s19922c17f5");
    check_field_offset(lv, s19922c17f6, ABISELECT(344,248), "S19922C17.s19922c17f6");
    check_field_offset(lv, s19922c17f7, ABISELECT(352,252), "S19922C17.s19922c17f7");
    check_field_offset(lv, s19922c17f8, ABISELECT(360,256), "S19922C17.s19922c17f8");
    test_class_info(&lv, &cd_S19922C17);
    dp->~S19922C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C17(Test_S19922C17, "S19922C17", ABISELECT(3952,2960));

#else // __cplusplus

extern void _ZN9S19922C17C1Ev();
extern void _ZN9S19922C17D1Ev();
Name_Map name_map_S19922C17[] = {
  NSPAIR(_ZN9S19922C17C1Ev),
  NSPAIR(_ZN9S19922C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C13;
extern VTBL_ENTRY _ZTI9S19922C13[];
extern  VTBL_ENTRY _ZTV9S19922C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C13[];
static Base_Class bases_S19922C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C12,    ABISELECT(368,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C2,    ABISELECT(1536,1116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(2672,1980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C10,    ABISELECT(2672,1980), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //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
    13, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(3248,2404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C6,    ABISELECT(3248,2404), //bcp->offset
    41, //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
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(1664,1216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(1664,1216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(3664,2732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(2240,1640), //bcp->offset
    28, //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
    11, //immediately_derived
  0, 0},
  {&cd_S19922C9,    ABISELECT(1664,1216), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(2384,1748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C13,    ABISELECT(1536,1116), //bcp->offset
    8, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19922C17[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY vtc_S19922C17[] = {
  ABISELECT(3664,2732),
  ABISELECT(3248,2404),
  ABISELECT(2672,1980),
  ABISELECT(1536,1116),
  ABISELECT(368,264),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  ABISELECT(128,100),
  ABISELECT(128,100),
  ABISELECT(128,100),
  0,
  0,
  ABISELECT(2128,1616),
  ABISELECT(1712,1288),
  ABISELECT(1136,864),
  ABISELECT(-1536,-1116),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  ABISELECT(-1664,-1216),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-2240,-1640),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-2672,-1980),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  0,
  0,
  ABISELECT(-3248,-2404),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S19922C17[];
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C13__9S19922C17[] = {
  ABISELECT(2128,1616),
  ABISELECT(1712,1288),
  ABISELECT(1136,864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C13__9S19922C17[] = {
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C99S19922C13__9S19922C17[] = {
  0,
  0,
  ABISELECT(-1584,-1188),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__9S19922C13__9S19922C17[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-864),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__9S19922C13__9S19922C17[] = {
  0,
  0,
  ABISELECT(-1712,-1288),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C13__9S19922C17[] = {
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
static  VTT_ENTRY vtt_S19922C17[] = {
  {&(_ZTV9S19922C17[7]),  7,47},
  {&(_ZTV9S19922C17[18]),  18,47},
  {&(_ZTV9S19922C17[37]),  37,47},
  {&(_ZTV9S19922C17[45]),  45,47},
  {&(_ZTV9S19922C17[24]),  24,47},
  {&(_ZTV9S19922C17[30]),  30,47},
  {&(_tg__ZTV9S19922C13__9S19922C17[5]),  5,7},
  {&(_tg__ZTV8S19922C99S19922C13__9S19922C17[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C99S19922C13__9S19922C17[4]),  4,6},
  {&(_tg__ZTV9S19922C10__9S19922C13__9S19922C17[6]),  6,10},
  {&(_tg__ZTV8S19922C6__9S19922C13__9S19922C17[4]),  4,6},
  {&(_tg__ZTV8S19922C9__9S19922C13__9S19922C17[4]),  4,8},
};
extern VTBL_ENTRY _ZTI9S19922C17[];
extern  VTBL_ENTRY _ZTV9S19922C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C17[];
Class_Descriptor cd_S19922C17 = {  "S19922C17", // class name
  bases_S19922C17, 14,
  &(vtc_S19922C17[0]), // expected_vtbl_contents
  &(vtt_S19922C17[0]), // expected_vtt_contents
  ABISELECT(3952,2960), // object size
  NSPAIRA(_ZTI9S19922C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19922C17),47, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19922C17),12, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19922C18  {
  char s19922c18f0;
  int s19922c18f1;
  long double s19922c18f2;
  int s19922c18f3;
  char s19922c18f4;
  int s19922c18f5;
  virtual void  v11(); // _ZN9S19922C183v11Ev
  ~S19922C18(); // tgen
  S19922C18(); // tgen
};
//SIG(-1 S19922C18) C1{ v1 Fc Fi FD Fi Fc Fi}


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

static void Test_S19922C18()
{
  extern Class_Descriptor cd_S19922C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,10)];
    init_test(&cd_S19922C18, buf);
    S19922C18 *dp, &lv = *(dp=new (buf) S19922C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S19922C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C18)");
    check_field_offset(lv, s19922c18f0, ABISELECT(8,4), "S19922C18.s19922c18f0");
    check_field_offset(lv, s19922c18f1, ABISELECT(12,8), "S19922C18.s19922c18f1");
    check_field_offset(lv, s19922c18f2, ABISELECT(16,12), "S19922C18.s19922c18f2");
    check_field_offset(lv, s19922c18f3, ABISELECT(32,24), "S19922C18.s19922c18f3");
    check_field_offset(lv, s19922c18f4, ABISELECT(36,28), "S19922C18.s19922c18f4");
    check_field_offset(lv, s19922c18f5, ABISELECT(40,32), "S19922C18.s19922c18f5");
    test_class_info(&lv, &cd_S19922C18);
    dp->~S19922C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C18(Test_S19922C18, "S19922C18", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN9S19922C18C1Ev();
extern void _ZN9S19922C18D1Ev();
Name_Map name_map_S19922C18[] = {
  NSPAIR(_ZN9S19922C18C1Ev),
  NSPAIR(_ZN9S19922C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19922C18[];
extern void _ZN9S19922C183v11Ev();
static  VTBL_ENTRY vtc_S19922C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C18[0]),
  (VTBL_ENTRY)&_ZN9S19922C183v11Ev,
};
extern VTBL_ENTRY _ZTI9S19922C18[];
extern  VTBL_ENTRY _ZTV9S19922C18[];
Class_Descriptor cd_S19922C18 = {  "S19922C18", // class name
  0,0,//no base classes
  &(vtc_S19922C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI9S19922C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19922C18),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19922C1  : virtual S19922C2 , virtual S19922C3 , virtual S19922C15 , virtual S19922C17 , virtual S19922C18 {
  ::S19922C18 s19922c1f0;
  ::S19921C19 s19922c1f1;
  char s19922c1f2;
  ::S468C20_nt s19922c1f3;
  void *s19922c1f4;
  int s19922c1f5;
  int s19922c1f6;
  ::S19922C4 s19922c1f7;
  virtual  ~S19922C1(); // _ZN8S19922C1D2Ev
  S19922C1(); // tgen
};
//SIG(1 S19922C1) C1{ VBC2{ v1 FL[8] Fc[4] FL:7 Fi FD FL} VBC3{ VBC4{ BC5{ BC2 BC6{ BC2 v2 FC2 FC2 FU7{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC8{ m Fc FU7 FC2 FL FU7[3] Fc} v3 v4 FU7 Fc Fc FC9{ BC10{ BC2 v5 v6 v7 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC8 BC2 VBC6 Fl Fl} FC11{ v12 FD Fp FD[8] Fp[9] FC12{ m FD Fp[10] FD Fi:0 Fi FD FC6 Fc:8 Fl FD FC10} Fi Fc FD[4] Fc Fi} Fi Fl} BC13{ BC2 VBC10 VBC6 BC9 BC8 v8 Fi} BC12 BC8 VBC2 Fp FD Fi Fi Fc[7]} VBC12 vd v9 FC9 Fi Fp Fi:32 Fi FC14{ VBC8 VBC9 vd v13 v14 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD} VBC15{ VBC9 BC5 v10 FC10 FC10 FL FC5[9] FU16{ m Fc:6} Fp Fc} VBC17{ BC2 VBC12 VBC13 Fp FD Fi:4 Fp[6] FC2 Fi Fl Fi FL} VBC18{ v11 Fc Fi FD Fi Fc Fi} vd FC18 FU19{ m Fi:6} Fc FC20{} Fp Fi Fi FC4}


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

static void Test_S19922C1()
{
  extern Class_Descriptor cd_S19922C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3872,11526)];
    init_test(&cd_S19922C1, buf);
    S19922C1 *dp, &lv = *(dp=new (buf) S19922C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(61936,46100), "sizeof(S19922C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19922C1)");
    /*is_ambiguous_... S19922C1::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*), ABISELECT(7984,5968), "S19922C1");
    /*is_ambiguous_... S19922C4::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C4*), ABISELECT(7984,5968), "S19922C1");
    /*is_ambiguous_... S19922C5::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C5*)(S19922C4*), ABISELECT(11136,8356), "S19922C1");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*)(S19922C5*)(S19922C4*), ABISELECT(11264,8456), "S19922C1");
    check_base_class_offset(lv, (S19922C6*)(S19922C5*)(S19922C4*), ABISELECT(11264,8456), "S19922C1");
    check_base_class_offset(lv, (S19922C8*)(S19922C5*)(S19922C4*), ABISELECT(11680,8784), "S19922C1");
    check_base_class_offset(lv, (S19922C5*)(S19922C4*), ABISELECT(11136,8356), "S19922C1");
    /*is_ambiguous_... S19922C13::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C13*)(S19922C4*), ABISELECT(14976,11208), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C10*), ABISELECT(17616,13184), "S19922C1");
    /*is_ambiguous_... S19922C13::S19922C10 */ AMB_check_base_class_offset(lv, (S19922C10*)(S19922C13*)(S19922C4*), ABISELECT(17616,13184), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C10*)(S19922C13*), ABISELECT(17616,13184), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C6 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C6*), ABISELECT(18192,13608), "S19922C1");
    check_base_class_offset(lv, (S19922C6*)(S19922C13*)(S19922C4*), ABISELECT(18192,13608), "S19922C1");
    check_base_class_offset(lv, (S19922C6*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(18192,13608), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C9 */ AMB_check_base_class_offset(lv, (S19922C6*)(S19922C9*), ABISELECT(18192,13608), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C6*)(S19922C13*), ABISELECT(18192,13608), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C6*)(S19922C9*)(S19922C13*), ABISELECT(18192,13608), "S19922C1");
    check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(15104,11308), "S19922C1");
    check_base_class_offset(lv, (S19922C10*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(15104,11308), "S19922C1");
    check_base_class_offset(lv, (S19922C8*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(18608,13936), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C9 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C9*), ABISELECT(18608,13936), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C9*)(S19922C13*), ABISELECT(18608,13936), "S19922C1");
    /*is_ambiguous_... S19922C9::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(15680,11732), "S19922C1");
    check_base_class_offset(lv, (S19922C9*)(S19922C13*)(S19922C4*), ABISELECT(15104,11308), "S19922C1");
    /*is_ambiguous_... S19922C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C13*)(S19922C4*), ABISELECT(15824,11840), "S19922C1");
    check_base_class_offset(lv, (S19922C13*)(S19922C4*), ABISELECT(14976,11208), "S19922C1");
    check_base_class_offset(lv, (S19922C12*)(S19922C4*), ABISELECT(16112,12072), "S19922C1");
    /*is_ambiguous_... S19922C4::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C4*), ABISELECT(17280,12924), "S19922C1");
    check_base_class_offset(lv, (S19922C4*)(S19922C3*), ABISELECT(11136,8356), "S19922C1");
    /*is_ambiguous_... S19922C3::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*)(S19922C3*), ABISELECT(18896,14164), "S19922C1");
    check_base_class_offset(lv, (S19922C12*)(S19922C17*), ABISELECT(18896,14164), "S19922C1");
    check_base_class_offset(lv, (S19922C3*), ABISELECT(8112,6068), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C9 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*), ABISELECT(59664,44404), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C9 */ AMB_check_base_class_offset(lv, (S19922C10*)(S19922C9*), ABISELECT(59664,44404), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C9 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*), ABISELECT(60240,44828), "S19922C1");
    check_base_class_offset(lv, (S19922C9*)(S19922C15*), ABISELECT(59664,44404), "S19922C1");
    /*is_ambiguous_... S19922C5::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C5*)(S19922C15*), ABISELECT(20064,15016), "S19922C1");
    check_base_class_offset(lv, (S19922C2*)(S19922C6*)(S19922C5*)(S19922C15*), ABISELECT(20192,15116), "S19922C1");
    check_base_class_offset(lv, (S19922C6*)(S19922C5*)(S19922C15*), ABISELECT(20192,15116), "S19922C1");
    check_base_class_offset(lv, (S19922C8*)(S19922C5*)(S19922C15*), ABISELECT(20608,15444), "S19922C1");
    check_base_class_offset(lv, (S19922C5*)(S19922C15*), ABISELECT(20064,15016), "S19922C1");
    check_base_class_offset(lv, (S19922C15*), ABISELECT(20064,15016), "S19922C1");
    /*is_ambiguous_... S19922C17::S19922C2 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C17*), ABISELECT(60384,44936), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C13*), ABISELECT(60752,45200), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C10*)(S19922C9*)(S19922C13*), ABISELECT(60880,45300), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C10*)(S19922C9*)(S19922C13*), ABISELECT(60880,45300), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C2*)(S19922C9*)(S19922C13*), ABISELECT(61456,45724), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C9*)(S19922C13*), ABISELECT(60880,45300), "S19922C1");
    /*is_ambiguous_... S19922C1::S19922C13 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19922C13*), ABISELECT(61600,45832), "S19922C1");
    check_base_class_offset(lv, (S19922C13*)(S19922C17*), ABISELECT(60752,45200), "S19922C1");
    check_base_class_offset(lv, (S19922C17*), ABISELECT(60384,44936), "S19922C1");
    check_base_class_offset(lv, (S19922C18*), ABISELECT(61888,46064), "S19922C1");
    check_field_offset(lv, s19922c1f0, ABISELECT(16,4), "S19922C1.s19922c1f0");
    check_field_offset(lv, s19922c1f1, ABISELECT(64,40), "S19922C1.s19922c1f1");
    check_field_offset(lv, s19922c1f2, ABISELECT(68,44), "S19922C1.s19922c1f2");
    check_field_offset(lv, s19922c1f3, ABISELECT(69,45), "S19922C1.s19922c1f3");
    check_field_offset(lv, s19922c1f4, ABISELECT(72,48), "S19922C1.s19922c1f4");
    check_field_offset(lv, s19922c1f5, ABISELECT(80,52), "S19922C1.s19922c1f5");
    check_field_offset(lv, s19922c1f6, ABISELECT(84,56), "S19922C1.s19922c1f6");
    check_field_offset(lv, s19922c1f7, ABISELECT(96,60), "S19922C1.s19922c1f7");
    test_class_info(&lv, &cd_S19922C1);
    dp->~S19922C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19922C1(Test_S19922C1, "S19922C1", ABISELECT(61936,46100));

#else // __cplusplus

extern void _ZN8S19922C1C1Ev();
extern void _ZN8S19922C1D2Ev();
Name_Map name_map_S19922C1[] = {
  NSPAIR(_ZN8S19922C1C1Ev),
  NSPAIR(_ZN8S19922C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C5;
extern VTBL_ENTRY _ZTI8S19922C5[];
extern  VTBL_ENTRY _ZTV8S19922C5[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C13;
extern VTBL_ENTRY _ZTI9S19922C13[];
extern  VTBL_ENTRY _ZTV9S19922C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C4;
extern VTBL_ENTRY _ZTI8S19922C4[];
extern  VTBL_ENTRY _ZTV8S19922C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C4[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C3;
extern VTBL_ENTRY _ZTI8S19922C3[];
extern  VTBL_ENTRY _ZTV8S19922C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C3[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C6;
extern VTBL_ENTRY _ZTI8S19922C6[];
extern  VTBL_ENTRY _ZTV8S19922C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C5;
extern VTBL_ENTRY _ZTI8S19922C5[];
extern  VTBL_ENTRY _ZTV8S19922C5[];
extern Class_Descriptor cd_S19922C15;
extern VTBL_ENTRY _ZTI9S19922C15[];
extern  VTBL_ENTRY _ZTV9S19922C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C15[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C10;
extern VTBL_ENTRY _ZTI9S19922C10[];
extern  VTBL_ENTRY _ZTV9S19922C10[];
extern Class_Descriptor cd_S19922C2;
extern VTBL_ENTRY _ZTI8S19922C2[];
extern  VTBL_ENTRY _ZTV8S19922C2[];
extern Class_Descriptor cd_S19922C9;
extern VTBL_ENTRY _ZTI8S19922C9[];
extern  VTBL_ENTRY _ZTV8S19922C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19922C13;
extern VTBL_ENTRY _ZTI9S19922C13[];
extern  VTBL_ENTRY _ZTV9S19922C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C13[];
extern Class_Descriptor cd_S19922C17;
extern VTBL_ENTRY _ZTI9S19922C17[];
extern  VTBL_ENTRY _ZTV9S19922C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19922C17[];
extern Class_Descriptor cd_S19922C18;
extern VTBL_ENTRY _ZTI9S19922C18[];
extern  VTBL_ENTRY _ZTV9S19922C18[];
static Base_Class bases_S19922C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C2,    ABISELECT(7984,5968), //bcp->offset
    16, //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_S19922C2,    ABISELECT(11136,8356), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C2,    ABISELECT(11264,8456), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19922C6,    ABISELECT(11264,8456), //bcp->offset
    50, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(11680,8784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C5,    ABISELECT(11136,8356), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(14976,11208), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C2,    ABISELECT(17616,13184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(17616,13184), //bcp->offset
    72, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(18192,13608), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19922C6,    ABISELECT(18192,13608), //bcp->offset
    82, //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
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(15104,11308), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C10,    ABISELECT(15104,11308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(18608,13936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C2,    ABISELECT(15680,11732), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19922C9,    ABISELECT(15104,11308), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(15824,11840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C13,    ABISELECT(14976,11208), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(16112,12072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(17280,12924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C4,    ABISELECT(11136,8356), //bcp->offset
    33, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19922C12,    ABISELECT(18896,14164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C3,    ABISELECT(8112,6068), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C2,    ABISELECT(59664,44404), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C10,    ABISELECT(59664,44404), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(60240,44828), //bcp->offset
    118, //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
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19922C9,    ABISELECT(59664,44404), //bcp->offset
    106, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S19922C2,    ABISELECT(20064,15016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(20192,15116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19922C6,    ABISELECT(20192,15116), //bcp->offset
    102, //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
    24, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(20608,15444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C5,    ABISELECT(20064,15016), //bcp->offset
    -1, //bcp->virtual_function_table_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
    32, //immediately_derived
  0, 0},
  {&cd_S19922C15,    ABISELECT(20064,15016), //bcp->offset
    88, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C2,    ABISELECT(60384,44936), //bcp->offset
    -1, //bcp->virtual_function_table_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
    41, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(60752,45200), //bcp->offset
    -1, //bcp->virtual_function_table_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
    40, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(60880,45300), //bcp->offset
    -1, //bcp->virtual_function_table_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
    36, //immediately_derived
  0, 0},
  {&cd_S19922C10,    ABISELECT(60880,45300), //bcp->offset
    -1, //bcp->virtual_function_table_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
    38, //immediately_derived
  0, 0},
  {&cd_S19922C2,    ABISELECT(61456,45724), //bcp->offset
    150, //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
    30, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19922C9,    ABISELECT(60880,45300), //bcp->offset
    142, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(61600,45832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C13,    ABISELECT(60752,45200), //bcp->offset
    130, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S19922C17,    ABISELECT(60384,44936), //bcp->offset
    121, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C18,    ABISELECT(61888,46064), //bcp->offset
    153, //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
    35, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19922C1[];
extern void _ZN8S19922C1D1Ev();
extern void _ZN8S19922C1D0Ev();
extern void _ZN8S19922C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19922C1D1Ev,_ZTv0_n36_N8S19922C1D1Ev)();
extern void ABISELECT(_ZThn8112_N8S19922C1D1Ev,_ZThn6068_N8S19922C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19922C1D0Ev,_ZTv0_n36_N8S19922C1D0Ev)();
extern void ABISELECT(_ZThn8112_N8S19922C1D0Ev,_ZThn6068_N8S19922C1D0Ev)() __attribute__((weak));
extern void _ZN8S19922C32v9Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
extern void _ZN9S19922C153v10Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C183v11Ev();
static  VTBL_ENTRY vtc_S19922C1[] = {
  ABISELECT(61888,46064),
  ABISELECT(60752,45200),
  ABISELECT(60384,44936),
  ABISELECT(59664,44404),
  ABISELECT(20064,15016),
  ABISELECT(18896,14164),
  ABISELECT(18608,13936),
  ABISELECT(18192,13608),
  ABISELECT(17616,13184),
  ABISELECT(11136,8356),
  ABISELECT(8112,6068),
  ABISELECT(7984,5968),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19922C1D0Ev,
  0,
  ABISELECT(-7984,-5968),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  ABISELECT(-8112,-6068),
  ABISELECT(10784,8096),
  ABISELECT(-128,-100),
  ABISELECT(10496,7868),
  ABISELECT(10080,7540),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  ABISELECT(-8112,-6068),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19922C1D1Ev,_ZTv0_n36_N8S19922C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19922C1D0Ev,_ZTv0_n36_N8S19922C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19922C32v9Ev,
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(-3152,-2388),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  ABISELECT(-11136,-8356),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
  ABISELECT(-11264,-8456),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-14976,-11208),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-15104,-11308),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-15680,-11732),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-17616,-13184),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  0,
  0,
  ABISELECT(-18192,-13608),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
  0,
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(-1872,-1408),
  ABISELECT(-1456,-1080),
  ABISELECT(39600,29388),
  ABISELECT(-20064,-15016),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
  (VTBL_ENTRY)&_ZN9S19922C153v10Ev,
  ABISELECT(-20192,-15116),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-41472,-30796),
  ABISELECT(-41056,-30468),
  ABISELECT(-59664,-44404),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-60240,-44828),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  ABISELECT(-41776,-31000),
  ABISELECT(-42192,-31328),
  ABISELECT(-42768,-31752),
  ABISELECT(368,264),
  ABISELECT(-41488,-30772),
  ABISELECT(-60384,-44936),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  ABISELECT(128,100),
  ABISELECT(128,100),
  ABISELECT(128,100),
  0,
  0,
  ABISELECT(-42144,-31264),
  ABISELECT(-42560,-31592),
  ABISELECT(-43136,-32016),
  ABISELECT(-60752,-45200),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
  ABISELECT(-42688,-31692),
  ABISELECT(-42272,-31364),
  ABISELECT(-60880,-45300),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
  ABISELECT(-61456,-45724),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  0,
  ABISELECT(-61888,-46064),
  (VTBL_ENTRY)&(_ZTI8S19922C1[0]),
  (VTBL_ENTRY)&_ZN9S19922C183v11Ev,
};
extern VTBL_ENTRY _ZTV8S19922C1[];
extern void _ZN8S19922C3D1Ev();
extern void _ZN8S19922C3D0Ev();
extern void _ZN8S19922C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C3__8S19922C1[] = {
  ABISELECT(10784,8096),
  ABISELECT(-128,-100),
  ABISELECT(10496,7868),
  ABISELECT(10080,7540),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19922C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19922C32v9Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C4__8S19922C3__8S19922C1[] = {
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(-3152,-2388),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  ABISELECT(-3024,-2288),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C68S19922C58S19922C4__8S19922C3__8S19922C1[] = {
  ABISELECT(-3152,-2388),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C138S19922C4__8S19922C3__8S19922C1[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-6864,-5140),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__8S19922C3__8S19922C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7116),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__A1__8S19922C3__8S19922C1[] = {
  0,
  0,
  ABISELECT(-10080,-7540),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C138S19922C4__8S19922C3__8S19922C1[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-6992,-5240),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C28S19922C99S19922C138S19922C4__A6__8S19922C3__8S19922C1[] = {
  ABISELECT(-7568,-5664),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C2__A7__8S19922C3__8S19922C1[] = {
  0,
  ABISELECT(128,100),
  (VTBL_ENTRY)&(_ZTI8S19922C3[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C4__8S19922C1[] = {
  ABISELECT(-3152,-2388),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C138S19922C4__8S19922C1[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C138S19922C4__8S19922C1[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C99S19922C138S19922C4__8S19922C1[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__9S19922C138S19922C4__8S19922C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__9S19922C138S19922C4__8S19922C1[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C138S19922C4__8S19922C1[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C13__8S19922C4__8S19922C1[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__8S19922C4__8S19922C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__A1__8S19922C4__8S19922C1[] = {
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C13__8S19922C4__8S19922C1[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C2__A7__8S19922C4__8S19922C1[] = {
  0,
  ABISELECT(3152,2388),
  (VTBL_ENTRY)&(_ZTI8S19922C4[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C52v3Ev();
extern void _ZN8S19922C52v4Ev();
extern void _ZN9S19922C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C15__8S19922C1[] = {
  ABISELECT(-1872,-1408),
  ABISELECT(-1456,-1080),
  ABISELECT(39600,29388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19922C52v4Ev,
  (VTBL_ENTRY)&_ZN9S19922C153v10Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C15__8S19922C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-41472,-30796),
  ABISELECT(-41056,-30468),
  ABISELECT(-39600,-29388),
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C28S19922C9__A1__9S19922C15__8S19922C1[] = {
  ABISELECT(-40176,-29812),
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__9S19922C15__8S19922C1[] = {
  0,
  0,
  ABISELECT(1872,1408),
  (VTBL_ENTRY)&(_ZTI9S19922C15[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__A1__8S19922C1[] = {
  ABISELECT(-41472,-30796),
  ABISELECT(-41056,-30468),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C9__A1__8S19922C1[] = {
  0,
  0,
  ABISELECT(41472,30796),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C17__8S19922C1[] = {
  ABISELECT(-41776,-31000),
  ABISELECT(-42192,-31328),
  ABISELECT(-42768,-31752),
  ABISELECT(368,264),
  ABISELECT(-41488,-30772),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C13__9S19922C17__8S19922C1[] = {
  ABISELECT(128,100),
  ABISELECT(128,100),
  ABISELECT(128,100),
  0,
  0,
  ABISELECT(-42144,-31264),
  ABISELECT(-42560,-31592),
  ABISELECT(-43136,-32016),
  ABISELECT(-368,-264),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__9S19922C17__8S19922C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(42768,31752),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__9S19922C17__8S19922C1[] = {
  0,
  0,
  ABISELECT(42192,31328),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C13__9S19922C17__8S19922C1[] = {
  ABISELECT(-42688,-31692),
  ABISELECT(-42272,-31364),
  ABISELECT(-496,-364),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C28S19922C99S19922C13__A5__9S19922C17__8S19922C1[] = {
  ABISELECT(-1072,-788),
  (VTBL_ENTRY)&(_ZTI9S19922C17[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C13__A1__8S19922C1[] = {
  ABISELECT(-42144,-31264),
  ABISELECT(-42560,-31592),
  ABISELECT(-43136,-32016),
  0,
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C132v8Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C99S19922C13__A2__8S19922C1[] = {
  ABISELECT(-42688,-31692),
  ABISELECT(-42272,-31364),
  0,
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__8S19922C99S19922C13__A2__8S19922C1[] = {
  0,
  0,
  ABISELECT(42688,31692),
  (VTBL_ENTRY)&(_ZTI8S19922C9[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19922C10__9S19922C13__A1__8S19922C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(43136,32016),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN8S19922C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C6__9S19922C13__A1__8S19922C1[] = {
  0,
  0,
  ABISELECT(42560,31592),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19922C62v2Ev,
};
extern void _ZN8S19922C22v1Ev();
extern void _ZN9S19922C102v5Ev();
extern void _ZN9S19922C102v6Ev();
extern void _ZN9S19922C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19922C9__9S19922C13__A1__8S19922C1[] = {
  ABISELECT(-42688,-31692),
  ABISELECT(-42272,-31364),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19922C13[0]),
  (VTBL_ENTRY)&_ZN8S19922C22v1Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19922C102v7Ev,
};
static  VTT_ENTRY vtt_S19922C1[] = {
  {&(_ZTV8S19922C1[14]),  14,157},
  {&(_ZTV8S19922C1[19]),  19,157},
  {&(_ZTV8S19922C1[30]),  30,157},
  {&(_ZTV8S19922C1[47]),  47,157},
  {&(_ZTV8S19922C1[52]),  52,157},
  {&(_ZTV8S19922C1[59]),  59,157},
  {&(_ZTV8S19922C1[78]),  78,157},
  {&(_ZTV8S19922C1[86]),  86,157},
  {&(_ZTV8S19922C1[65]),  65,157},
  {&(_ZTV8S19922C1[71]),  71,157},
  {&(_ZTV8S19922C1[98]),  98,157},
  {&(_ZTV8S19922C1[114]),  114,157},
  {&(_ZTV8S19922C1[120]),  120,157},
  {&(_ZTV8S19922C1[104]),  104,157},
  {&(_ZTV8S19922C1[129]),  129,157},
  {&(_ZTV8S19922C1[140]),  140,157},
  {&(_ZTV8S19922C1[146]),  146,157},
  {&(_ZTV8S19922C1[152]),  152,157},
  {&(_ZTV8S19922C1[156]),  156,157},
  {&(_tg__ZTV8S19922C3__8S19922C1[8]),  8,11},
  {&(_tg__ZTV8S19922C4__8S19922C3__8S19922C1[14]),  14,17},
  {&(_tg__ZTV8S19922C68S19922C58S19922C4__8S19922C3__8S19922C1[2]),  2,4},
  {&(_tg__ZTV9S19922C138S19922C4__8S19922C3__8S19922C1[5]),  5,7},
  {&(_tg__ZTV9S19922C10__8S19922C3__8S19922C1[6]),  6,10},
  {&(_tg__ZTV8S19922C6__A1__8S19922C3__8S19922C1[4]),  4,6},
  {&(_tg__ZTV8S19922C99S19922C138S19922C4__8S19922C3__8S19922C1[4]),  4,8},
  {&(_tg__ZTV8S19922C28S19922C99S19922C138S19922C4__A6__8S19922C3__8S19922C1[2]),  2,3},
  {&(_tg__ZTV8S19922C2__A7__8S19922C3__8S19922C1[3]),  3,4},
  {&(_tg__ZTV8S19922C4__8S19922C1[6]),  6,9},
  {&(_tg__ZTV9S19922C138S19922C4__8S19922C1[5]),  5,7},
  {&(_tg__ZTV8S19922C99S19922C138S19922C4__8S19922C1[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C99S19922C138S19922C4__8S19922C1[4]),  4,6},
  {&(_tg__ZTV9S19922C10__9S19922C138S19922C4__8S19922C1[6]),  6,10},
  {&(_tg__ZTV8S19922C6__9S19922C138S19922C4__8S19922C1[4]),  4,6},
  {&(_tg__ZTV8S19922C9__9S19922C138S19922C4__8S19922C1[4]),  4,8},
  {&(_tg__ZTV9S19922C13__8S19922C4__8S19922C1[5]),  5,7},
  {&(_tg__ZTV9S19922C10__8S19922C4__8S19922C1[6]),  6,10},
  {&(_tg__ZTV8S19922C6__A1__8S19922C4__8S19922C1[4]),  4,6},
  {&(_tg__ZTV8S19922C99S19922C13__8S19922C4__8S19922C1[4]),  4,8},
  {&(_tg__ZTV8S19922C2__A7__8S19922C4__8S19922C1[3]),  3,4},
  {&(_tg__ZTV9S19922C15__8S19922C1[5]),  5,9},
  {&(_tg__ZTV8S19922C9__9S19922C15__8S19922C1[8]),  8,12},
  {&(_tg__ZTV8S19922C28S19922C9__A1__9S19922C15__8S19922C1[2]),  2,3},
  {&(_tg__ZTV8S19922C6__9S19922C15__8S19922C1[4]),  4,6},
  {&(_tg__ZTV8S19922C9__A1__8S19922C1[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C9__A1__8S19922C1[4]),  4,6},
  {&(_tg__ZTV9S19922C17__8S19922C1[7]),  7,8},
  {&(_tg__ZTV9S19922C13__9S19922C17__8S19922C1[10]),  10,12},
  {&(_tg__ZTV9S19922C10__9S19922C17__8S19922C1[6]),  6,10},
  {&(_tg__ZTV8S19922C6__9S19922C17__8S19922C1[4]),  4,6},
  {&(_tg__ZTV8S19922C99S19922C13__9S19922C17__8S19922C1[4]),  4,8},
  {&(_tg__ZTV8S19922C28S19922C99S19922C13__A5__9S19922C17__8S19922C1[2]),  2,3},
  {&(_tg__ZTV9S19922C13__A1__8S19922C1[5]),  5,7},
  {&(_tg__ZTV8S19922C99S19922C13__A2__8S19922C1[4]),  4,8},
  {&(_tg__ZTV8S19922C6__8S19922C99S19922C13__A2__8S19922C1[4]),  4,6},
  {&(_tg__ZTV9S19922C10__9S19922C13__A1__8S19922C1[6]),  6,10},
  {&(_tg__ZTV8S19922C6__9S19922C13__A1__8S19922C1[4]),  4,6},
  {&(_tg__ZTV8S19922C9__9S19922C13__A1__8S19922C1[4]),  4,8},
};
extern VTBL_ENTRY _ZTI8S19922C1[];
extern  VTBL_ENTRY _ZTV8S19922C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19922C1[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19922C1D0Ev,_ZTv0_n36_N8S19922C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8112_N8S19922C1D0Ev,_ZThn6068_N8S19922C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19922C1D1Ev,_ZTv0_n36_N8S19922C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8112_N8S19922C1D1Ev,_ZThn6068_N8S19922C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19922C1 = {  "S19922C1", // class name
  bases_S19922C1, 43,
  &(vtc_S19922C1[0]), // expected_vtbl_contents
  &(vtt_S19922C1[0]), // expected_vtt_contents
  ABISELECT(61936,46100), // object size
  NSPAIRA(_ZTI8S19922C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19922C1),157, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19922C1),58, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20628C7  : S20507C6 {
  int s20628c7f0;
  long double s20628c7f1;
  int s20628c7f2;
  ::S20507C6 s20628c7f3;
  ::S20507C6 s20628c7f4;
  int s20628c7f5;
  long double s20628c7f6[8];
};
//SIG(-1 S20628C7) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S20628C7()
{
  extern Class_Descriptor cd_S20628C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S20628C7, buf);
    S20628C7 &lv = *(new (buf) S20628C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S20628C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C7)");
    check_base_class_offset(lv, (S20507C6*), 0, "S20628C7");
    check_field_offset(lv, s20628c7f0, ABISELECT(88,64), "S20628C7.s20628c7f0");
    check_field_offset(lv, s20628c7f1, ABISELECT(96,68), "S20628C7.s20628c7f1");
    check_field_offset(lv, s20628c7f2, ABISELECT(112,80), "S20628C7.s20628c7f2");
    check_field_offset(lv, s20628c7f3, ABISELECT(120,84), "S20628C7.s20628c7f3");
    check_field_offset(lv, s20628c7f4, ABISELECT(208,148), "S20628C7.s20628c7f4");
    check_field_offset(lv, s20628c7f5, ABISELECT(296,212), "S20628C7.s20628c7f5");
    check_field_offset(lv, s20628c7f6, ABISELECT(304,216), "S20628C7.s20628c7f6");
    test_class_info(&lv, &cd_S20628C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C7(Test_S20628C7, "S20628C7", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S20628C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20628C7[];
Class_Descriptor cd_S20628C7 = {  "S20628C7", // class name
  bases_S20628C7, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI8S20628C7),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  S20628C6  : S20628C7 , virtual S20507C6 {
  long double s20628c6f0[2];
  int s20628c6f1[2];
  long double s20628c6f2[3];
  virtual void  v2(); // _ZN8S20628C62v2Ev
  ~S20628C6(); // tgen
  S20628C6(); // tgen
};
//SIG(-1 S20628C6) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S20628C6()
{
  extern Class_Descriptor cd_S20628C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S20628C6, buf);
    S20628C6 *dp, &lv = *(dp=new (buf) S20628C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S20628C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C6)");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(16,4), "S20628C6");
    check_base_class_offset(lv, (S20628C7*), ABISELECT(16,4), "S20628C6");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S20628C6");
    check_field_offset(lv, s20628c6f0, ABISELECT(448,316), "S20628C6.s20628c6f0");
    check_field_offset(lv, s20628c6f1, ABISELECT(480,340), "S20628C6.s20628c6f1");
    check_field_offset(lv, s20628c6f2, ABISELECT(496,348), "S20628C6.s20628c6f2");
    test_class_info(&lv, &cd_S20628C6);
    dp->~S20628C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C6(Test_S20628C6, "S20628C6", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN8S20628C6C1Ev();
extern void _ZN8S20628C6D1Ev();
Name_Map name_map_S20628C6[] = {
  NSPAIR(_ZN8S20628C6C1Ev),
  NSPAIR(_ZN8S20628C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S20628C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20628C7,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20628C6[];
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY vtc_S20628C6[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S20628C6[];
static  VTT_ENTRY vtt_S20628C6[] = {
  {&(_ZTV8S20628C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
Class_Descriptor cd_S20628C6 = {  "S20628C6", // class name
  bases_S20628C6, 3,
  &(vtc_S20628C6[0]), // expected_vtbl_contents
  &(vtt_S20628C6[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI8S20628C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20628C6),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20628C6),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  S20628C5  : virtual S20507C6 , virtual S20628C6 , virtual S20628C7 {
  ::S468C20_nt s20628c5f0;
  ~S20628C5(); // tgen
  S20628C5(); // tgen
};
//SIG(-1 S20628C5) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S20628C5()
{
  extern Class_Descriptor cd_S20628C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S20628C5, buf);
    S20628C5 *dp, &lv = *(dp=new (buf) S20628C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S20628C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C5)");
    /*is_ambiguous_... S20628C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S20628C5");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(16,8), "S20628C5");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(128,76), "S20628C5");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(128,76), "S20628C5");
    check_base_class_offset(lv, (S20628C6*), ABISELECT(112,72), "S20628C5");
    /*is_ambiguous_... S20628C5::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(656,456), "S20628C5");
    /*is_ambiguous_... S20628C5::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*), ABISELECT(656,456), "S20628C5");
    check_field_offset(lv, s20628c5f0, ABISELECT(8,4), "S20628C5.s20628c5f0");
    test_class_info(&lv, &cd_S20628C5);
    dp->~S20628C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C5(Test_S20628C5, "S20628C5", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S20628C5C1Ev();
extern void _ZN8S20628C5D1Ev();
Name_Map name_map_S20628C5[] = {
  NSPAIR(_ZN8S20628C5C1Ev),
  NSPAIR(_ZN8S20628C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
static Base_Class bases_S20628C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20628C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20628C6,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20628C5[];
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY vtc_S20628C5[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S20628C5[];
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C5[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTT_ENTRY vtt_S20628C5[] = {
  {&(_ZTV8S20628C5[5]),  5,10},
  {&(_ZTV8S20628C5[9]),  9,10},
  {&(_tg__ZTV8S20628C6__8S20628C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20628C5[];
extern  VTBL_ENTRY _ZTV8S20628C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C5[];
Class_Descriptor cd_S20628C5 = {  "S20628C5", // class name
  bases_S20628C5, 6,
  &(vtc_S20628C5[0]), // expected_vtbl_contents
  &(vtt_S20628C5[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S20628C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20628C5),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20628C5),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  S20628C9  : S20507C6 , virtual S20628C7 , virtual S20507C11 , S20628C6 {
  ::S20628C5 s20628c9f0;
  ::S20628C6 s20628c9f1;
  virtual  ~S20628C9(); // _ZN8S20628C9D2Ev
  S20628C9(); // tgen
};
//SIG(-1 S20628C9) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ vd m Fp FD[5] Fp FD} BC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} vd FC6{ VBC2 VBC5 VBC3 FC7{}} FC5}


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

static void Test_S20628C9()
{
  extern Class_Descriptor cd_S20628C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(190,532)];
    init_test(&cd_S20628C9, buf);
    S20628C9 *dp, &lv = *(dp=new (buf) S20628C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3024,2124), "sizeof(S20628C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C9)");
    /*is_ambiguous_... S20628C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S20628C9");
    /*is_ambiguous_... S20628C9::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(2368,1664), "S20628C9");
    /*is_ambiguous_... S20628C9::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*), ABISELECT(2368,1664), "S20628C9");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2800,1976), "S20628C9");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(16,4), "S20628C9");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(16,4), "S20628C9");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(2928,2060), "S20628C9");
    check_base_class_offset(lv, (S20628C6*), 0, "S20628C9");
    check_field_offset(lv, s20628c9f0, ABISELECT(640,448), "S20628C9.s20628c9f0");
    check_field_offset(lv, s20628c9f1, ABISELECT(1728,1216), "S20628C9.s20628c9f1");
    test_class_info(&lv, &cd_S20628C9);
    dp->~S20628C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C9(Test_S20628C9, "S20628C9", ABISELECT(3024,2124));

#else // __cplusplus

extern void _ZN8S20628C9C1Ev();
extern void _ZN8S20628C9D2Ev();
Name_Map name_map_S20628C9[] = {
  NSPAIR(_ZN8S20628C9C1Ev),
  NSPAIR(_ZN8S20628C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
static Base_Class bases_S20628C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20628C7,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C11,    ABISELECT(2800,1976), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    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_S20628C7,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(2928,2060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    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 _ZTI8S20628C9[];
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C9D1Ev();
extern void _ZN8S20628C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev)();
extern void ABISELECT(_ZThn2800_N8S20628C9D1Ev,_ZThn1976_N8S20628C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev)();
extern void ABISELECT(_ZThn2800_N8S20628C9D0Ev,_ZThn1976_N8S20628C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20628C9[] = {
  ABISELECT(2800,1976),
  ABISELECT(2368,1664),
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D0Ev,
  ABISELECT(-2800,-1976),
  ABISELECT(-2800,-1976),
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20628C9[];
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C9[] = {
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTT_ENTRY vtt_S20628C9[] = {
  {&(_ZTV8S20628C9[5]),  5,13},
  {&(_tg__ZTV8S20628C6__8S20628C9[3]),  3,4},
  {&(_ZTV8S20628C9[11]),  11,13},
};
extern VTBL_ENTRY _ZTI8S20628C9[];
extern  VTBL_ENTRY _ZTV8S20628C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C9[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N8S20628C9D0Ev,_ZThn1976_N8S20628C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N8S20628C9D1Ev,_ZThn1976_N8S20628C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C9 = {  "S20628C9", // class name
  bases_S20628C9, 8,
  &(vtc_S20628C9[0]), // expected_vtbl_contents
  &(vtt_S20628C9[0]), // expected_vtt_contents
  ABISELECT(3024,2124), // object size
  NSPAIRA(_ZTI8S20628C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20628C9),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20628C9),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20628C2  : virtual S20507C6 , virtual S20507C11 , virtual S20628C5 , virtual S20628C9 {
  ::S20628C7 s20628c2f0;
  ::S20507C6 s20628c2f1;
  short s20628c2f2;
  void *s20628c2f3[2];
  __tsi64 s20628c2f4;
  long double s20628c2f5[2];
  __tsi64 s20628c2f6;
  int s20628c2f7[2];
  char s20628c2f8;
  ~S20628C2(); // tgen
  S20628C2(); // tgen
};
//SIG(-1 S20628C2) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ vd m Fp FD[5] Fp FD} VBC4{ VBC2 VBC5{ BC6{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC6 FC7{}} VBC8{ BC2 VBC6 VBC3 BC5 vd FC4 FC5} FC6 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc}


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

static void Test_S20628C2()
{
  extern Class_Descriptor cd_S20628C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,741)];
    init_test(&cd_S20628C2, buf);
    S20628C2 *dp, &lv = *(dp=new (buf) S20628C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,2960), "sizeof(S20628C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C2)");
    /*is_ambiguous_... S20628C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(632,444), "S20628C2");
    /*is_ambiguous_... S20628C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C5*), ABISELECT(632,444), "S20628C2");
    /*is_ambiguous_... S20628C2::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(632,444), "S20628C2");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*)(S20628C9*), ABISELECT(632,444), "S20628C2");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(720,508), "S20628C2");
    check_base_class_offset(lv, (S20507C11*)(S20628C9*), ABISELECT(720,508), "S20628C2");
    /*is_ambiguous_... S20628C2::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(880,604), "S20628C2");
    /*is_ambiguous_... S20628C2::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(880,604), "S20628C2");
    check_base_class_offset(lv, (S20628C6*)(S20628C5*), ABISELECT(864,600), "S20628C2");
    /*is_ambiguous_... S20628C2::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(1408,984), "S20628C2");
    /*is_ambiguous_... S20628C5::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C5*), ABISELECT(1408,984), "S20628C2");
    /*is_ambiguous_... S20628C9::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C9*), ABISELECT(1408,984), "S20628C2");
    check_base_class_offset(lv, (S20628C5*), ABISELECT(848,592), "S20628C2");
    /*is_ambiguous_... S20628C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C9*), ABISELECT(2384,1680), "S20628C2");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(1856,1300), "S20628C2");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(1856,1300), "S20628C2");
    check_base_class_offset(lv, (S20628C6*)(S20628C9*), ABISELECT(1840,1296), "S20628C2");
    check_base_class_offset(lv, (S20628C9*), ABISELECT(1840,1296), "S20628C2");
    check_field_offset(lv, s20628c2f0, ABISELECT(16,4), "S20628C2.s20628c2f0");
    check_field_offset(lv, s20628c2f1, ABISELECT(448,316), "S20628C2.s20628c2f1");
    check_field_offset(lv, s20628c2f2, ABISELECT(536,380), "S20628C2.s20628c2f2");
    check_field_offset(lv, s20628c2f3, ABISELECT(544,384), "S20628C2.s20628c2f3");
    check_field_offset(lv, s20628c2f4, ABISELECT(560,392), "S20628C2.s20628c2f4");
    check_field_offset(lv, s20628c2f5, ABISELECT(576,400), "S20628C2.s20628c2f5");
    check_field_offset(lv, s20628c2f6, ABISELECT(608,424), "S20628C2.s20628c2f6");
    check_field_offset(lv, s20628c2f7, ABISELECT(616,432), "S20628C2.s20628c2f7");
    check_field_offset(lv, s20628c2f8, ABISELECT(624,440), "S20628C2.s20628c2f8");
    test_class_info(&lv, &cd_S20628C2);
    dp->~S20628C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C2(Test_S20628C2, "S20628C2", ABISELECT(4208,2960));

#else // __cplusplus

extern void _ZN8S20628C2C1Ev();
extern void _ZN8S20628C2D1Ev();
Name_Map name_map_S20628C2[] = {
  NSPAIR(_ZN8S20628C2C1Ev),
  NSPAIR(_ZN8S20628C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C5;
extern VTBL_ENTRY _ZTI8S20628C5[];
extern  VTBL_ENTRY _ZTV8S20628C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C9;
extern VTBL_ENTRY _ZTI8S20628C9[];
extern  VTBL_ENTRY _ZTV8S20628C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C9[];
static Base_Class bases_S20628C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(632,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
  1, 1},
  {&cd_S20507C11,    ABISELECT(720,508), //bcp->offset
    10, //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_S20507C6,    ABISELECT(880,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
    3, //immediately_derived
  0, 0},
  {&cd_S20628C7,    ABISELECT(880,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
    4, //immediately_derived
  0, 0},
  {&cd_S20628C6,    ABISELECT(864,600), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C5,    ABISELECT(848,592), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2384,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(1840,1296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20628C9,    ABISELECT(1840,1296), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20628C2[];
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn720_N8S20628C2D1Ev,_ZThn508_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn720_N8S20628C2D0Ev,_ZThn508_N8S20628C2D0Ev)() __attribute__((weak));
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn1840_N8S20628C2D1Ev,_ZThn1296_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn1840_N8S20628C2D0Ev,_ZThn1296_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20628C2[] = {
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
  ABISELECT(-720,-508),
  ABISELECT(-720,-508),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(-848,-592),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  0,
  ABISELECT(-232,-156),
  ABISELECT(-864,-600),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  ABISELECT(-1840,-1296),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(-1840,-1296),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20628C2[];
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C2[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C5__8S20628C2[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C2[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C9D1Ev();
extern void _ZN8S20628C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C2[] = {
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D0Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C68S20628C9__A1__8S20628C2[] = {
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C9__8S20628C2[] = {
  ABISELECT(1120,788),
  ABISELECT(1120,788),
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev),
};
static  VTT_ENTRY vtt_S20628C2[] = {
  {&(_ZTV8S20628C2[8]),  8,35},
  {&(_ZTV8S20628C2[13]),  13,35},
  {&(_ZTV8S20628C2[20]),  20,35},
  {&(_ZTV8S20628C2[24]),  24,35},
  {&(_ZTV8S20628C2[32]),  32,35},
  {&(_tg__ZTV8S20628C5__8S20628C2[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C5__8S20628C2[4]),  4,5},
  {&(_tg__ZTV8S20628C6__8S20628C2[3]),  3,4},
  {&(_tg__ZTV8S20628C9__8S20628C2[5]),  5,8},
  {&(_tg__ZTV8S20628C68S20628C9__A1__8S20628C2[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S20628C9__8S20628C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N8S20628C2D0Ev,_ZThn1296_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N8S20628C2D1Ev,_ZThn1296_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S20628C2D0Ev,_ZThn508_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S20628C2D1Ev,_ZThn508_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C2 = {  "S20628C2", // class name
  bases_S20628C2, 13,
  &(vtc_S20628C2[0]), // expected_vtbl_contents
  &(vtt_S20628C2[0]), // expected_vtt_contents
  ABISELECT(4208,2960), // object size
  NSPAIRA(_ZTI8S20628C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20628C2),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20628C2),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20628C11  : S20507C6 , virtual S20628C7 , virtual S20628C6 {
  long double s20628c11f0;
  ~S20628C11(); // tgen
  S20628C11(); // tgen
};
//SIG(-1 S20628C11) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S20628C11()
{
  extern Class_Descriptor cd_S20628C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S20628C11, buf);
    S20628C11 *dp, &lv = *(dp=new (buf) S20628C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S20628C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C11)");
    /*is_ambiguous_... S20628C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S20628C11");
    /*is_ambiguous_... S20628C11::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(112,80), "S20628C11");
    /*is_ambiguous_... S20628C11::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*), ABISELECT(112,80), "S20628C11");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(560,396), "S20628C11");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(560,396), "S20628C11");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(1088,776), "S20628C11");
    check_base_class_offset(lv, (S20628C6*), ABISELECT(544,392), "S20628C11");
    check_field_offset(lv, s20628c11f0, ABISELECT(96,68), "S20628C11.s20628c11f0");
    test_class_info(&lv, &cd_S20628C11);
    dp->~S20628C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C11(Test_S20628C11, "S20628C11", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN9S20628C11C1Ev();
extern void _ZN9S20628C11D1Ev();
Name_Map name_map_S20628C11[] = {
  NSPAIR(_ZN9S20628C11C1Ev),
  NSPAIR(_ZN9S20628C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
static Base_Class bases_S20628C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20628C7,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S20628C7,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S20628C11[];
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY vtc_S20628C11[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern VTBL_ENTRY _ZTV9S20628C11[];
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C11[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTT_ENTRY vtt_S20628C11[] = {
  {&(_ZTV9S20628C11[5]),  5,10},
  {&(_ZTV9S20628C11[9]),  9,10},
  {&(_tg__ZTV8S20628C6__9S20628C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
Class_Descriptor cd_S20628C11 = {  "S20628C11", // class name
  bases_S20628C11, 7,
  &(vtc_S20628C11[0]), // expected_vtbl_contents
  &(vtt_S20628C11[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI9S20628C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20628C11),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20628C11),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  S20628C12  : virtual S20507C11 , virtual S20628C7 , virtual S20628C6 , virtual S20628C11 {
  long double s20628c12f0[9];
  int s20628c12f1;
  ::S20628C2 s20628c12f2;
  int s20628c12f3;
  __tsi64 s20628c12f4;
  ::S20507C11 s20628c12f5;
  __tsi64 s20628c12f6;
  virtual  ~S20628C12(); // _ZN9S20628C12D2Ev
  S20628C12(); // tgen
};
//SIG(-1 S20628C12) C1{ VBC2{ vd m Fp FD[5] Fp FD} VBC3{ BC4{ m Fi[10] Fp[6]} Fi FD Fi FC4 FC4 Fi FD[8]} VBC5{ BC3 VBC4 v1 FD[2] Fi[2] FD[3]} VBC6{ BC4 VBC3 VBC5 FD} vd FD[9] Fi FC7{ VBC4 VBC2 VBC8{ VBC4 VBC5 VBC3 FC9{}} VBC10{ BC4 VBC3 VBC2 BC5 vd FC8 FC5} FC3 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL}


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

static void Test_S20628C12()
{
  extern Class_Descriptor cd_S20628C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(367,1027)];
    init_test(&cd_S20628C12, buf);
    S20628C12 *dp, &lv = *(dp=new (buf) S20628C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5856,4104), "sizeof(S20628C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C12)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(4544,3180), "S20628C12");
    /*is_ambiguous_... S20628C12::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(4672,3264), "S20628C12");
    /*is_ambiguous_... S20628C12::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*), ABISELECT(4672,3264), "S20628C12");
    /*is_ambiguous_... S20628C11::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C11*), ABISELECT(4672,3264), "S20628C12");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(5120,3580), "S20628C12");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(5120,3580), "S20628C12");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(5648,3960), "S20628C12");
    check_base_class_offset(lv, (S20628C6*), ABISELECT(5104,3576), "S20628C12");
    check_base_class_offset(lv, (S20628C6*)(S20628C11*), ABISELECT(5104,3576), "S20628C12");
    /*is_ambiguous_... S20628C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C11*), ABISELECT(5752,4028), "S20628C12");
    check_base_class_offset(lv, (S20628C11*), ABISELECT(5744,4024), "S20628C12");
    check_field_offset(lv, s20628c12f0, ABISELECT(16,4), "S20628C12.s20628c12f0");
    check_field_offset(lv, s20628c12f1, ABISELECT(160,112), "S20628C12.s20628c12f1");
    check_field_offset(lv, s20628c12f2, ABISELECT(176,116), "S20628C12.s20628c12f2");
    check_field_offset(lv, s20628c12f3, ABISELECT(4384,3076), "S20628C12.s20628c12f3");
    check_field_offset(lv, s20628c12f4, ABISELECT(4392,3080), "S20628C12.s20628c12f4");
    check_field_offset(lv, s20628c12f5, ABISELECT(4400,3088), "S20628C12.s20628c12f5");
    check_field_offset(lv, s20628c12f6, ABISELECT(4528,3172), "S20628C12.s20628c12f6");
    test_class_info(&lv, &cd_S20628C12);
    dp->~S20628C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C12(Test_S20628C12, "S20628C12", ABISELECT(5856,4104));

#else // __cplusplus

extern void _ZN9S20628C12C1Ev();
extern void _ZN9S20628C12D2Ev();
Name_Map name_map_S20628C12[] = {
  NSPAIR(_ZN9S20628C12C1Ev),
  NSPAIR(_ZN9S20628C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C11;
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
static Base_Class bases_S20628C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(4544,3180), //bcp->offset
    9, //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_S20507C6,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20628C7,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20628C7,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(5648,3960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(5104,3576), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(5752,4028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C11,    ABISELECT(5744,4024), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20628C12[];
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZThn4544_N9S20628C12D1Ev,_ZThn3180_N9S20628C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
extern void ABISELECT(_ZThn4544_N9S20628C12D0Ev,_ZThn3180_N9S20628C12D0Ev)() __attribute__((weak));
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY vtc_S20628C12[] = {
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
  ABISELECT(-4544,-3180),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
  0,
  ABISELECT(544,384),
  ABISELECT(-5104,-3576),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-5744,-4024),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
extern VTBL_ENTRY _ZTV9S20628C12[];
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C12[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C12[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C11__9S20628C12[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTT_ENTRY vtt_S20628C12[] = {
  {&(_ZTV9S20628C12[7]),  7,24},
  {&(_ZTV9S20628C12[12]),  12,24},
  {&(_ZTV9S20628C12[18]),  18,24},
  {&(_ZTV9S20628C12[24]),  24,24},
  {&(_tg__ZTV8S20628C6__9S20628C12[3]),  3,4},
  {&(_tg__ZTV9S20628C11__9S20628C12[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C11__9S20628C12[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20628C12D0Ev,_ZThn3180_N9S20628C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20628C12D1Ev,_ZThn3180_N9S20628C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C12 = {  "S20628C12", // class name
  bases_S20628C12, 9,
  &(vtc_S20628C12[0]), // expected_vtbl_contents
  &(vtt_S20628C12[0]), // expected_vtt_contents
  ABISELECT(5856,4104), // object size
  NSPAIRA(_ZTI9S20628C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20628C12),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20628C12),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20628C10  : virtual S20507C6 , virtual S20628C11 , S20628C12 {
  void *s20628c10f0;
  ::S20628C9 s20628c10f1;
  virtual  ~S20628C10(); // _ZN9S20628C10D2Ev
  S20628C10(); // tgen
};
//SIG(-1 S20628C10) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 VBC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC5{ BC4 VBC2 v1 FD[2] Fi[2] FD[3]} FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC5 VBC3 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC5 VBC4 FC10{}} VBC11{ BC2 VBC4 VBC7 BC5 vd FC9 FC5} FC4 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} vd Fp FC11}


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

static void Test_S20628C10()
{
  extern Class_Descriptor cd_S20628C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(556,1559)];
    init_test(&cd_S20628C10, buf);
    S20628C10 *dp, &lv = *(dp=new (buf) S20628C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8880,6232), "sizeof(S20628C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C10)");
    /*is_ambiguous_... S20628C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(7568,5308), "S20628C10");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(7568,5308), "S20628C10");
    /*is_ambiguous_... S20628C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C11*), ABISELECT(7672,5376), "S20628C10");
    /*is_ambiguous_... S20628C10::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(7776,5452), "S20628C10");
    /*is_ambiguous_... S20628C11::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C11*), ABISELECT(7776,5452), "S20628C10");
    /*is_ambiguous_... S20628C12::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*), ABISELECT(7776,5452), "S20628C10");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(8224,5768), "S20628C10");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(8224,5768), "S20628C10");
    check_base_class_offset(lv, (S20628C6*)(S20628C11*), ABISELECT(8208,5764), "S20628C10");
    check_base_class_offset(lv, (S20628C6*)(S20628C12*), ABISELECT(8208,5764), "S20628C10");
    check_base_class_offset(lv, (S20628C11*), ABISELECT(7664,5372), "S20628C10");
    check_base_class_offset(lv, (S20628C11*)(S20628C12*), ABISELECT(7664,5372), "S20628C10");
    check_base_class_offset(lv, (S20507C11*)(S20628C12*), ABISELECT(8752,6148), "S20628C10");
    check_base_class_offset(lv, (S20628C12*), 0, "S20628C10");
    check_field_offset(lv, s20628c10f0, ABISELECT(4536,3180), "S20628C10.s20628c10f0");
    check_field_offset(lv, s20628c10f1, ABISELECT(4544,3184), "S20628C10.s20628c10f1");
    test_class_info(&lv, &cd_S20628C10);
    dp->~S20628C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C10(Test_S20628C10, "S20628C10", ABISELECT(8880,6232));

#else // __cplusplus

extern void _ZN9S20628C10C1Ev();
extern void _ZN9S20628C10D2Ev();
Name_Map name_map_S20628C10[] = {
  NSPAIR(_ZN9S20628C10C1Ev),
  NSPAIR(_ZN9S20628C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C11;
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
static Base_Class bases_S20628C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(7568,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(7672,5376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(8208,5764), //bcp->offset
    14, //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
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20628C11,    ABISELECT(7664,5372), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C11,    ABISELECT(8752,6148), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20628C12,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20628C10[];
extern void _ZN9S20628C10D1Ev();
extern void _ZN9S20628C10D0Ev();
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev)();
extern void ABISELECT(_ZThn8752_N9S20628C10D1Ev,_ZThn6148_N9S20628C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev)();
extern void ABISELECT(_ZThn8752_N9S20628C10D0Ev,_ZThn6148_N9S20628C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20628C10[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&_ZN9S20628C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C10D0Ev,
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S20628C10[];
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C12__9S20628C10[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZThn8752_N9S20628C12D1Ev,_ZThn6148_N9S20628C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
extern void ABISELECT(_ZThn8752_N9S20628C12D0Ev,_ZThn6148_N9S20628C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C12__9S20628C10[] = {
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C12__9S20628C10[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C12__9S20628C10[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C10[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C11__9S20628C10[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C10[] = {
  ABISELECT(-640,-456),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTT_ENTRY vtt_S20628C10[] = {
  {&(_ZTV9S20628C10[7]),  7,24},
  {&(_tg__ZTV9S20628C12__9S20628C10[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C12__9S20628C10[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C12__9S20628C10[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C12__9S20628C10[5]),  5,5},
  {&(_ZTV9S20628C10[14]),  14,24},
  {&(_ZTV9S20628C10[18]),  18,24},
  {&(_ZTV9S20628C10[22]),  22,24},
  {&(_tg__ZTV9S20628C11__9S20628C10[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C11__9S20628C10[4]),  4,5},
  {&(_tg__ZTV8S20628C6__9S20628C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20628C10[];
extern  VTBL_ENTRY _ZTV9S20628C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C10[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S20628C12D0Ev,_ZThn6148_N9S20628C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S20628C12D1Ev,_ZThn6148_N9S20628C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S20628C10D0Ev,_ZThn6148_N9S20628C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S20628C10D1Ev,_ZThn6148_N9S20628C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C10 = {  "S20628C10", // class name
  bases_S20628C10, 10,
  &(vtc_S20628C10[0]), // expected_vtbl_contents
  &(vtt_S20628C10[0]), // expected_vtt_contents
  ABISELECT(8880,6232), // object size
  NSPAIRA(_ZTI9S20628C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20628C10),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20628C10),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20628C15  : virtual S20507C6 , virtual S20628C7 , virtual S20628C5 , virtual S20628C9 , S20628C2 {
  ::S20507C11 s20628c15f0;
  long double s20628c15f1;
  virtual  ~S20628C15(); // _ZN9S20628C15D2Ev
  S20628C15(); // tgen
};
//SIG(-1 S20628C15) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ VBC2 VBC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} VBC3 FC6{}} VBC7{ BC2 VBC3 VBC8{ vd m Fp FD[5] Fp FD} BC5 vd FC4 FC5} BC9{ VBC2 VBC8 VBC4 VBC7 FC3 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC8 FD}


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

static void Test_S20628C15()
{
  extern Class_Descriptor cd_S20628C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(274,765)];
    init_test(&cd_S20628C15, buf);
    S20628C15 *dp, &lv = *(dp=new (buf) S20628C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4368,3056), "sizeof(S20628C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C15)");
    /*is_ambiguous_... S20628C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(784,540), "S20628C15");
    /*is_ambiguous_... S20628C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C5*), ABISELECT(784,540), "S20628C15");
    /*is_ambiguous_... S20628C15::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(784,540), "S20628C15");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*)(S20628C9*), ABISELECT(784,540), "S20628C15");
    /*is_ambiguous_... S20628C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*), ABISELECT(784,540), "S20628C15");
    /*is_ambiguous_... S20628C15::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(880,604), "S20628C15");
    /*is_ambiguous_... S20628C15::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*), ABISELECT(880,604), "S20628C15");
    /*is_ambiguous_... S20628C5::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C5*), ABISELECT(880,604), "S20628C15");
    /*is_ambiguous_... S20628C9::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C9*), ABISELECT(880,604), "S20628C15");
    /*is_ambiguous_... S20628C15::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(1344,928), "S20628C15");
    /*is_ambiguous_... S20628C15::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(1344,928), "S20628C15");
    check_base_class_offset(lv, (S20628C6*)(S20628C5*), ABISELECT(1328,924), "S20628C15");
    check_base_class_offset(lv, (S20628C5*), ABISELECT(1312,916), "S20628C15");
    check_base_class_offset(lv, (S20628C5*)(S20628C2*), ABISELECT(1312,916), "S20628C15");
    /*is_ambiguous_... S20628C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C9*), ABISELECT(2416,1692), "S20628C15");
    check_base_class_offset(lv, (S20507C11*)(S20628C9*), ABISELECT(4240,2972), "S20628C15");
    check_base_class_offset(lv, (S20507C11*)(S20628C2*), ABISELECT(4240,2972), "S20628C15");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(1888,1312), "S20628C15");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(1888,1312), "S20628C15");
    check_base_class_offset(lv, (S20628C6*)(S20628C9*), ABISELECT(1872,1308), "S20628C15");
    check_base_class_offset(lv, (S20628C9*), ABISELECT(1872,1308), "S20628C15");
    check_base_class_offset(lv, (S20628C9*)(S20628C2*), ABISELECT(1872,1308), "S20628C15");
    check_base_class_offset(lv, (S20628C2*), 0, "S20628C15");
    check_field_offset(lv, s20628c15f0, ABISELECT(640,444), "S20628C15.s20628c15f0");
    check_field_offset(lv, s20628c15f1, ABISELECT(768,528), "S20628C15.s20628c15f1");
    test_class_info(&lv, &cd_S20628C15);
    dp->~S20628C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C15(Test_S20628C15, "S20628C15", ABISELECT(4368,3056));

#else // __cplusplus

extern void _ZN9S20628C15C1Ev();
extern void _ZN9S20628C15D2Ev();
Name_Map name_map_S20628C15[] = {
  NSPAIR(_ZN9S20628C15C1Ev),
  NSPAIR(_ZN9S20628C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C5;
extern VTBL_ENTRY _ZTI8S20628C5[];
extern  VTBL_ENTRY _ZTV8S20628C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C9;
extern VTBL_ENTRY _ZTI8S20628C9[];
extern  VTBL_ENTRY _ZTV8S20628C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C9[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
static Base_Class bases_S20628C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(784,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(880,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
    2, //immediately_derived
  0, 0},
  {&cd_S20628C7,    ABISELECT(880,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(1328,924), //bcp->offset
    15, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20628C5,    ABISELECT(1312,916), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2416,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4240,2972), //bcp->offset
    30, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(1872,1308), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20628C9,    ABISELECT(1872,1308), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20628C2,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20628C15[];
extern void _ZN9S20628C15D1Ev();
extern void _ZN9S20628C15D0Ev();
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev)();
extern void ABISELECT(_ZThn1872_N9S20628C15D1Ev,_ZThn1308_N9S20628C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev)();
extern void ABISELECT(_ZThn1872_N9S20628C15D0Ev,_ZThn1308_N9S20628C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev)();
extern void ABISELECT(_ZThn4240_N9S20628C15D1Ev,_ZThn2972_N9S20628C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev)();
extern void ABISELECT(_ZThn4240_N9S20628C15D0Ev,_ZThn2972_N9S20628C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20628C15[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN9S20628C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C15D0Ev,
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev),
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20628C15[];
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C2__9S20628C15[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn4240_N8S20628C2D1Ev,_ZThn2972_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn4240_N8S20628C2D0Ev,_ZThn2972_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C2__9S20628C15[] = {
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C2__9S20628C15[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C2__9S20628C15[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn1872_N8S20628C2D1Ev,_ZThn1308_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn1872_N8S20628C2D0Ev,_ZThn1308_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C2__9S20628C15[] = {
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C15[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C5__9S20628C15[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C15[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C9D1Ev();
extern void _ZN8S20628C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C15[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D0Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C68S20628C9__A1__9S20628C15[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev)();
extern void ABISELECT(_ZThn2368_N8S20628C9D1Ev,_ZThn1664_N8S20628C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev)();
extern void ABISELECT(_ZThn2368_N8S20628C9D0Ev,_ZThn1664_N8S20628C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C9__9S20628C15[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev),
};
static  VTT_ENTRY vtt_S20628C15[] = {
  {&(_ZTV9S20628C15[8]),  8,35},
  {&(_tg__ZTV8S20628C2__9S20628C15[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C2__9S20628C15[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C2__9S20628C15[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C2__9S20628C15[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C2__9S20628C15[7]),  7,10},
  {&(_ZTV9S20628C15[15]),  15,35},
  {&(_ZTV9S20628C15[19]),  19,35},
  {&(_ZTV9S20628C15[27]),  27,35},
  {&(_ZTV9S20628C15[33]),  33,35},
  {&(_tg__ZTV8S20628C5__9S20628C15[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C5__9S20628C15[4]),  4,5},
  {&(_tg__ZTV8S20628C6__9S20628C15[3]),  3,4},
  {&(_tg__ZTV8S20628C9__9S20628C15[5]),  5,8},
  {&(_tg__ZTV8S20628C68S20628C9__A1__9S20628C15[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S20628C9__9S20628C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20628C15[];
extern  VTBL_ENTRY _ZTV9S20628C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C15[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S20628C9D0Ev,_ZThn1664_N8S20628C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S20628C9D1Ev,_ZThn1664_N8S20628C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S20628C2D0Ev,_ZThn1308_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S20628C2D1Ev,_ZThn1308_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S20628C2D0Ev,_ZThn2972_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S20628C2D1Ev,_ZThn2972_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S20628C15D0Ev,_ZThn2972_N9S20628C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S20628C15D1Ev,_ZThn2972_N9S20628C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S20628C15D0Ev,_ZThn1308_N9S20628C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S20628C15D1Ev,_ZThn1308_N9S20628C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C15 = {  "S20628C15", // class name
  bases_S20628C15, 14,
  &(vtc_S20628C15[0]), // expected_vtbl_contents
  &(vtt_S20628C15[0]), // expected_vtt_contents
  ABISELECT(4368,3056), // object size
  NSPAIRA(_ZTI9S20628C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20628C15),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20628C15),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20628C16  {
  int s20628c16f0;
  ::S20628C5 s20628c16f1;
  int s20628c16f2;
  void *s20628c16f3;
  ::S20628C12 s20628c16f4;
  int s20628c16f5;
  __tsi64 s20628c16f6;
  long double s20628c16f7;
  virtual void  v3(); // _ZN9S20628C162v3Ev
  virtual void  v4(); // _ZN9S20628C162v4Ev
  virtual void  v5(); // _ZN9S20628C162v5Ev
  ~S20628C16(); // tgen
  S20628C16(); // tgen
};
//SIG(-1 S20628C16) C1{ v1 v2 v3 Fi FC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ BC5{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v4 FD[2] Fi[2] FD[3]} VBC5 FC6{}} Fi Fp FC7{ VBC8{ vd m Fp FD[5] Fp FD} VBC5 VBC4 VBC9{ BC3 VBC5 VBC4 FD} vd FD[9] Fi FC10{ VBC3 VBC8 VBC2 VBC11{ BC3 VBC5 VBC8 BC4 vd FC2 FC4} FC5 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC8 FL} Fi FL FD}


void  S20628C16 ::v3(){vfunc_called(this, "_ZN9S20628C162v3Ev");}
void  S20628C16 ::v4(){vfunc_called(this, "_ZN9S20628C162v4Ev");}
void  S20628C16 ::v5(){vfunc_called(this, "_ZN9S20628C162v5Ev");}
S20628C16 ::~S20628C16(){ note_dtor("S20628C16", this);} // tgen
S20628C16 ::S20628C16(){ note_ctor("S20628C16", this);} // tgen

static void Test_S20628C16()
{
  extern Class_Descriptor cd_S20628C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(439,1229)];
    init_test(&cd_S20628C16, buf);
    S20628C16 *dp, &lv = *(dp=new (buf) S20628C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7008,4912), "sizeof(S20628C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C16)");
    check_field_offset(lv, s20628c16f0, ABISELECT(8,4), "S20628C16.s20628c16f0");
    check_field_offset(lv, s20628c16f1, ABISELECT(16,8), "S20628C16.s20628c16f1");
    check_field_offset(lv, s20628c16f2, ABISELECT(1104,776), "S20628C16.s20628c16f2");
    check_field_offset(lv, s20628c16f3, ABISELECT(1112,780), "S20628C16.s20628c16f3");
    check_field_offset(lv, s20628c16f4, ABISELECT(1120,784), "S20628C16.s20628c16f4");
    check_field_offset(lv, s20628c16f5, ABISELECT(6976,4888), "S20628C16.s20628c16f5");
    check_field_offset(lv, s20628c16f6, ABISELECT(6984,4892), "S20628C16.s20628c16f6");
    check_field_offset(lv, s20628c16f7, ABISELECT(6992,4900), "S20628C16.s20628c16f7");
    test_class_info(&lv, &cd_S20628C16);
    dp->~S20628C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C16(Test_S20628C16, "S20628C16", ABISELECT(7008,4912));

#else // __cplusplus

extern void _ZN9S20628C16C1Ev();
extern void _ZN9S20628C16D1Ev();
Name_Map name_map_S20628C16[] = {
  NSPAIR(_ZN9S20628C16C1Ev),
  NSPAIR(_ZN9S20628C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20628C16[];
extern void _ZN9S20628C162v3Ev();
extern void _ZN9S20628C162v4Ev();
extern void _ZN9S20628C162v5Ev();
static  VTBL_ENTRY vtc_S20628C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C16[0]),
  (VTBL_ENTRY)&_ZN9S20628C162v3Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v4Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v5Ev,
};
extern VTBL_ENTRY _ZTI9S20628C16[];
extern  VTBL_ENTRY _ZTV9S20628C16[];
Class_Descriptor cd_S20628C16 = {  "S20628C16", // class name
  0,0,//no base classes
  &(vtc_S20628C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7008,4912), // object size
  NSPAIRA(_ZTI9S20628C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20628C16),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  S20628C14  : S20507C11 , S20628C15 , virtual S20628C2 , virtual S20628C16 {
  void *s20628c14f0[5];
  long double s20628c14f1[5];
  int s20628c14f2;
  long double s20628c14f3;
  virtual void  v6(); // _ZN9S20628C142v6Ev
  virtual void  v7(); // _ZN9S20628C142v7Ev
  ~S20628C14(); // tgen
  S20628C14(); // tgen
};
//SIG(-1 S20628C14) C1{ BC2{ vd m Fp FD[5] Fp FD} BC3{ VBC4{ m Fi[10] Fp[6]} VBC5{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC6{ VBC4 VBC7{ BC5 VBC4 v3 FD[2] Fi[2] FD[3]} VBC5 FC8{}} VBC9{ BC4 VBC5 VBC2 BC7 vd FC6 FC7} BC10{ VBC4 VBC2 VBC6 VBC9 FC5 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC2 FD} VBC10 VBC11{ v4 v5 v6 Fi FC6 Fi Fp FC12{ VBC2 VBC5 VBC7 VBC13{ BC4 VBC5 VBC7 FD} vd FD[9] Fi FC10 Fi FL FC2 FL} Fi FL FD} v1 v2 Fp[5] FD[5] Fi FD}


void  S20628C14 ::v6(){vfunc_called(this, "_ZN9S20628C142v6Ev");}
void  S20628C14 ::v7(){vfunc_called(this, "_ZN9S20628C142v7Ev");}
S20628C14 ::~S20628C14(){ note_dtor("S20628C14", this);} // tgen
S20628C14 ::S20628C14(){ note_ctor("S20628C14", this);} // tgen

static void Test_S20628C14()
{
  extern Class_Descriptor cd_S20628C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(770,2149)];
    init_test(&cd_S20628C14, buf);
    S20628C14 *dp, &lv = *(dp=new (buf) S20628C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12304,8592), "sizeof(S20628C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C14)");
    /*is_ambiguous_... S20628C14::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*), 0, "S20628C14");
    /*is_ambiguous_... S20628C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C15*), ABISELECT(1072,720), "S20628C14");
    /*is_ambiguous_... S20628C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C5*), ABISELECT(1072,720), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(1072,720), "S20628C14");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*)(S20628C9*), ABISELECT(1072,720), "S20628C14");
    /*is_ambiguous_... S20628C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*)(S20628C15*), ABISELECT(1072,720), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*), ABISELECT(1072,720), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(1168,784), "S20628C14");
    /*is_ambiguous_... S20628C15::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C15*), ABISELECT(1168,784), "S20628C14");
    /*is_ambiguous_... S20628C5::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C5*), ABISELECT(1168,784), "S20628C14");
    /*is_ambiguous_... S20628C9::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C9*), ABISELECT(1168,784), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(1632,1108), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(1632,1108), "S20628C14");
    check_base_class_offset(lv, (S20628C6*)(S20628C5*), ABISELECT(1616,1104), "S20628C14");
    check_base_class_offset(lv, (S20628C5*)(S20628C15*), ABISELECT(1600,1096), "S20628C14");
    check_base_class_offset(lv, (S20628C5*)(S20628C2*)(S20628C15*), ABISELECT(1600,1096), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C5*)(S20628C2*), ABISELECT(1600,1096), "S20628C14");
    /*is_ambiguous_... S20628C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C9*), ABISELECT(2704,1872), "S20628C14");
    check_base_class_offset(lv, (S20507C11*)(S20628C9*), ABISELECT(4528,3152), "S20628C14");
    check_base_class_offset(lv, (S20507C11*)(S20628C2*)(S20628C15*), ABISELECT(4528,3152), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C2 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C2*), ABISELECT(4528,3152), "S20628C14");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(2176,1492), "S20628C14");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(2176,1492), "S20628C14");
    check_base_class_offset(lv, (S20628C6*)(S20628C9*), ABISELECT(2160,1488), "S20628C14");
    check_base_class_offset(lv, (S20628C9*)(S20628C15*), ABISELECT(2160,1488), "S20628C14");
    check_base_class_offset(lv, (S20628C9*)(S20628C2*)(S20628C15*), ABISELECT(2160,1488), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C9*)(S20628C2*), ABISELECT(2160,1488), "S20628C14");
    check_base_class_offset(lv, (S20628C2*)(S20628C15*), ABISELECT(128,84), "S20628C14");
    check_base_class_offset(lv, (S20628C15*), ABISELECT(128,84), "S20628C14");
    /*is_ambiguous_... S20628C14::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C2*), ABISELECT(4656,3236), "S20628C14");
    check_base_class_offset(lv, (S20628C16*), ABISELECT(5296,3680), "S20628C14");
    check_field_offset(lv, s20628c14f0, ABISELECT(912,624), "S20628C14.s20628c14f0");
    check_field_offset(lv, s20628c14f1, ABISELECT(960,644), "S20628C14.s20628c14f1");
    check_field_offset(lv, s20628c14f2, ABISELECT(1040,704), "S20628C14.s20628c14f2");
    check_field_offset(lv, s20628c14f3, ABISELECT(1056,708), "S20628C14.s20628c14f3");
    test_class_info(&lv, &cd_S20628C14);
    dp->~S20628C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C14(Test_S20628C14, "S20628C14", ABISELECT(12304,8592));

#else // __cplusplus

extern void _ZN9S20628C14C1Ev();
extern void _ZN9S20628C14D1Ev();
Name_Map name_map_S20628C14[] = {
  NSPAIR(_ZN9S20628C14C1Ev),
  NSPAIR(_ZN9S20628C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C5;
extern VTBL_ENTRY _ZTI8S20628C5[];
extern  VTBL_ENTRY _ZTV8S20628C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C9;
extern VTBL_ENTRY _ZTI8S20628C9[];
extern  VTBL_ENTRY _ZTV8S20628C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C9[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
extern Class_Descriptor cd_S20628C15;
extern VTBL_ENTRY _ZTI9S20628C15[];
extern  VTBL_ENTRY _ZTV9S20628C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C15[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
extern Class_Descriptor cd_S20628C16;
extern VTBL_ENTRY _ZTI9S20628C16[];
extern  VTBL_ENTRY _ZTV9S20628C16[];
static Base_Class bases_S20628C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C6,    ABISELECT(1072,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1168,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
    3, //immediately_derived
  0, 0},
  {&cd_S20628C7,    ABISELECT(1168,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
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(1616,1104), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20628C5,    ABISELECT(1600,1096), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2704,1872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4528,3152), //bcp->offset
    44, //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
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(2160,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20628C9,    ABISELECT(2160,1488), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20628C2,    ABISELECT(128,84), //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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20628C15,    ABISELECT(128,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20628C2,    ABISELECT(4656,3236), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20628C16,    ABISELECT(5296,3680), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20628C14[];
extern void _ZN9S20628C14D1Ev();
extern void _ZN9S20628C14D0Ev();
extern void _ZN9S20628C142v6Ev();
extern void _ZN9S20628C142v7Ev();
extern void ABISELECT(_ZThn128_N9S20628C14D1Ev,_ZThn84_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20628C14D0Ev,_ZThn84_N9S20628C14D0Ev)();
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C14D1Ev,_ZTv0_n28_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn2160_N9S20628C14D1Ev,_ZThn1488_N9S20628C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C14D0Ev,_ZTv0_n28_N9S20628C14D0Ev)();
extern void ABISELECT(_ZThn2160_N9S20628C14D0Ev,_ZThn1488_N9S20628C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C14D1Ev,_ZTv0_n12_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn4528_N9S20628C14D1Ev,_ZThn3152_N9S20628C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C14D0Ev,_ZTv0_n12_N9S20628C14D0Ev)();
extern void ABISELECT(_ZThn4528_N9S20628C14D0Ev,_ZThn3152_N9S20628C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20628C14D1Ev,_ZTv0_n36_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn4656_N9S20628C14D1Ev,_ZThn3236_N9S20628C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20628C14D0Ev,_ZTv0_n36_N9S20628C14D0Ev)();
extern void ABISELECT(_ZThn4656_N9S20628C14D0Ev,_ZThn3236_N9S20628C14D0Ev)() __attribute__((weak));
extern void _ZN9S20628C162v3Ev();
extern void _ZN9S20628C162v4Ev();
extern void _ZN9S20628C162v5Ev();
static  VTBL_ENTRY vtc_S20628C14[] = {
  ABISELECT(5296,3680),
  ABISELECT(4656,3236),
  ABISELECT(4528,3152),
  ABISELECT(2160,1488),
  ABISELECT(1616,1104),
  ABISELECT(1600,1096),
  ABISELECT(1168,784),
  ABISELECT(1072,720),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN9S20628C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v6Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v7Ev,
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C14D1Ev,_ZThn84_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C14D0Ev,_ZThn84_N9S20628C14D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1600,-1096),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1616,-1104),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  ABISELECT(-2160,-1488),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2160,-1488),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C14D1Ev,_ZTv0_n28_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C14D0Ev,_ZTv0_n28_N9S20628C14D0Ev),
  ABISELECT(-4528,-3152),
  ABISELECT(-4528,-3152),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C14D1Ev,_ZTv0_n12_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C14D0Ev,_ZTv0_n12_N9S20628C14D0Ev),
  ABISELECT(-4656,-3236),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  ABISELECT(-4656,-3236),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C14D1Ev,_ZTv0_n36_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C14D0Ev,_ZTv0_n36_N9S20628C14D0Ev),
  0,
  0,
  0,
  ABISELECT(-5296,-3680),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN9S20628C162v3Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v4Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v5Ev,
};
extern VTBL_ENTRY _ZTV9S20628C14[];
extern void _ZN9S20628C15D1Ev();
extern void _ZN9S20628C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C15__9S20628C14[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN9S20628C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C15D0Ev,
};
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C29S20628C15__9S20628C14[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn4400_N8S20628C2D1Ev,_ZThn3068_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn4400_N8S20628C2D0Ev,_ZThn3068_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C29S20628C15__9S20628C14[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C29S20628C15__9S20628C14[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C29S20628C15__9S20628C14[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn2032_N8S20628C2D1Ev,_ZThn1404_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn2032_N8S20628C2D0Ev,_ZThn1404_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C29S20628C15__9S20628C14[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C15__9S20628C14[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C15__9S20628C14[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev)();
extern void ABISELECT(_ZThn2032_N9S20628C15D1Ev,_ZThn1404_N9S20628C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev)();
extern void ABISELECT(_ZThn2032_N9S20628C15D0Ev,_ZThn1404_N9S20628C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C15__9S20628C14[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev)();
extern void ABISELECT(_ZThn4400_N9S20628C15D1Ev,_ZThn3068_N9S20628C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev)();
extern void ABISELECT(_ZThn4400_N9S20628C15D0Ev,_ZThn3068_N9S20628C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C15__9S20628C14[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C14[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C5__9S20628C14[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C14[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C9D1Ev();
extern void _ZN8S20628C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C14[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D0Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C68S20628C9__A1__9S20628C14[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev)();
extern void ABISELECT(_ZThn2368_N8S20628C9D1Ev,_ZThn1664_N8S20628C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev)();
extern void ABISELECT(_ZThn2368_N8S20628C9D0Ev,_ZThn1664_N8S20628C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C9__9S20628C14[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev),
};
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C2__A1__9S20628C14[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C2__A1__9S20628C14[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C2__A1__9S20628C14[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C2__A1__9S20628C14[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C2__A1__9S20628C14[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTT_ENTRY vtt_S20628C14[] = {
  {&(_ZTV9S20628C14[10]),  10,68},
  {&(_tg__ZTV9S20628C15__9S20628C14[8]),  8,10},
  {&(_tg__ZTV8S20628C29S20628C15__9S20628C14[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C29S20628C15__9S20628C14[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C29S20628C15__9S20628C14[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C29S20628C15__9S20628C14[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C29S20628C15__9S20628C14[7]),  7,10},
  {&(_tg__ZTV8S20628C5__9S20628C15__9S20628C14[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C15__9S20628C14[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C15__9S20628C14[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20628C15__9S20628C14[3]),  3,5},
  {&(_ZTV9S20628C14[22]),  22,68},
  {&(_ZTV9S20628C14[29]),  29,68},
  {&(_ZTV9S20628C14[33]),  33,68},
  {&(_ZTV9S20628C14[41]),  41,68},
  {&(_ZTV9S20628C14[47]),  47,68},
  {&(_ZTV9S20628C14[58]),  58,68},
  {&(_ZTV9S20628C14[65]),  65,68},
  {&(_tg__ZTV8S20628C5__9S20628C14[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C5__9S20628C14[4]),  4,5},
  {&(_tg__ZTV8S20628C6__9S20628C14[3]),  3,4},
  {&(_tg__ZTV8S20628C9__9S20628C14[5]),  5,8},
  {&(_tg__ZTV8S20628C68S20628C9__A1__9S20628C14[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S20628C9__9S20628C14[3]),  3,5},
  {&(_tg__ZTV8S20628C2__A1__9S20628C14[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C2__A1__9S20628C14[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C2__A1__9S20628C14[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C2__A1__9S20628C14[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C2__A1__9S20628C14[7]),  7,10},
};
extern VTBL_ENTRY _ZTI9S20628C14[];
extern  VTBL_ENTRY _ZTV9S20628C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C14[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S20628C9D0Ev,_ZThn1664_N8S20628C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S20628C9D1Ev,_ZThn1664_N8S20628C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S20628C15D0Ev,_ZThn3068_N9S20628C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S20628C15D1Ev,_ZThn3068_N9S20628C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S20628C15D0Ev,_ZThn1404_N9S20628C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S20628C15D1Ev,_ZThn1404_N9S20628C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S20628C2D0Ev,_ZThn1404_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S20628C2D1Ev,_ZThn1404_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S20628C2D0Ev,_ZThn3068_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S20628C2D1Ev,_ZThn3068_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20628C14D0Ev,_ZTv0_n36_N9S20628C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N9S20628C14D0Ev,_ZThn3236_N9S20628C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20628C14D1Ev,_ZTv0_n36_N9S20628C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N9S20628C14D1Ev,_ZThn3236_N9S20628C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C14D0Ev,_ZTv0_n12_N9S20628C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N9S20628C14D0Ev,_ZThn3152_N9S20628C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C14D1Ev,_ZTv0_n12_N9S20628C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N9S20628C14D1Ev,_ZThn3152_N9S20628C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C14D0Ev,_ZTv0_n28_N9S20628C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N9S20628C14D0Ev,_ZThn1488_N9S20628C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C14D1Ev,_ZTv0_n28_N9S20628C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N9S20628C14D1Ev,_ZThn1488_N9S20628C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C14 = {  "S20628C14", // class name
  bases_S20628C14, 18,
  &(vtc_S20628C14[0]), // expected_vtbl_contents
  &(vtt_S20628C14[0]), // expected_vtt_contents
  ABISELECT(12304,8592), // object size
  NSPAIRA(_ZTI9S20628C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20628C14),68, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20628C14),29, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20628C17  : virtual S20507C6 , virtual S20628C6 , S20628C11 , S20628C12 , virtual S20628C9 {
  int s20628c17f0;
  void *s20628c17f1;
  int s20628c17f2:9;
  char s20628c17f3;
  long double s20628c17f4;
  ::S20628C6 s20628c17f5;
  ::S20628C15 s20628c17f6;
  char s20628c17f7;
  short s20628c17f8[7];
  ::S468C20_nt s20628c17f9;
  int s20628c17f10;
  char s20628c17f11;
  long s20628c17f12;
  virtual  ~S20628C17(); // _ZN9S20628C17D2Ev
  S20628C17(); // tgen
};
//SIG(-1 S20628C17) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} BC5{ BC2 VBC4 VBC3 FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC3 VBC5 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC3 VBC4 FC10{}} VBC11{ BC2 VBC4 VBC7 BC3 vd FC9 FC3} FC4 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} VBC11 vd Fi Fp Fi:9 Fc FD FC3 FC12{ VBC2 VBC4 VBC9 VBC11 BC8 vd FC7 FD} Fc Fs[7] FC10 Fi Fc Fl}


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

static void Test_S20628C17()
{
  extern Class_Descriptor cd_S20628C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(839,2353)];
    init_test(&cd_S20628C17, buf);
    S20628C17 *dp, &lv = *(dp=new (buf) S20628C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13408,9408), "sizeof(S20628C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C17)");
    /*is_ambiguous_... S20628C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(9736,6820), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(9736,6820), "S20628C17");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*)(S20628C9*), ABISELECT(9736,6820), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(9840,6888), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(9840,6888), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C6*), ABISELECT(9824,6884), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C11*), ABISELECT(9824,6884), "S20628C17");
    check_base_class_offset(lv, (S20628C6*)(S20628C12*), ABISELECT(9824,6884), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C11*), ABISELECT(9824,6884), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C11*), ABISELECT(8,4), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(10368,7268), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C11*), ABISELECT(10368,7268), "S20628C17");
    /*is_ambiguous_... S20628C12::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*), ABISELECT(10368,7268), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C11*), ABISELECT(10368,7268), "S20628C17");
    /*is_ambiguous_... S20628C9::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C9*), ABISELECT(10368,7268), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C11*), 0, "S20628C17");
    check_base_class_offset(lv, (S20507C11*)(S20628C12*), ABISELECT(10800,7580), "S20628C17");
    check_base_class_offset(lv, (S20507C11*)(S20628C9*), ABISELECT(10800,7580), "S20628C17");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C11*), ABISELECT(10936,7668), "S20628C17");
    check_base_class_offset(lv, (S20628C11*)(S20628C12*), ABISELECT(10928,7664), "S20628C17");
    check_base_class_offset(lv, (S20628C12*), ABISELECT(112,80), "S20628C17");
    /*is_ambiguous_... S20628C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C9*), ABISELECT(11584,8128), "S20628C17");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(11056,7748), "S20628C17");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(11056,7748), "S20628C17");
    check_base_class_offset(lv, (S20628C6*)(S20628C9*), ABISELECT(11040,7744), "S20628C17");
    check_base_class_offset(lv, (S20628C9*), ABISELECT(11040,7744), "S20628C17");
    check_field_offset(lv, s20628c17f0, ABISELECT(4648,3260), "S20628C17.s20628c17f0");
    check_field_offset(lv, s20628c17f1, ABISELECT(4656,3264), "S20628C17.s20628c17f1");
    set_bf_and_test(lv, s20628c17f2, ABISELECT(4664,3268), 0, 9, 1, "S20628C17");
    set_bf_and_test(lv, s20628c17f2, ABISELECT(4664,3268), 0, 9, hide_sll(1LL<<8), "S20628C17");
    check_field_offset(lv, s20628c17f3, ABISELECT(4666,3270), "S20628C17.s20628c17f3");
    check_field_offset(lv, s20628c17f4, ABISELECT(4672,3272), "S20628C17.s20628c17f4");
    check_field_offset(lv, s20628c17f5, ABISELECT(4688,3284), "S20628C17.s20628c17f5");
    check_field_offset(lv, s20628c17f6, ABISELECT(5328,3732), "S20628C17.s20628c17f6");
    check_field_offset(lv, s20628c17f7, ABISELECT(9696,6788), "S20628C17.s20628c17f7");
    check_field_offset(lv, s20628c17f8, ABISELECT(9698,6790), "S20628C17.s20628c17f8");
    check_field_offset(lv, s20628c17f9, ABISELECT(9712,6804), "S20628C17.s20628c17f9");
    check_field_offset(lv, s20628c17f10, ABISELECT(9716,6808), "S20628C17.s20628c17f10");
    check_field_offset(lv, s20628c17f11, ABISELECT(9720,6812), "S20628C17.s20628c17f11");
    check_field_offset(lv, s20628c17f12, ABISELECT(9728,6816), "S20628C17.s20628c17f12");
    test_class_info(&lv, &cd_S20628C17);
    dp->~S20628C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C17(Test_S20628C17, "S20628C17", ABISELECT(13408,9408));

#else // __cplusplus

extern void _ZN9S20628C17C1Ev();
extern void _ZN9S20628C17D2Ev();
Name_Map name_map_S20628C17[] = {
  NSPAIR(_ZN9S20628C17C1Ev),
  NSPAIR(_ZN9S20628C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C11;
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C11;
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C9;
extern VTBL_ENTRY _ZTI8S20628C9[];
extern  VTBL_ENTRY _ZTV8S20628C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C9[];
static Base_Class bases_S20628C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(9736,6820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(9840,6888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20628C7,    ABISELECT(9840,6888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(9824,6884), //bcp->offset
    19, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(10368,7268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(10368,7268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C11,    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_S20507C11,    ABISELECT(10800,7580), //bcp->offset
    24, //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
    11, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(10936,7668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C11,    ABISELECT(10928,7664), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20628C12,    ABISELECT(112,80), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(11584,8128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(11056,7748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(11056,7748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(11040,7744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20628C9,    ABISELECT(11040,7744), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //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 _ZTI9S20628C17[];
extern void _ZN9S20628C17D1Ev();
extern void _ZN9S20628C17D0Ev();
extern void ABISELECT(_ZThn112_N9S20628C17D1Ev,_ZThn80_N9S20628C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S20628C17D0Ev,_ZThn80_N9S20628C17D0Ev)();
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n24_N9S20628C17D1Ev,_ZTv0_n12_N9S20628C17D1Ev)();
extern void ABISELECT(_ZThn10800_N9S20628C17D1Ev,_ZThn7580_N9S20628C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C17D0Ev,_ZTv0_n12_N9S20628C17D0Ev)();
extern void ABISELECT(_ZThn10800_N9S20628C17D0Ev,_ZThn7580_N9S20628C17D0Ev)() __attribute__((weak));
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C17D1Ev,_ZTv0_n28_N9S20628C17D1Ev)();
extern void ABISELECT(_ZThn11040_N9S20628C17D1Ev,_ZThn7744_N9S20628C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C17D0Ev,_ZTv0_n28_N9S20628C17D0Ev)();
extern void ABISELECT(_ZThn11040_N9S20628C17D0Ev,_ZThn7744_N9S20628C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20628C17[] = {
  ABISELECT(11040,7744),
  ABISELECT(10928,7664),
  ABISELECT(10800,7580),
  ABISELECT(9736,6820),
  ABISELECT(9824,6884),
  ABISELECT(10368,7268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN9S20628C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C17D0Ev,
  ABISELECT(10816,7584),
  ABISELECT(9624,6740),
  ABISELECT(9712,6804),
  ABISELECT(10256,7188),
  ABISELECT(10688,7500),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20628C17D1Ev,_ZThn80_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20628C17D0Ev,_ZThn80_N9S20628C17D0Ev),
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9824,-6884),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  ABISELECT(-10800,-7580),
  ABISELECT(-10800,-7580),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C17D1Ev,_ZTv0_n12_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C17D0Ev,_ZTv0_n12_N9S20628C17D0Ev),
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  ABISELECT(-10928,-7664),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  ABISELECT(-11040,-7744),
  0,
  ABISELECT(-240,-164),
  ABISELECT(-672,-476),
  ABISELECT(-1304,-924),
  ABISELECT(-11040,-7744),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C17D1Ev,_ZTv0_n28_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C17D0Ev,_ZTv0_n28_N9S20628C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20628C17[];
static  VTBL_ENTRY _tg__ZTV9S20628C11__A__9S20628C17[] = {
  ABISELECT(9736,6820),
  ABISELECT(9824,6884),
  ABISELECT(10368,7268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C11__A__9S20628C17[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9824,-6884),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C12__9S20628C17[] = {
  ABISELECT(10816,7584),
  ABISELECT(9624,6740),
  ABISELECT(9712,6804),
  ABISELECT(10256,7188),
  ABISELECT(10688,7500),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZThn10688_N9S20628C12D1Ev,_ZThn7500_N9S20628C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
extern void ABISELECT(_ZThn10688_N9S20628C12D0Ev,_ZThn7500_N9S20628C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C12__9S20628C17[] = {
  ABISELECT(-10688,-7500),
  ABISELECT(-10688,-7500),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C12__9S20628C17[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9712,-6804),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C12__9S20628C17[] = {
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  ABISELECT(-10816,-7584),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C17[] = {
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__A1__9S20628C17[] = {
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C11__A1__9S20628C17[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(1104,780),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C9D1Ev();
extern void _ZN8S20628C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C17[] = {
  ABISELECT(-240,-164),
  ABISELECT(-672,-476),
  ABISELECT(-1304,-924),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D0Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C68S20628C9__A1__9S20628C17[] = {
  ABISELECT(-1304,-924),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C9__9S20628C17[] = {
  ABISELECT(240,164),
  ABISELECT(240,164),
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev),
};
static  VTT_ENTRY vtt_S20628C17[] = {
  {&(_ZTV9S20628C17[8]),  8,44},
  {&(_tg__ZTV9S20628C11__A__9S20628C17[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C11__A__9S20628C17[4]),  4,5},
  {&(_tg__ZTV9S20628C12__9S20628C17[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C12__9S20628C17[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C12__9S20628C17[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C12__9S20628C17[5]),  5,5},
  {&(_ZTV9S20628C17[23]),  23,44},
  {&(_ZTV9S20628C17[17]),  17,44},
  {&(_ZTV9S20628C17[27]),  27,44},
  {&(_ZTV9S20628C17[34]),  34,44},
  {&(_ZTV9S20628C17[41]),  41,44},
  {&(_tg__ZTV8S20628C6__9S20628C17[3]),  3,4},
  {&(_tg__ZTV9S20628C11__A1__9S20628C17[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C11__A1__9S20628C17[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C17[5]),  5,8},
  {&(_tg__ZTV8S20628C68S20628C9__A1__9S20628C17[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S20628C9__9S20628C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20628C17[];
extern  VTBL_ENTRY _ZTV9S20628C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C17[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10688_N9S20628C12D0Ev,_ZThn7500_N9S20628C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10688_N9S20628C12D1Ev,_ZThn7500_N9S20628C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C17D0Ev,_ZTv0_n28_N9S20628C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11040_N9S20628C17D0Ev,_ZThn7744_N9S20628C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C17D1Ev,_ZTv0_n28_N9S20628C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11040_N9S20628C17D1Ev,_ZThn7744_N9S20628C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C17D0Ev,_ZTv0_n12_N9S20628C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S20628C17D0Ev,_ZThn7580_N9S20628C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C17D1Ev,_ZTv0_n12_N9S20628C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S20628C17D1Ev,_ZThn7580_N9S20628C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C17 = {  "S20628C17", // class name
  bases_S20628C17, 17,
  &(vtc_S20628C17[0]), // expected_vtbl_contents
  &(vtt_S20628C17[0]), // expected_vtt_contents
  ABISELECT(13408,9408), // object size
  NSPAIRA(_ZTI9S20628C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20628C17),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20628C17),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20628C13  : S20628C14 , S20628C10 , S20628C15 , S20628C17 , S20628C12 {
  int s20628c13f0[4];
  char s20628c13f1;
  ::S20628C14 s20628c13f2;
  void *s20628c13f3;
  long s20628c13f4[6];
  ::S20628C17 s20628c13f5;
  int s20628c13f6;
  virtual  ~S20628C13(); // _ZN9S20628C13D2Ev
  virtual void  v8(); // _ZN9S20628C132v8Ev
  virtual void  v9(); // _ZN9S20628C132v9Ev
  S20628C13(); // tgen
};
//SIG(-1 S20628C13) C1{ BC2{ BC3{ vd m Fp FD[5] Fp FD} BC4{ VBC5{ m Fi[10] Fp[6]} VBC6{ BC5 Fi FD Fi FC5 FC5 Fi FD[8]} VBC7{ VBC5 VBC8{ BC6 VBC5 v3 FD[2] Fi[2] FD[3]} VBC6 FC9{}} VBC10{ BC5 VBC6 VBC3 BC8 vd FC7 FC8} BC11{ VBC5 VBC3 VBC7 VBC10 FC6 FC5 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC3 FD} VBC11 VBC12{ v4 v5 v6 Fi FC7 Fi Fp FC13{ VBC3 VBC6 VBC8 VBC14{ BC5 VBC6 VBC8 FD} vd FD[9] Fi FC11 Fi FL FC3 FL} Fi FL FD} v7 v8 Fp[5] FD[5] Fi FD} BC15{ VBC5 VBC14 BC13 vd Fp FC10} BC4 BC16{ VBC5 VBC8 BC14 BC13 VBC10 vd Fi Fp Fi:9 Fc FD FC8 FC4 Fc Fs[7] FC9 Fi Fc Fl} BC13 vd v1 v2 Fi[4] Fc FC2 Fp Fl[6] FC16 Fi}


 S20628C13 ::~S20628C13(){ note_dtor("S20628C13", this);}
void  S20628C13 ::v8(){vfunc_called(this, "_ZN9S20628C132v8Ev");}
void  S20628C13 ::v9(){vfunc_called(this, "_ZN9S20628C132v9Ev");}
S20628C13 ::S20628C13(){ note_ctor("S20628C13", this);} // tgen

static void Test_S20628C13()
{
  extern Class_Descriptor cd_S20628C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3804,10644)];
    init_test(&cd_S20628C13, buf);
    S20628C13 *dp, &lv = *(dp=new (buf) S20628C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(60848,42572), "sizeof(S20628C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C13)");
    /*is_ambiguous_... S20628C14::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C14*), 0, "S20628C13");
    /*is_ambiguous_... S20628C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C15*)(S20628C14*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C5*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*)(S20628C9*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*)(S20628C15*)(S20628C14*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C10*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C15*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*)(S20628C15*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C17*), ABISELECT(49512,34620), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C15::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C15*)(S20628C14*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C5::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C5*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C9::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C9*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C11*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C12::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*)(S20628C10*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C15*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C11*)(S20628C17*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C12::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*)(S20628C17*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*), ABISELECT(49600,34684), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(50064,35008), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(50064,35008), "S20628C13");
    check_base_class_offset(lv, (S20628C6*)(S20628C5*), ABISELECT(50048,35004), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C11*), ABISELECT(50048,35004), "S20628C13");
    check_base_class_offset(lv, (S20628C6*)(S20628C12*)(S20628C10*), ABISELECT(50048,35004), "S20628C13");
    /*is_ambiguous_... S20628C17::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C17*), ABISELECT(50048,35004), "S20628C13");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C11*)(S20628C17*), ABISELECT(50048,35004), "S20628C13");
    check_base_class_offset(lv, (S20628C6*)(S20628C12*)(S20628C17*), ABISELECT(50048,35004), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C12*), ABISELECT(50048,35004), "S20628C13");
    check_base_class_offset(lv, (S20628C5*)(S20628C15*)(S20628C14*), ABISELECT(50032,34996), "S20628C13");
    check_base_class_offset(lv, (S20628C5*)(S20628C2*)(S20628C15*)(S20628C14*), ABISELECT(50032,34996), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C5*)(S20628C2*), ABISELECT(50032,34996), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C5*)(S20628C15*), ABISELECT(50032,34996), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C5*)(S20628C2*)(S20628C15*), ABISELECT(50032,34996), "S20628C13");
    /*is_ambiguous_... S20628C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C9*), ABISELECT(51136,35772), "S20628C13");
    check_base_class_offset(lv, (S20507C11*)(S20628C9*), ABISELECT(52960,37052), "S20628C13");
    check_base_class_offset(lv, (S20507C11*)(S20628C2*)(S20628C15*)(S20628C14*), ABISELECT(52960,37052), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C2 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C2*), ABISELECT(52960,37052), "S20628C13");
    check_base_class_offset(lv, (S20507C11*)(S20628C12*)(S20628C10*), ABISELECT(52960,37052), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C2*)(S20628C15*), ABISELECT(52960,37052), "S20628C13");
    check_base_class_offset(lv, (S20507C11*)(S20628C12*)(S20628C17*), ABISELECT(52960,37052), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C12*), ABISELECT(52960,37052), "S20628C13");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(50608,35392), "S20628C13");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(50608,35392), "S20628C13");
    check_base_class_offset(lv, (S20628C6*)(S20628C9*), ABISELECT(50592,35388), "S20628C13");
    check_base_class_offset(lv, (S20628C9*)(S20628C15*)(S20628C14*), ABISELECT(50592,35388), "S20628C13");
    check_base_class_offset(lv, (S20628C9*)(S20628C2*)(S20628C15*)(S20628C14*), ABISELECT(50592,35388), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C9*)(S20628C2*), ABISELECT(50592,35388), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C9*)(S20628C15*), ABISELECT(50592,35388), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C9*)(S20628C2*)(S20628C15*), ABISELECT(50592,35388), "S20628C13");
    check_base_class_offset(lv, (S20628C9*)(S20628C17*), ABISELECT(50592,35388), "S20628C13");
    check_base_class_offset(lv, (S20628C2*)(S20628C15*)(S20628C14*), ABISELECT(128,84), "S20628C13");
    check_base_class_offset(lv, (S20628C15*)(S20628C14*), ABISELECT(128,84), "S20628C13");
    /*is_ambiguous_... S20628C14::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C2*)(S20628C14*), ABISELECT(53088,37136), "S20628C13");
    check_base_class_offset(lv, (S20628C16*)(S20628C14*), ABISELECT(53728,37580), "S20628C13");
    check_base_class_offset(lv, (S20628C14*), 0, "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C11*), ABISELECT(60744,42496), "S20628C13");
    check_base_class_offset(lv, (S20628C11*)(S20628C10*), ABISELECT(60736,42492), "S20628C13");
    check_base_class_offset(lv, (S20628C11*)(S20628C12*)(S20628C10*), ABISELECT(60736,42492), "S20628C13");
    check_base_class_offset(lv, (S20628C11*)(S20628C12*)(S20628C17*), ABISELECT(60736,42492), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C11*)(S20628C12*), ABISELECT(60736,42492), "S20628C13");
    check_base_class_offset(lv, (S20628C12*)(S20628C10*), ABISELECT(1072,720), "S20628C13");
    check_base_class_offset(lv, (S20628C10*), ABISELECT(1072,720), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C2*)(S20628C15*), ABISELECT(8640,6028), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C15*), ABISELECT(8640,6028), "S20628C13");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C11*)(S20628C17*), ABISELECT(9432,6572), "S20628C13");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C11*)(S20628C17*), ABISELECT(9424,6568), "S20628C13");
    check_base_class_offset(lv, (S20628C12*)(S20628C17*), ABISELECT(9536,6648), "S20628C13");
    check_base_class_offset(lv, (S20628C17*), ABISELECT(9424,6568), "S20628C13");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C12*), ABISELECT(19168,13388), "S20628C13");
    check_field_offset(lv, s20628c13f0, ABISELECT(23704,16568), "S20628C13.s20628c13f0");
    check_field_offset(lv, s20628c13f1, ABISELECT(23720,16584), "S20628C13.s20628c13f1");
    check_field_offset(lv, s20628c13f2, ABISELECT(23728,16588), "S20628C13.s20628c13f2");
    check_field_offset(lv, s20628c13f3, ABISELECT(36032,25180), "S20628C13.s20628c13f3");
    check_field_offset(lv, s20628c13f4, ABISELECT(36040,25184), "S20628C13.s20628c13f4");
    check_field_offset(lv, s20628c13f5, ABISELECT(36096,25208), "S20628C13.s20628c13f5");
    check_field_offset(lv, s20628c13f6, ABISELECT(49504,34616), "S20628C13.s20628c13f6");
    test_class_info(&lv, &cd_S20628C13);
    dp->~S20628C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C13(Test_S20628C13, "S20628C13", ABISELECT(60848,42572));

#else // __cplusplus

extern void _ZN9S20628C13C1Ev();
extern void _ZN9S20628C13D2Ev();
Name_Map name_map_S20628C13[] = {
  NSPAIR(_ZN9S20628C13C1Ev),
  NSPAIR(_ZN9S20628C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C5;
extern VTBL_ENTRY _ZTI8S20628C5[];
extern  VTBL_ENTRY _ZTV8S20628C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C9;
extern VTBL_ENTRY _ZTI8S20628C9[];
extern  VTBL_ENTRY _ZTV8S20628C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C9[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
extern Class_Descriptor cd_S20628C15;
extern VTBL_ENTRY _ZTI9S20628C15[];
extern  VTBL_ENTRY _ZTV9S20628C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C15[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
extern Class_Descriptor cd_S20628C16;
extern VTBL_ENTRY _ZTI9S20628C16[];
extern  VTBL_ENTRY _ZTV9S20628C16[];
extern Class_Descriptor cd_S20628C14;
extern VTBL_ENTRY _ZTI9S20628C14[];
extern  VTBL_ENTRY _ZTV9S20628C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C14[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C11;
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
extern Class_Descriptor cd_S20628C10;
extern VTBL_ENTRY _ZTI9S20628C10[];
extern  VTBL_ENTRY _ZTV9S20628C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C10[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
extern Class_Descriptor cd_S20628C15;
extern VTBL_ENTRY _ZTI9S20628C15[];
extern  VTBL_ENTRY _ZTV9S20628C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C15[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C11;
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
extern Class_Descriptor cd_S20628C17;
extern VTBL_ENTRY _ZTI9S20628C17[];
extern  VTBL_ENTRY _ZTV9S20628C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C17[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
static Base_Class bases_S20628C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(49512,34620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(49600,34684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(49600,34684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(50064,35008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(50064,35008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(50048,35004), //bcp->offset
    79, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20628C5,    ABISELECT(50032,34996), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(51136,35772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(52960,37052), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(50608,35392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(50608,35392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(50592,35388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20628C9,    ABISELECT(50592,35388), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20628C2,    ABISELECT(128,84), //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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20628C15,    ABISELECT(128,84), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20628C2,    ABISELECT(53088,37136), //bcp->offset
    99, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20628C16,    ABISELECT(53728,37580), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20628C14,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(60744,42496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C11,    ABISELECT(60736,42492), //bcp->offset
    118, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20628C12,    ABISELECT(1072,720), //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
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20628C10,    ABISELECT(1072,720), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20628C2,    ABISELECT(8640,6028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20628C15,    ABISELECT(8640,6028), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(9432,6572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C11,    ABISELECT(9424,6568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20628C12,    ABISELECT(9536,6648), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20628C17,    ABISELECT(9424,6568), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20628C12,    ABISELECT(19168,13388), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20628C13[];
extern void _ZN9S20628C13D1Ev();
extern void _ZN9S20628C13D0Ev();
extern void _ZN9S20628C142v6Ev();
extern void _ZN9S20628C142v7Ev();
extern void _ZN9S20628C132v8Ev();
extern void _ZN9S20628C132v9Ev();
extern void ABISELECT(_ZThn128_N9S20628C13D1Ev,_ZThn84_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn128_N9S20628C13D0Ev,_ZThn84_N9S20628C13D0Ev)();
extern void ABISELECT(_ZThn1072_N9S20628C13D1Ev,_ZThn720_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn1072_N9S20628C13D0Ev,_ZThn720_N9S20628C13D0Ev)();
extern void ABISELECT(_ZThn8640_N9S20628C13D1Ev,_ZThn6028_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn8640_N9S20628C13D0Ev,_ZThn6028_N9S20628C13D0Ev)();
extern void ABISELECT(_ZThn9424_N9S20628C13D1Ev,_ZThn6568_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn9424_N9S20628C13D0Ev,_ZThn6568_N9S20628C13D0Ev)();
extern void ABISELECT(_ZThn9536_N9S20628C13D1Ev,_ZThn6648_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn9536_N9S20628C13D0Ev,_ZThn6648_N9S20628C13D0Ev)();
extern void ABISELECT(_ZThn19168_N9S20628C13D1Ev,_ZThn13388_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn19168_N9S20628C13D0Ev,_ZThn13388_N9S20628C13D0Ev)();
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C13D1Ev,_ZTv0_n28_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn50592_N9S20628C13D1Ev,_ZThn35388_N9S20628C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C13D0Ev,_ZTv0_n28_N9S20628C13D0Ev)();
extern void ABISELECT(_ZThn50592_N9S20628C13D0Ev,_ZThn35388_N9S20628C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C13D1Ev,_ZTv0_n12_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn52960_N9S20628C13D1Ev,_ZThn37052_N9S20628C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C13D0Ev,_ZTv0_n12_N9S20628C13D0Ev)();
extern void ABISELECT(_ZThn52960_N9S20628C13D0Ev,_ZThn37052_N9S20628C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20628C13D1Ev,_ZTv0_n36_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn53088_N9S20628C13D1Ev,_ZThn37136_N9S20628C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20628C13D0Ev,_ZTv0_n36_N9S20628C13D0Ev)();
extern void ABISELECT(_ZThn53088_N9S20628C13D0Ev,_ZThn37136_N9S20628C13D0Ev)() __attribute__((weak));
extern void _ZN9S20628C162v3Ev();
extern void _ZN9S20628C162v4Ev();
extern void _ZN9S20628C162v5Ev();
static  VTBL_ENTRY vtc_S20628C13[] = {
  ABISELECT(60736,42492),
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&_ZN9S20628C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v6Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v7Ev,
  (VTBL_ENTRY)&_ZN9S20628C132v8Ev,
  (VTBL_ENTRY)&_ZN9S20628C132v9Ev,
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C13D1Ev,_ZThn84_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C13D0Ev,_ZThn84_N9S20628C13D0Ev),
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  ABISELECT(-1072,-720),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S20628C13D1Ev,_ZThn720_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S20628C13D0Ev,_ZThn720_N9S20628C13D0Ev),
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  ABISELECT(-8640,-6028),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N9S20628C13D1Ev,_ZThn6028_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N9S20628C13D0Ev,_ZThn6028_N9S20628C13D0Ev),
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  ABISELECT(-9424,-6568),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N9S20628C13D1Ev,_ZThn6568_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N9S20628C13D0Ev,_ZThn6568_N9S20628C13D0Ev),
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-9536,-6648),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N9S20628C13D1Ev,_ZThn6648_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N9S20628C13D0Ev,_ZThn6648_N9S20628C13D0Ev),
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  ABISELECT(-19168,-13388),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N9S20628C13D1Ev,_ZThn13388_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N9S20628C13D0Ev,_ZThn13388_N9S20628C13D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50032,-34996),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50048,-35004),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  ABISELECT(-50592,-35388),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50592,-35388),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C13D1Ev,_ZTv0_n28_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C13D0Ev,_ZTv0_n28_N9S20628C13D0Ev),
  ABISELECT(-52960,-37052),
  ABISELECT(-52960,-37052),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C13D1Ev,_ZTv0_n12_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C13D0Ev,_ZTv0_n12_N9S20628C13D0Ev),
  ABISELECT(-53088,-37136),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53088,-37136),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C13D1Ev,_ZTv0_n36_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C13D0Ev,_ZTv0_n36_N9S20628C13D0Ev),
  0,
  0,
  0,
  ABISELECT(-53728,-37580),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&_ZN9S20628C162v3Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v4Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v5Ev,
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-60736,-42492),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
};
extern VTBL_ENTRY _ZTV9S20628C13[];
extern void _ZN9S20628C14D1Ev();
extern void _ZN9S20628C14D0Ev();
extern void _ZN9S20628C142v6Ev();
extern void _ZN9S20628C142v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C14__9S20628C13[] = {
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN9S20628C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v6Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v7Ev,
};
extern void _ZN9S20628C15D1Ev();
extern void _ZN9S20628C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C159S20628C14__9S20628C13[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN9S20628C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C15D0Ev,
};
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C29S20628C159S20628C14__9S20628C13[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn52832_N8S20628C2D1Ev,_ZThn36968_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn52832_N8S20628C2D0Ev,_ZThn36968_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C29S20628C159S20628C14__9S20628C13[] = {
  ABISELECT(-52832,-36968),
  ABISELECT(-52832,-36968),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C29S20628C159S20628C14__9S20628C13[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-49904,-34912),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C29S20628C159S20628C14__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-49920,-34920),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn50464_N8S20628C2D1Ev,_ZThn35304_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn50464_N8S20628C2D0Ev,_ZThn35304_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C29S20628C159S20628C14__9S20628C13[] = {
  ABISELECT(-50464,-35304),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50464,-35304),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C159S20628C14__9S20628C13[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-49904,-34912),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C159S20628C14__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-49920,-34920),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev)();
extern void ABISELECT(_ZThn50464_N9S20628C15D1Ev,_ZThn35304_N9S20628C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev)();
extern void ABISELECT(_ZThn50464_N9S20628C15D0Ev,_ZThn35304_N9S20628C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C159S20628C14__9S20628C13[] = {
  ABISELECT(-50464,-35304),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50464,-35304),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev)();
extern void ABISELECT(_ZThn52832_N9S20628C15D1Ev,_ZThn36968_N9S20628C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev)();
extern void ABISELECT(_ZThn52832_N9S20628C15D0Ev,_ZThn36968_N9S20628C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C159S20628C14__9S20628C13[] = {
  ABISELECT(-52832,-36968),
  ABISELECT(-52832,-36968),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev),
};
extern void ABISELECT(_ZThn128_N9S20628C14D1Ev,_ZThn84_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20628C14D0Ev,_ZThn84_N9S20628C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C15__9S20628C14__9S20628C13[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C14D1Ev,_ZThn84_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C14D0Ev,_ZThn84_N9S20628C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C14__9S20628C13[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50032,-34996),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C14__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50048,-35004),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C14D1Ev,_ZTv0_n28_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn50592_N9S20628C14D1Ev,_ZThn35388_N9S20628C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C14D0Ev,_ZTv0_n28_N9S20628C14D0Ev)();
extern void ABISELECT(_ZThn50592_N9S20628C14D0Ev,_ZThn35388_N9S20628C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C14__9S20628C13[] = {
  ABISELECT(-50592,-35388),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50592,-35388),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C14D1Ev,_ZTv0_n28_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C14D0Ev,_ZTv0_n28_N9S20628C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C14D1Ev,_ZTv0_n12_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn52960_N9S20628C14D1Ev,_ZThn37052_N9S20628C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C14D0Ev,_ZTv0_n12_N9S20628C14D0Ev)();
extern void ABISELECT(_ZThn52960_N9S20628C14D0Ev,_ZThn37052_N9S20628C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__9S20628C14__9S20628C13[] = {
  ABISELECT(-52960,-37052),
  ABISELECT(-52960,-37052),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C14D1Ev,_ZTv0_n12_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C14D0Ev,_ZTv0_n12_N9S20628C14D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S20628C14D1Ev,_ZTv0_n36_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn53088_N9S20628C14D1Ev,_ZThn37136_N9S20628C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20628C14D0Ev,_ZTv0_n36_N9S20628C14D0Ev)();
extern void ABISELECT(_ZThn53088_N9S20628C14D0Ev,_ZThn37136_N9S20628C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C2__A1__9S20628C14__9S20628C13[] = {
  ABISELECT(-53088,-37136),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53088,-37136),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C14D1Ev,_ZTv0_n36_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C14D0Ev,_ZTv0_n36_N9S20628C14D0Ev),
};
extern void _ZN9S20628C162v3Ev();
extern void _ZN9S20628C162v4Ev();
extern void _ZN9S20628C162v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C16__9S20628C14__9S20628C13[] = {
  0,
  0,
  0,
  ABISELECT(-53728,-37580),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN9S20628C162v3Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v4Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v5Ev,
};
extern void _ZN9S20628C10D1Ev();
extern void _ZN9S20628C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C10__9S20628C13[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&_ZN9S20628C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C10D0Ev,
};
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C129S20628C10__9S20628C13[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZThn51888_N9S20628C12D1Ev,_ZThn36332_N9S20628C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
extern void ABISELECT(_ZThn51888_N9S20628C12D0Ev,_ZThn36332_N9S20628C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C129S20628C10__9S20628C13[] = {
  ABISELECT(-51888,-36332),
  ABISELECT(-51888,-36332),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C129S20628C10__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-48976,-34284),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C129S20628C10__9S20628C13[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-59664,-41772),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C10__9S20628C13[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-59664,-41772),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C10__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-48976,-34284),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev)();
extern void ABISELECT(_ZThn51888_N9S20628C10D1Ev,_ZThn36332_N9S20628C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev)();
extern void ABISELECT(_ZThn51888_N9S20628C10D0Ev,_ZThn36332_N9S20628C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C10__9S20628C13[] = {
  ABISELECT(-51888,-36332),
  ABISELECT(-51888,-36332),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev),
};
extern void _ZN9S20628C15D1Ev();
extern void _ZN9S20628C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C15__A1__9S20628C13[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN9S20628C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C15D0Ev,
};
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C29S20628C15__A2__9S20628C13[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn44320_N8S20628C2D1Ev,_ZThn31024_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn44320_N8S20628C2D0Ev,_ZThn31024_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C29S20628C15__A2__9S20628C13[] = {
  ABISELECT(-44320,-31024),
  ABISELECT(-44320,-31024),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C29S20628C15__A2__9S20628C13[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-41392,-28968),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C29S20628C15__A2__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-41408,-28976),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn41952_N8S20628C2D1Ev,_ZThn29360_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn41952_N8S20628C2D0Ev,_ZThn29360_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C29S20628C15__A2__9S20628C13[] = {
  ABISELECT(-41952,-29360),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41952,-29360),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C15__A1__9S20628C13[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-41392,-28968),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C15__A1__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-41408,-28976),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev)();
extern void ABISELECT(_ZThn41952_N9S20628C15D1Ev,_ZThn29360_N9S20628C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev)();
extern void ABISELECT(_ZThn41952_N9S20628C15D0Ev,_ZThn29360_N9S20628C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C15__A1__9S20628C13[] = {
  ABISELECT(-41952,-29360),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41952,-29360),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev)();
extern void ABISELECT(_ZThn44320_N9S20628C15D1Ev,_ZThn31024_N9S20628C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev)();
extern void ABISELECT(_ZThn44320_N9S20628C15D0Ev,_ZThn31024_N9S20628C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C15__A1__9S20628C13[] = {
  ABISELECT(-44320,-31024),
  ABISELECT(-44320,-31024),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev),
};
extern void _ZN9S20628C17D1Ev();
extern void _ZN9S20628C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C17__9S20628C13[] = {
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN9S20628C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C119S20628C17__A1__9S20628C13[] = {
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C119S20628C17__A1__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40624,-28436),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C129S20628C17__A1__9S20628C13[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZThn43424_N9S20628C12D1Ev,_ZThn30404_N9S20628C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
extern void ABISELECT(_ZThn43424_N9S20628C12D0Ev,_ZThn30404_N9S20628C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C129S20628C17__A1__9S20628C13[] = {
  ABISELECT(-43424,-30404),
  ABISELECT(-43424,-30404),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C129S20628C17__A1__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40512,-28356),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C129S20628C17__A1__9S20628C13[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-51200,-35844),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C17__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40624,-28436),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZThn112_N9S20628C17D1Ev,_ZThn80_N9S20628C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S20628C17D0Ev,_ZThn80_N9S20628C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C12__9S20628C17__9S20628C13[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20628C17D1Ev,_ZThn80_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20628C17D0Ev,_ZThn80_N9S20628C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C17D1Ev,_ZTv0_n12_N9S20628C17D1Ev)();
extern void ABISELECT(_ZThn43536_N9S20628C17D1Ev,_ZThn30484_N9S20628C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C17D0Ev,_ZTv0_n12_N9S20628C17D0Ev)();
extern void ABISELECT(_ZThn43536_N9S20628C17D0Ev,_ZThn30484_N9S20628C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C17__9S20628C13[] = {
  ABISELECT(-43536,-30484),
  ABISELECT(-43536,-30484),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C17D1Ev,_ZTv0_n12_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C17D0Ev,_ZTv0_n12_N9S20628C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__A1__9S20628C17__9S20628C13[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-51312,-35924),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C17D1Ev,_ZTv0_n28_N9S20628C17D1Ev)();
extern void ABISELECT(_ZThn41168_N9S20628C17D1Ev,_ZThn28820_N9S20628C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20628C17D0Ev,_ZTv0_n28_N9S20628C17D0Ev)();
extern void ABISELECT(_ZThn41168_N9S20628C17D0Ev,_ZThn28820_N9S20628C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C17__9S20628C13[] = {
  ABISELECT(-41168,-28820),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41168,-28820),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C17D1Ev,_ZTv0_n28_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C17D0Ev,_ZTv0_n28_N9S20628C17D0Ev),
};
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C12__A2__9S20628C13[] = {
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZThn33792_N9S20628C12D1Ev,_ZThn23664_N9S20628C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
extern void ABISELECT(_ZThn33792_N9S20628C12D0Ev,_ZThn23664_N9S20628C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C12__A2__9S20628C13[] = {
  ABISELECT(-33792,-23664),
  ABISELECT(-33792,-23664),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C12__A2__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-30880,-21616),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C12__A2__9S20628C13[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-41568,-29104),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C13[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C5__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C13[] = {
  ABISELECT(-536,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C9D1Ev();
extern void _ZN8S20628C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C13[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D0Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C68S20628C9__A1__9S20628C13[] = {
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev)();
extern void ABISELECT(_ZThn2368_N8S20628C9D1Ev,_ZThn1664_N8S20628C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev)();
extern void ABISELECT(_ZThn2368_N8S20628C9D0Ev,_ZThn1664_N8S20628C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C9__9S20628C13[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev),
};
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C2__A1__9S20628C13[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C2__A1__9S20628C13[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C2__A1__9S20628C13[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C2__A1__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C2__A1__9S20628C13[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C13[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C11__9S20628C13[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(10688,7488),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTT_ENTRY vtt_S20628C13[] = {
  {&(_ZTV9S20628C13[11]),  11,123},
  {&(_tg__ZTV9S20628C14__9S20628C13[10]),  10,14},
  {&(_tg__ZTV9S20628C159S20628C14__9S20628C13[8]),  8,10},
  {&(_tg__ZTV8S20628C29S20628C159S20628C14__9S20628C13[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C29S20628C159S20628C14__9S20628C13[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C29S20628C159S20628C14__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C29S20628C159S20628C14__9S20628C13[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C29S20628C159S20628C14__9S20628C13[7]),  7,10},
  {&(_tg__ZTV8S20628C5__9S20628C159S20628C14__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C159S20628C14__9S20628C13[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C159S20628C14__9S20628C13[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20628C159S20628C14__9S20628C13[3]),  3,5},
  {&(_tg__ZTV9S20628C15__9S20628C14__9S20628C13[8]),  8,10},
  {&(_tg__ZTV8S20628C5__9S20628C14__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C14__9S20628C13[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C14__9S20628C13[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__9S20628C14__9S20628C13[3]),  3,5},
  {&(_tg__ZTV8S20628C2__A1__9S20628C14__9S20628C13[9]),  9,11},
  {&(_tg__ZTV9S20628C16__9S20628C14__9S20628C13[5]),  5,8},
  {&(_tg__ZTV9S20628C10__9S20628C13[7]),  7,9},
  {&(_tg__ZTV9S20628C129S20628C10__9S20628C13[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C129S20628C10__9S20628C13[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C129S20628C10__9S20628C13[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C129S20628C10__9S20628C13[5]),  5,5},
  {&(_tg__ZTV9S20628C11__9S20628C10__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C10__9S20628C13[4]),  4,5},
  {&(_tg__ZTV9S20507C11__9S20628C10__9S20628C13[3]),  3,5},
  {&(_tg__ZTV9S20628C15__A1__9S20628C13[8]),  8,10},
  {&(_tg__ZTV8S20628C29S20628C15__A2__9S20628C13[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C29S20628C15__A2__9S20628C13[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C29S20628C15__A2__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C29S20628C15__A2__9S20628C13[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C29S20628C15__A2__9S20628C13[7]),  7,10},
  {&(_tg__ZTV8S20628C5__9S20628C15__A1__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C15__A1__9S20628C13[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C15__A1__9S20628C13[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20628C15__A1__9S20628C13[3]),  3,5},
  {&(_tg__ZTV9S20628C17__9S20628C13[8]),  8,10},
  {&(_tg__ZTV9S20628C119S20628C17__A1__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C119S20628C17__A1__9S20628C13[4]),  4,5},
  {&(_tg__ZTV9S20628C129S20628C17__A1__9S20628C13[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C129S20628C17__A1__9S20628C13[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C129S20628C17__A1__9S20628C13[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C129S20628C17__A1__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C17__9S20628C13[4]),  4,5},
  {&(_tg__ZTV9S20628C12__9S20628C17__9S20628C13[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C17__9S20628C13[3]),  3,5},
  {&(_tg__ZTV9S20628C11__A1__9S20628C17__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C9__9S20628C17__9S20628C13[7]),  7,10},
  {&(_tg__ZTV9S20628C12__A2__9S20628C13[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C12__A2__9S20628C13[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C12__A2__9S20628C13[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C12__A2__9S20628C13[5]),  5,5},
  {&(_ZTV9S20628C13[25]),  25,123},
  {&(_ZTV9S20628C13[79]),  79,123},
  {&(_ZTV9S20628C13[83]),  83,123},
  {&(_ZTV9S20628C13[91]),  91,123},
  {&(_ZTV9S20628C13[97]),  97,123},
  {&(_ZTV9S20628C13[108]),  108,123},
  {&(_ZTV9S20628C13[115]),  115,123},
  {&(_ZTV9S20628C13[34]),  34,123},
  {&(_ZTV9S20628C13[123]),  123,123},
  {&(_ZTV9S20628C13[44]),  44,123},
  {&(_ZTV9S20628C13[54]),  54,123},
  {&(_ZTV9S20628C13[63]),  63,123},
  {&(_ZTV9S20628C13[72]),  72,123},
  {&(_tg__ZTV8S20628C5__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C5__9S20628C13[4]),  4,5},
  {&(_tg__ZTV8S20628C6__9S20628C13[3]),  3,4},
  {&(_tg__ZTV8S20628C9__9S20628C13[5]),  5,8},
  {&(_tg__ZTV8S20628C68S20628C9__A1__9S20628C13[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S20628C9__9S20628C13[3]),  3,5},
  {&(_tg__ZTV8S20628C2__A1__9S20628C13[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C2__A1__9S20628C13[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C2__A1__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C2__A1__9S20628C13[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C2__A1__9S20628C13[7]),  7,10},
  {&(_tg__ZTV9S20628C11__9S20628C13[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C11__9S20628C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20628C13[];
extern  VTBL_ENTRY _ZTV9S20628C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C13[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S20628C9D0Ev,_ZThn1664_N8S20628C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S20628C9D1Ev,_ZThn1664_N8S20628C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C17D0Ev,_ZTv0_n28_N9S20628C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41168_N9S20628C17D0Ev,_ZThn28820_N9S20628C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C17D1Ev,_ZTv0_n28_N9S20628C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41168_N9S20628C17D1Ev,_ZThn28820_N9S20628C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C17D0Ev,_ZTv0_n12_N9S20628C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43536_N9S20628C17D0Ev,_ZThn30484_N9S20628C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C17D1Ev,_ZTv0_n12_N9S20628C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43536_N9S20628C17D1Ev,_ZThn30484_N9S20628C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S20628C10D0Ev,_ZThn36332_N9S20628C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S20628C10D1Ev,_ZThn36332_N9S20628C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S20628C12D0Ev,_ZThn23664_N9S20628C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn43424_N9S20628C12D0Ev,_ZThn30404_N9S20628C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S20628C12D0Ev,_ZThn36332_N9S20628C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S20628C12D1Ev,_ZThn23664_N9S20628C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn43424_N9S20628C12D1Ev,_ZThn30404_N9S20628C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S20628C12D1Ev,_ZThn36332_N9S20628C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20628C14D0Ev,_ZTv0_n36_N9S20628C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N9S20628C14D0Ev,_ZThn37136_N9S20628C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20628C14D1Ev,_ZTv0_n36_N9S20628C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N9S20628C14D1Ev,_ZThn37136_N9S20628C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C14D0Ev,_ZTv0_n12_N9S20628C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N9S20628C14D0Ev,_ZThn37052_N9S20628C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C14D1Ev,_ZTv0_n12_N9S20628C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N9S20628C14D1Ev,_ZThn37052_N9S20628C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C14D0Ev,_ZTv0_n28_N9S20628C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N9S20628C14D0Ev,_ZThn35388_N9S20628C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C14D1Ev,_ZTv0_n28_N9S20628C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N9S20628C14D1Ev,_ZThn35388_N9S20628C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S20628C15D0Ev,_ZThn31024_N9S20628C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S20628C15D0Ev,_ZThn36968_N9S20628C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S20628C15D1Ev,_ZThn31024_N9S20628C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S20628C15D1Ev,_ZThn36968_N9S20628C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S20628C15D0Ev,_ZThn29360_N9S20628C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S20628C15D0Ev,_ZThn35304_N9S20628C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S20628C15D1Ev,_ZThn29360_N9S20628C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S20628C15D1Ev,_ZThn35304_N9S20628C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N8S20628C2D0Ev,_ZThn29360_N8S20628C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N8S20628C2D0Ev,_ZThn35304_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N8S20628C2D1Ev,_ZThn29360_N8S20628C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N8S20628C2D1Ev,_ZThn35304_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N8S20628C2D0Ev,_ZThn31024_N8S20628C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N8S20628C2D0Ev,_ZThn36968_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N8S20628C2D1Ev,_ZThn31024_N8S20628C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N8S20628C2D1Ev,_ZThn36968_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20628C13D0Ev,_ZTv0_n36_N9S20628C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N9S20628C13D0Ev,_ZThn37136_N9S20628C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20628C13D1Ev,_ZTv0_n36_N9S20628C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N9S20628C13D1Ev,_ZThn37136_N9S20628C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C13D0Ev,_ZTv0_n12_N9S20628C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N9S20628C13D0Ev,_ZThn37052_N9S20628C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C13D1Ev,_ZTv0_n12_N9S20628C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N9S20628C13D1Ev,_ZThn37052_N9S20628C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C13D0Ev,_ZTv0_n28_N9S20628C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N9S20628C13D0Ev,_ZThn35388_N9S20628C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20628C13D1Ev,_ZTv0_n28_N9S20628C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N9S20628C13D1Ev,_ZThn35388_N9S20628C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C13 = {  "S20628C13", // class name
  bases_S20628C13, 30,
  &(vtc_S20628C13[0]), // expected_vtbl_contents
  &(vtt_S20628C13[0]), // expected_vtt_contents
  ABISELECT(60848,42572), // object size
  NSPAIRA(_ZTI9S20628C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20628C13),123, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20628C13),79, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S20628C18  {
  int s20628c18f0;
  void *s20628c18f1;
  void  mf20628c18(); // _ZN9S20628C1810mf20628c18Ev
};
//SIG(1 S20628C18) U1{ m Fi Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20628C1  : virtual S20628C2 , S20628C7 , virtual S20628C10 , virtual S20628C13 , S20628C12 {
  int s20628c1f0;
  long double s20628c1f1[2];
  __tsi64 s20628c1f2;
  void *s20628c1f3[2];
  long double s20628c1f4;
  ::S20628C18 s20628c1f5;
  int s20628c1f6;
  virtual  ~S20628C1(); // _ZN8S20628C1D2Ev
  virtual void  v1(); // _ZN8S20628C12v1Ev
  S20628C1(); // tgen
};
//SIG(1 S20628C1) C1{ VBC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ vd m Fp FD[5] Fp FD} VBC5{ VBC3 VBC6{ BC7{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v2 FD[2] Fi[2] FD[3]} VBC7 FC8{}} VBC9{ BC3 VBC7 VBC4 BC6 vd FC5 FC6} FC7 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} BC7 VBC10{ VBC3 VBC11{ BC3 VBC7 VBC6 FD} BC12{ VBC4 VBC7 VBC6 VBC11 vd FD[9] Fi FC2 Fi FL FC4 FL} vd Fp FC9} VBC13{ BC14{ BC4 BC15{ VBC3 VBC7 VBC5 VBC9 BC2 vd FC4 FD} VBC2 VBC16{ v3 v4 v5 Fi FC5 Fi Fp FC12 Fi FL FD} v6 v7 Fp[5] FD[5] Fi FD} BC10 BC15 BC17{ VBC3 VBC6 BC11 BC12 VBC9 vd Fi Fp Fi:9 Fc FD FC6 FC15 Fc Fs[7] FC8 Fi Fc Fl} BC12 vd v8 v9 Fi[4] Fc FC14 Fp Fl[6] FC17 Fi} BC12 vd v1 Fi FD[2] FL Fp[2] FD FU18{ m Fi Fp} Fi}


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

static void Test_S20628C1()
{
  extern Class_Descriptor cd_S20628C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4595,12860)];
    init_test(&cd_S20628C1, buf);
    S20628C1 *dp, &lv = *(dp=new (buf) S20628C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(73504,51436), "sizeof(S20628C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20628C1)");
    /*is_ambiguous_... S20628C1::S20628C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C5*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C6*)(S20628C9*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C10 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C10*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C10*)(S20628C13*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C15*)(S20628C13*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C2*)(S20628C15*)(S20628C13*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C17*)(S20628C13*), ABISELECT(5720,4000), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C2 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C2*), ABISELECT(5808,4064), "S20628C1");
    check_base_class_offset(lv, (S20507C11*)(S20628C9*), ABISELECT(5808,4064), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C10 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C12*)(S20628C10*), ABISELECT(5808,4064), "S20628C1");
    check_base_class_offset(lv, (S20507C11*)(S20628C2*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(5808,4064), "S20628C1");
    check_base_class_offset(lv, (S20507C11*)(S20628C12*)(S20628C10*)(S20628C13*), ABISELECT(5808,4064), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C2*)(S20628C15*)(S20628C13*), ABISELECT(5808,4064), "S20628C1");
    check_base_class_offset(lv, (S20507C11*)(S20628C12*)(S20628C17*)(S20628C13*), ABISELECT(5808,4064), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C12*)(S20628C13*), ABISELECT(5808,4064), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C12 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C12*), ABISELECT(5808,4064), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*), ABISELECT(5968,4160), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C6*), ABISELECT(5968,4160), "S20628C1");
    check_base_class_offset(lv, (S20628C6*)(S20628C5*), ABISELECT(5952,4156), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C11*), ABISELECT(5952,4156), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C10 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C12*)(S20628C10*), ABISELECT(5952,4156), "S20628C1");
    check_base_class_offset(lv, (S20628C6*)(S20628C12*)(S20628C10*)(S20628C13*), ABISELECT(5952,4156), "S20628C1");
    /*is_ambiguous_... S20628C17::S20628C6 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C17*)(S20628C13*), ABISELECT(5952,4156), "S20628C1");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C11*)(S20628C17*)(S20628C13*), ABISELECT(5952,4156), "S20628C1");
    check_base_class_offset(lv, (S20628C6*)(S20628C12*)(S20628C17*)(S20628C13*), ABISELECT(5952,4156), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C12*)(S20628C13*), ABISELECT(5952,4156), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C6*)(S20628C12*), ABISELECT(5952,4156), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C5::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C5*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C9::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C9*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C11*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C10 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*)(S20628C10*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C15::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C12::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*)(S20628C10*)(S20628C13*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C15*)(S20628C13*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C11*)(S20628C17*)(S20628C13*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C12::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*)(S20628C17*)(S20628C13*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*)(S20628C13*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C7*)(S20628C12*), ABISELECT(6496,4540), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C5*)(S20628C2*), ABISELECT(5936,4148), "S20628C1");
    check_base_class_offset(lv, (S20628C5*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(5936,4148), "S20628C1");
    check_base_class_offset(lv, (S20628C5*)(S20628C2*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(5936,4148), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C5*)(S20628C15*)(S20628C13*), ABISELECT(5936,4148), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C5*)(S20628C2*)(S20628C15*)(S20628C13*), ABISELECT(5936,4148), "S20628C1");
    /*is_ambiguous_... S20628C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C9*), ABISELECT(7472,5236), "S20628C1");
    check_base_class_offset(lv, (S20507C6*)(S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(6944,4856), "S20628C1");
    check_base_class_offset(lv, (S20628C7*)(S20628C6*)(S20628C9*), ABISELECT(6944,4856), "S20628C1");
    check_base_class_offset(lv, (S20628C6*)(S20628C9*), ABISELECT(6928,4852), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C9*)(S20628C2*), ABISELECT(6928,4852), "S20628C1");
    check_base_class_offset(lv, (S20628C9*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(6928,4852), "S20628C1");
    check_base_class_offset(lv, (S20628C9*)(S20628C2*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(6928,4852), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C9*)(S20628C15*)(S20628C13*), ABISELECT(6928,4852), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C9*)(S20628C2*)(S20628C15*)(S20628C13*), ABISELECT(6928,4852), "S20628C1");
    check_base_class_offset(lv, (S20628C9*)(S20628C17*)(S20628C13*), ABISELECT(6928,4852), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C2*), ABISELECT(5088,3556), "S20628C1");
    /*is_ambiguous_... S20628C14::S20628C2 */ AMB_check_base_class_offset(lv, (S20628C2*)(S20628C14*)(S20628C13*), ABISELECT(5088,3556), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C7*), ABISELECT(4544,3180), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C7 */ AMB_check_base_class_offset(lv, (S20628C7*), ABISELECT(4544,3180), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C11*), ABISELECT(16872,11828), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C10 */ AMB_check_base_class_offset(lv, (S20628C11*)(S20628C10*), ABISELECT(16864,11824), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C10 */ AMB_check_base_class_offset(lv, (S20628C11*)(S20628C12*)(S20628C10*), ABISELECT(16864,11824), "S20628C1");
    check_base_class_offset(lv, (S20628C11*)(S20628C10*)(S20628C13*), ABISELECT(16864,11824), "S20628C1");
    check_base_class_offset(lv, (S20628C11*)(S20628C12*)(S20628C10*)(S20628C13*), ABISELECT(16864,11824), "S20628C1");
    check_base_class_offset(lv, (S20628C11*)(S20628C12*)(S20628C17*)(S20628C13*), ABISELECT(16864,11824), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C11*)(S20628C12*)(S20628C13*), ABISELECT(16864,11824), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C11*)(S20628C12*), ABISELECT(16864,11824), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C10 */ AMB_check_base_class_offset(lv, (S20628C12*)(S20628C10*), ABISELECT(9296,6516), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C10 */ AMB_check_base_class_offset(lv, (S20628C10*), ABISELECT(9296,6516), "S20628C1");
    /*is_ambiguous_... S20628C14::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S20628C14*)(S20628C13*), ABISELECT(16976,11904), "S20628C1");
    check_base_class_offset(lv, (S20628C2*)(S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(17104,11988), "S20628C1");
    check_base_class_offset(lv, (S20628C15*)(S20628C14*)(S20628C13*), ABISELECT(17104,11988), "S20628C1");
    check_base_class_offset(lv, (S20628C16*)(S20628C14*)(S20628C13*), ABISELECT(66496,46524), "S20628C1");
    check_base_class_offset(lv, (S20628C14*)(S20628C13*), ABISELECT(16976,11904), "S20628C1");
    check_base_class_offset(lv, (S20628C12*)(S20628C10*)(S20628C13*), ABISELECT(18048,12624), "S20628C1");
    check_base_class_offset(lv, (S20628C10*)(S20628C13*), ABISELECT(18048,12624), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C2*)(S20628C15*)(S20628C13*), ABISELECT(25616,17932), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C15 */ AMB_check_base_class_offset(lv, (S20628C15*)(S20628C13*), ABISELECT(25616,17932), "S20628C1");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S20628C11*)(S20628C17*)(S20628C13*), ABISELECT(26408,18476), "S20628C1");
    /*is_ambiguous_... S20628C17::S20628C11 */ AMB_check_base_class_offset(lv, (S20628C11*)(S20628C17*)(S20628C13*), ABISELECT(26400,18472), "S20628C1");
    check_base_class_offset(lv, (S20628C12*)(S20628C17*)(S20628C13*), ABISELECT(26512,18552), "S20628C1");
    check_base_class_offset(lv, (S20628C17*)(S20628C13*), ABISELECT(26400,18472), "S20628C1");
    /*is_ambiguous_... S20628C13::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C12*)(S20628C13*), ABISELECT(36144,25292), "S20628C1");
    check_base_class_offset(lv, (S20628C13*), ABISELECT(16976,11904), "S20628C1");
    /*is_ambiguous_... S20628C1::S20628C12 */ AMB_check_base_class_offset(lv, (S20628C12*), 0, "S20628C1");
    check_field_offset(lv, s20628c1f0, ABISELECT(4976,3492), "S20628C1.s20628c1f0");
    check_field_offset(lv, s20628c1f1, ABISELECT(4992,3496), "S20628C1.s20628c1f1");
    check_field_offset(lv, s20628c1f2, ABISELECT(5024,3520), "S20628C1.s20628c1f2");
    check_field_offset(lv, s20628c1f3, ABISELECT(5032,3528), "S20628C1.s20628c1f3");
    check_field_offset(lv, s20628c1f4, ABISELECT(5056,3536), "S20628C1.s20628c1f4");
    check_field_offset(lv, s20628c1f5, ABISELECT(5072,3548), "S20628C1.s20628c1f5");
    check_field_offset(lv, s20628c1f6, ABISELECT(5080,3552), "S20628C1.s20628c1f6");
    test_class_info(&lv, &cd_S20628C1);
    dp->~S20628C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20628C1(Test_S20628C1, "S20628C1", ABISELECT(73504,51436));

#else // __cplusplus

extern void _ZN8S20628C1C1Ev();
extern void _ZN8S20628C1D2Ev();
Name_Map name_map_S20628C1[] = {
  NSPAIR(_ZN8S20628C1C1Ev),
  NSPAIR(_ZN8S20628C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C5;
extern VTBL_ENTRY _ZTI8S20628C5[];
extern  VTBL_ENTRY _ZTV8S20628C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20628C6;
extern VTBL_ENTRY _ZTI8S20628C6[];
extern  VTBL_ENTRY _ZTV8S20628C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C6[];
extern Class_Descriptor cd_S20628C9;
extern VTBL_ENTRY _ZTI8S20628C9[];
extern  VTBL_ENTRY _ZTV8S20628C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C9[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C7;
extern VTBL_ENTRY _ZTI8S20628C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C11;
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
extern Class_Descriptor cd_S20628C10;
extern VTBL_ENTRY _ZTI9S20628C10[];
extern  VTBL_ENTRY _ZTV9S20628C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C10[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
extern Class_Descriptor cd_S20628C15;
extern VTBL_ENTRY _ZTI9S20628C15[];
extern  VTBL_ENTRY _ZTV9S20628C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C15[];
extern Class_Descriptor cd_S20628C16;
extern VTBL_ENTRY _ZTI9S20628C16[];
extern  VTBL_ENTRY _ZTV9S20628C16[];
extern Class_Descriptor cd_S20628C14;
extern VTBL_ENTRY _ZTI9S20628C14[];
extern  VTBL_ENTRY _ZTV9S20628C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C14[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
extern Class_Descriptor cd_S20628C10;
extern VTBL_ENTRY _ZTI9S20628C10[];
extern  VTBL_ENTRY _ZTV9S20628C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C10[];
extern Class_Descriptor cd_S20628C2;
extern VTBL_ENTRY _ZTI8S20628C2[];
extern  VTBL_ENTRY _ZTV8S20628C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C2[];
extern Class_Descriptor cd_S20628C15;
extern VTBL_ENTRY _ZTI9S20628C15[];
extern  VTBL_ENTRY _ZTV9S20628C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C15[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20628C11;
extern VTBL_ENTRY _ZTI9S20628C11[];
extern  VTBL_ENTRY _ZTV9S20628C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C11[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
extern Class_Descriptor cd_S20628C17;
extern VTBL_ENTRY _ZTI9S20628C17[];
extern  VTBL_ENTRY _ZTV9S20628C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C17[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
extern Class_Descriptor cd_S20628C13;
extern VTBL_ENTRY _ZTI9S20628C13[];
extern  VTBL_ENTRY _ZTV9S20628C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C13[];
extern Class_Descriptor cd_S20628C12;
extern VTBL_ENTRY _ZTI9S20628C12[];
extern  VTBL_ENTRY _ZTV9S20628C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20628C12[];
static Base_Class bases_S20628C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(5720,4000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(5808,4064), //bcp->offset
    27, //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
    12, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(5968,4160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(5968,4160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(5952,4156), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(6496,4540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(6496,4540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C5,    ABISELECT(5936,4148), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(7472,5236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(6944,4856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(6944,4856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C6,    ABISELECT(6928,4852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    12, //immediately_derived
  0, 0},
  {&cd_S20628C9,    ABISELECT(6928,4852), //bcp->offset
    42, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20628C2,    ABISELECT(5088,3556), //bcp->offset
    16, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(4544,3180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C7,    ABISELECT(4544,3180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(16872,11828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C11,    ABISELECT(16864,11824), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20628C12,    ABISELECT(9296,6516), //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
    8, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20628C10,    ABISELECT(9296,6516), //bcp->offset
    52, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C11,    ABISELECT(16976,11904), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S20628C2,    ABISELECT(17104,11988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20628C15,    ABISELECT(17104,11988), //bcp->offset
    89, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20628C16,    ABISELECT(66496,46524), //bcp->offset
    146, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20628C14,    ABISELECT(16976,11904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20628C12,    ABISELECT(18048,12624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20628C10,    ABISELECT(18048,12624), //bcp->offset
    99, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20628C2,    ABISELECT(25616,17932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20628C15,    ABISELECT(25616,17932), //bcp->offset
    108, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(26408,18476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20628C11,    ABISELECT(26400,18472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20628C12,    ABISELECT(26512,18552), //bcp->offset
    128, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20628C17,    ABISELECT(26400,18472), //bcp->offset
    118, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20628C12,    ABISELECT(36144,25292), //bcp->offset
    137, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20628C13,    ABISELECT(16976,11904), //bcp->offset
    67, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20628C12,    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
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20628C1[];
extern void _ZN8S20628C1D1Ev();
extern void _ZN8S20628C1D0Ev();
extern void _ZN8S20628C12v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S20628C1D1Ev,_ZTv0_n36_N8S20628C1D1Ev)();
extern void ABISELECT(_ZThn5088_N8S20628C1D1Ev,_ZThn3556_N8S20628C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20628C1D0Ev,_ZTv0_n36_N8S20628C1D0Ev)();
extern void ABISELECT(_ZThn5088_N8S20628C1D0Ev,_ZThn3556_N8S20628C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C1D1Ev,_ZTv0_n12_N8S20628C1D1Ev)();
extern void ABISELECT(_ZThn5808_N8S20628C1D1Ev,_ZThn4064_N8S20628C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C1D0Ev,_ZTv0_n12_N8S20628C1D0Ev)();
extern void ABISELECT(_ZThn5808_N8S20628C1D0Ev,_ZThn4064_N8S20628C1D0Ev)() __attribute__((weak));
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C1D1Ev,_ZTv0_n28_N8S20628C1D1Ev)();
extern void ABISELECT(_ZThn6928_N8S20628C1D1Ev,_ZThn4852_N8S20628C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20628C1D0Ev,_ZTv0_n28_N8S20628C1D0Ev)();
extern void ABISELECT(_ZThn6928_N8S20628C1D0Ev,_ZThn4852_N8S20628C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20628C1D1Ev,_ZTv0_n32_N8S20628C1D1Ev)();
extern void ABISELECT(_ZThn9296_N8S20628C1D1Ev,_ZThn6516_N8S20628C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20628C1D0Ev,_ZTv0_n32_N8S20628C1D0Ev)();
extern void ABISELECT(_ZThn9296_N8S20628C1D0Ev,_ZThn6516_N8S20628C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20628C1D1Ev,_ZTv0_n48_N8S20628C1D1Ev)();
extern void ABISELECT(_ZThn16976_N8S20628C1D1Ev,_ZThn11904_N8S20628C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20628C1D0Ev,_ZTv0_n48_N8S20628C1D0Ev)();
extern void ABISELECT(_ZThn16976_N8S20628C1D0Ev,_ZThn11904_N8S20628C1D0Ev)() __attribute__((weak));
extern void _ZN9S20628C142v6Ev();
extern void _ZN9S20628C142v7Ev();
extern void _ZN9S20628C132v8Ev();
extern void _ZN9S20628C132v9Ev();
extern void ABISELECT(_ZTvn128_n96_N8S20628C1D1Ev,_ZTvn84_n48_N8S20628C1D1Ev)();
extern void ABISELECT(_ZTvn128_n96_N8S20628C1D0Ev,_ZTvn84_n48_N8S20628C1D0Ev)();
extern void ABISELECT(_ZTvn1072_n96_N8S20628C1D1Ev,_ZTvn720_n48_N8S20628C1D1Ev)();
extern void ABISELECT(_ZTvn1072_n96_N8S20628C1D0Ev,_ZTvn720_n48_N8S20628C1D0Ev)();
extern void ABISELECT(_ZTvn8640_n96_N8S20628C1D1Ev,_ZTvn6028_n48_N8S20628C1D1Ev)();
extern void ABISELECT(_ZTvn8640_n96_N8S20628C1D0Ev,_ZTvn6028_n48_N8S20628C1D0Ev)();
extern void ABISELECT(_ZTvn9424_n96_N8S20628C1D1Ev,_ZTvn6568_n48_N8S20628C1D1Ev)();
extern void ABISELECT(_ZTvn9424_n96_N8S20628C1D0Ev,_ZTvn6568_n48_N8S20628C1D0Ev)();
extern void ABISELECT(_ZTvn9536_n96_N8S20628C1D1Ev,_ZTvn6648_n48_N8S20628C1D1Ev)();
extern void ABISELECT(_ZTvn9536_n96_N8S20628C1D0Ev,_ZTvn6648_n48_N8S20628C1D0Ev)();
extern void ABISELECT(_ZTvn19168_n96_N8S20628C1D1Ev,_ZTvn13388_n48_N8S20628C1D1Ev)();
extern void ABISELECT(_ZTvn19168_n96_N8S20628C1D0Ev,_ZTvn13388_n48_N8S20628C1D0Ev)();
extern void _ZN9S20628C162v3Ev();
extern void _ZN9S20628C162v4Ev();
extern void _ZN9S20628C162v5Ev();
static  VTBL_ENTRY vtc_S20628C1[] = {
  ABISELECT(66496,46524),
  ABISELECT(16976,11904),
  ABISELECT(9296,6516),
  ABISELECT(6928,4852),
  ABISELECT(5936,4148),
  ABISELECT(5088,3556),
  ABISELECT(16864,11824),
  ABISELECT(5720,4000),
  ABISELECT(5952,4156),
  ABISELECT(6496,4540),
  ABISELECT(5808,4064),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&_ZN8S20628C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20628C12v1Ev,
  ABISELECT(-5088,-3556),
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  ABISELECT(-5088,-3556),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20628C1D1Ev,_ZTv0_n36_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20628C1D0Ev,_ZTv0_n36_N8S20628C1D0Ev),
  ABISELECT(-5808,-4064),
  ABISELECT(-5808,-4064),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C1D1Ev,_ZTv0_n12_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C1D0Ev,_ZTv0_n12_N8S20628C1D0Ev),
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(-5936,-4148),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  0,
  ABISELECT(-232,-156),
  ABISELECT(-5952,-4156),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  ABISELECT(-6928,-4852),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(-6928,-4852),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C1D1Ev,_ZTv0_n28_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C1D0Ev,_ZTv0_n28_N8S20628C1D0Ev),
  ABISELECT(-9296,-6516),
  ABISELECT(7568,5308),
  ABISELECT(-3576,-2516),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  ABISELECT(-3488,-2452),
  ABISELECT(-9296,-6516),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20628C1D1Ev,_ZTv0_n32_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20628C1D0Ev,_ZTv0_n32_N8S20628C1D0Ev),
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(-16864,-11824),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  0,
  0,
  0,
  0,
  ABISELECT(-16976,-11904),
  ABISELECT(-112,-80),
  ABISELECT(49520,34620),
  ABISELECT(-11888,-8348),
  ABISELECT(-11168,-7840),
  ABISELECT(-10048,-7052),
  ABISELECT(-11024,-7748),
  ABISELECT(-11040,-7756),
  ABISELECT(-10480,-7364),
  ABISELECT(-11256,-7904),
  ABISELECT(-16976,-11904),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20628C1D1Ev,_ZTv0_n48_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20628C1D0Ev,_ZTv0_n48_N8S20628C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20628C142v6Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v7Ev,
  (VTBL_ENTRY)&_ZN9S20628C132v8Ev,
  (VTBL_ENTRY)&_ZN9S20628C132v9Ev,
  ABISELECT(-10176,-7136),
  ABISELECT(-10608,-7448),
  ABISELECT(-11152,-7832),
  ABISELECT(-11168,-7840),
  ABISELECT(-11296,-7924),
  ABISELECT(-11384,-7988),
  ABISELECT(-17104,-11988),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn128_n96_N8S20628C1D1Ev,_ZTvn84_n48_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn128_n96_N8S20628C1D0Ev,_ZTvn84_n48_N8S20628C1D0Ev),
  ABISELECT(-1184,-800),
  ABISELECT(-12328,-8624),
  ABISELECT(-12096,-8468),
  ABISELECT(-11552,-8084),
  ABISELECT(-12240,-8560),
  ABISELECT(-18048,-12624),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n96_N8S20628C1D1Ev,_ZTvn720_n48_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n96_N8S20628C1D0Ev,_ZTvn720_n48_N8S20628C1D0Ev),
  ABISELECT(-18688,-13080),
  ABISELECT(-19120,-13392),
  ABISELECT(-19664,-13776),
  ABISELECT(-19680,-13784),
  ABISELECT(-19808,-13868),
  ABISELECT(-19896,-13932),
  ABISELECT(-25616,-17932),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8640_n96_N8S20628C1D1Ev,_ZTvn6028_n48_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8640_n96_N8S20628C1D0Ev,_ZTvn6028_n48_N8S20628C1D0Ev),
  ABISELECT(-19472,-13620),
  ABISELECT(-9536,-6648),
  ABISELECT(-20592,-14408),
  ABISELECT(-20680,-14472),
  ABISELECT(-20448,-14316),
  ABISELECT(-19904,-13932),
  ABISELECT(-26400,-18472),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9424_n96_N8S20628C1D1Ev,_ZTvn6568_n48_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9424_n96_N8S20628C1D0Ev,_ZTvn6568_n48_N8S20628C1D0Ev),
  ABISELECT(-9648,-6728),
  ABISELECT(-20792,-14552),
  ABISELECT(-20560,-14396),
  ABISELECT(-20016,-14012),
  ABISELECT(-20704,-14488),
  ABISELECT(-26512,-18552),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9536_n96_N8S20628C1D1Ev,_ZTvn6648_n48_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9536_n96_N8S20628C1D0Ev,_ZTvn6648_n48_N8S20628C1D0Ev),
  ABISELECT(-19280,-13468),
  ABISELECT(-30424,-21292),
  ABISELECT(-30192,-21136),
  ABISELECT(-29648,-20752),
  ABISELECT(-30336,-21228),
  ABISELECT(-36144,-25292),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn19168_n96_N8S20628C1D1Ev,_ZTvn13388_n48_N8S20628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn19168_n96_N8S20628C1D0Ev,_ZTvn13388_n48_N8S20628C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-66496,-46524),
  (VTBL_ENTRY)&(_ZTI8S20628C1[0]),
  (VTBL_ENTRY)&_ZN9S20628C162v3Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v4Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v5Ev,
};
extern VTBL_ENTRY _ZTV8S20628C1[];
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C12__A4__8S20628C1[] = {
  ABISELECT(16864,11824),
  ABISELECT(5720,4000),
  ABISELECT(5952,4156),
  ABISELECT(6496,4540),
  ABISELECT(5808,4064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZThn5808_N9S20628C12D1Ev,_ZThn4064_N9S20628C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
extern void ABISELECT(_ZThn5808_N9S20628C12D0Ev,_ZThn4064_N9S20628C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C12__A4__8S20628C1[] = {
  ABISELECT(-5808,-4064),
  ABISELECT(-5808,-4064),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C12__A4__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-5952,-4156),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C12__A4__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(-16864,-11824),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C2__8S20628C1[] = {
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn720_N8S20628C2D1Ev,_ZThn508_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn720_N8S20628C2D0Ev,_ZThn508_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C2__8S20628C1[] = {
  ABISELECT(-720,-508),
  ABISELECT(-720,-508),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C2__8S20628C1[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(-848,-592),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C2__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-864,-600),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZThn1840_N8S20628C2D1Ev,_ZThn1296_N8S20628C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
extern void ABISELECT(_ZThn1840_N8S20628C2D0Ev,_ZThn1296_N8S20628C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C2__8S20628C1[] = {
  ABISELECT(-1840,-1296),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(-1840,-1296),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C1[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C5__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20628C5[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C1[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void _ZN8S20628C9D1Ev();
extern void _ZN8S20628C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C1[] = {
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C9D0Ev,
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C68S20628C9__A1__8S20628C1[] = {
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C6[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C9__8S20628C1[] = {
  ABISELECT(1120,788),
  ABISELECT(1120,788),
  (VTBL_ENTRY)&(_ZTI8S20628C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D1Ev,_ZTv0_n12_N8S20628C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C9D0Ev,_ZTv0_n12_N8S20628C9D0Ev),
};
extern void _ZN9S20628C10D1Ev();
extern void _ZN9S20628C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C10__8S20628C1[] = {
  ABISELECT(7568,5308),
  ABISELECT(-3576,-2516),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  ABISELECT(-3488,-2452),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&_ZN9S20628C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C10D0Ev,
};
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C129S20628C10__8S20628C1[] = {
  ABISELECT(7568,5308),
  ABISELECT(-3576,-2516),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  ABISELECT(-3488,-2452),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C129S20628C10__8S20628C1[] = {
  ABISELECT(3488,2452),
  ABISELECT(3488,2452),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C129S20628C10__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(3344,2360),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C129S20628C10__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(-7568,-5308),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C10__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(-7568,-5308),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C10__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(3344,2360),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C10__8S20628C1[] = {
  ABISELECT(3488,2452),
  ABISELECT(3488,2452),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C11__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(10912,7668),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN9S20628C13D1Ev();
extern void _ZN9S20628C13D0Ev();
extern void _ZN9S20628C142v6Ev();
extern void _ZN9S20628C142v7Ev();
extern void _ZN9S20628C132v8Ev();
extern void _ZN9S20628C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C13__8S20628C1[] = {
  ABISELECT(-112,-80),
  ABISELECT(49520,34620),
  ABISELECT(-11888,-8348),
  ABISELECT(-11168,-7840),
  ABISELECT(-10048,-7052),
  ABISELECT(-11024,-7748),
  ABISELECT(-11040,-7756),
  ABISELECT(-10480,-7364),
  ABISELECT(-11256,-7904),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&_ZN9S20628C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v6Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v7Ev,
  (VTBL_ENTRY)&_ZN9S20628C132v8Ev,
  (VTBL_ENTRY)&_ZN9S20628C132v9Ev,
};
extern void _ZN9S20628C14D1Ev();
extern void _ZN9S20628C14D0Ev();
extern void _ZN9S20628C142v6Ev();
extern void _ZN9S20628C142v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(49520,34620),
  ABISELECT(-11888,-8348),
  ABISELECT(-11168,-7840),
  ABISELECT(-10048,-7052),
  ABISELECT(-11024,-7748),
  ABISELECT(-11040,-7756),
  ABISELECT(-10480,-7364),
  ABISELECT(-11256,-7904),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN9S20628C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v6Ev,
  (VTBL_ENTRY)&_ZN9S20628C142v7Ev,
};
extern void _ZN9S20628C15D1Ev();
extern void _ZN9S20628C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C159S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(-10176,-7136),
  ABISELECT(-10608,-7448),
  ABISELECT(-11152,-7832),
  ABISELECT(-11168,-7840),
  ABISELECT(-11296,-7924),
  ABISELECT(-11384,-7988),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN9S20628C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C15D0Ev,
};
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[] = {
  ABISELECT(-10176,-7136),
  ABISELECT(-10608,-7448),
  ABISELECT(-11152,-7832),
  ABISELECT(-11168,-7840),
  ABISELECT(-11296,-7924),
  ABISELECT(-11384,-7988),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[] = {
  ABISELECT(11296,7924),
  ABISELECT(11296,7924),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(11168,7840),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(11152,7832),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[] = {
  ABISELECT(10176,7136),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(10176,7136),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C159S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(11168,7840),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C159S20628C149S20628C13__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(11152,7832),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C159S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(10176,7136),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(10176,7136),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C159S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(11296,7924),
  ABISELECT(11296,7924),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev),
};
extern void ABISELECT(_ZThn128_N9S20628C14D1Ev,_ZThn84_N9S20628C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20628C14D0Ev,_ZThn84_N9S20628C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C15__9S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(-10176,-7136),
  ABISELECT(-10608,-7448),
  ABISELECT(-11152,-7832),
  ABISELECT(-11168,-7840),
  ABISELECT(-11296,-7924),
  ABISELECT(-11384,-7988),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C14D1Ev,_ZThn84_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C14D0Ev,_ZThn84_N9S20628C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(11040,7756),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C149S20628C13__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(11024,7748),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C14D1Ev,_ZTv0_n28_N9S20628C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20628C14D0Ev,_ZTv0_n28_N9S20628C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(10048,7052),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(10048,7052),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C14D1Ev,_ZTv0_n28_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C14D0Ev,_ZTv0_n28_N9S20628C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C14D1Ev,_ZTv0_n12_N9S20628C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C14D0Ev,_ZTv0_n12_N9S20628C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__9S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(11168,7840),
  ABISELECT(11168,7840),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C14D1Ev,_ZTv0_n12_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C14D0Ev,_ZTv0_n12_N9S20628C14D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S20628C14D1Ev,_ZTv0_n36_N9S20628C14D1Ev)();
extern void ABISELECT(_ZTv0_n72_N9S20628C14D0Ev,_ZTv0_n36_N9S20628C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C2__A1__9S20628C149S20628C13__8S20628C1[] = {
  ABISELECT(11888,8348),
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  ABISELECT(11888,8348),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C14D1Ev,_ZTv0_n36_N9S20628C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C14D0Ev,_ZTv0_n36_N9S20628C14D0Ev),
};
extern void _ZN9S20628C162v3Ev();
extern void _ZN9S20628C162v4Ev();
extern void _ZN9S20628C162v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C16__9S20628C149S20628C13__8S20628C1[] = {
  0,
  0,
  0,
  ABISELECT(-49520,-34620),
  (VTBL_ENTRY)&(_ZTI9S20628C14[0]),
  (VTBL_ENTRY)&_ZN9S20628C162v3Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v4Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v5Ev,
};
extern void _ZN9S20628C10D1Ev();
extern void _ZN9S20628C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C109S20628C13__A1__8S20628C1[] = {
  ABISELECT(-1184,-800),
  ABISELECT(-12328,-8624),
  ABISELECT(-12096,-8468),
  ABISELECT(-11552,-8084),
  ABISELECT(-12240,-8560),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&_ZN9S20628C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C10D0Ev,
};
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C129S20628C109S20628C13__A1__8S20628C1[] = {
  ABISELECT(-1184,-800),
  ABISELECT(-12328,-8624),
  ABISELECT(-12096,-8468),
  ABISELECT(-11552,-8084),
  ABISELECT(-12240,-8560),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C129S20628C109S20628C13__A1__8S20628C1[] = {
  ABISELECT(12240,8560),
  ABISELECT(12240,8560),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C129S20628C109S20628C13__A1__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(12096,8468),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C129S20628C109S20628C13__A1__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(1184,800),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C109S20628C13__A1__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(1184,800),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C109S20628C13__A1__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(12096,8468),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C109S20628C13__A1__8S20628C1[] = {
  ABISELECT(12240,8560),
  ABISELECT(12240,8560),
  (VTBL_ENTRY)&(_ZTI9S20628C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C10D1Ev,_ZTv0_n12_N9S20628C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C10D0Ev,_ZTv0_n12_N9S20628C10D0Ev),
};
extern void _ZN9S20628C15D1Ev();
extern void _ZN9S20628C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C159S20628C13__A1__8S20628C1[] = {
  ABISELECT(-18688,-13080),
  ABISELECT(-19120,-13392),
  ABISELECT(-19664,-13776),
  ABISELECT(-19680,-13784),
  ABISELECT(-19808,-13868),
  ABISELECT(-19896,-13932),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN9S20628C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C15D0Ev,
};
extern void _ZN8S20628C2D1Ev();
extern void _ZN8S20628C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C29S20628C159S20628C13__A2__8S20628C1[] = {
  ABISELECT(-18688,-13080),
  ABISELECT(-19120,-13392),
  ABISELECT(-19664,-13776),
  ABISELECT(-19680,-13784),
  ABISELECT(-19808,-13868),
  ABISELECT(-19896,-13932),
  0,
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20628C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S20628C29S20628C159S20628C13__A2__8S20628C1[] = {
  ABISELECT(19808,13868),
  ABISELECT(19808,13868),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__8S20628C29S20628C159S20628C13__A2__8S20628C1[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(19680,13784),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__8S20628C29S20628C159S20628C13__A2__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(19664,13776),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__8S20628C29S20628C159S20628C13__A2__8S20628C1[] = {
  ABISELECT(18688,13080),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(18688,13080),
  (VTBL_ENTRY)&(_ZTI8S20628C2[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C159S20628C13__A1__8S20628C1[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(19680,13784),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C159S20628C13__A1__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(19664,13776),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C159S20628C13__A1__8S20628C1[] = {
  ABISELECT(18688,13080),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(18688,13080),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D1Ev,_ZTv0_n28_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C15D0Ev,_ZTv0_n28_N9S20628C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C159S20628C13__A1__8S20628C1[] = {
  ABISELECT(19808,13868),
  ABISELECT(19808,13868),
  (VTBL_ENTRY)&(_ZTI9S20628C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D1Ev,_ZTv0_n12_N9S20628C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C15D0Ev,_ZTv0_n12_N9S20628C15D0Ev),
};
extern void _ZN9S20628C17D1Ev();
extern void _ZN9S20628C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C179S20628C13__8S20628C1[] = {
  ABISELECT(-19472,-13620),
  ABISELECT(-9536,-6648),
  ABISELECT(-20592,-14408),
  ABISELECT(-20680,-14472),
  ABISELECT(-20448,-14316),
  ABISELECT(-19904,-13932),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN9S20628C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C119S20628C179S20628C13__A1__8S20628C1[] = {
  ABISELECT(-20680,-14472),
  ABISELECT(-20448,-14316),
  ABISELECT(-19904,-13932),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C119S20628C179S20628C13__A1__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(20448,14316),
  (VTBL_ENTRY)&(_ZTI9S20628C11[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C129S20628C179S20628C13__A2__8S20628C1[] = {
  ABISELECT(-9648,-6728),
  ABISELECT(-20792,-14552),
  ABISELECT(-20560,-14396),
  ABISELECT(-20016,-14012),
  ABISELECT(-20704,-14488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C129S20628C179S20628C13__A2__8S20628C1[] = {
  ABISELECT(20704,14488),
  ABISELECT(20704,14488),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C129S20628C179S20628C13__A2__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(20560,14396),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C129S20628C179S20628C13__A2__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(9648,6728),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C179S20628C13__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(20448,14316),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void ABISELECT(_ZThn112_N9S20628C17D1Ev,_ZThn80_N9S20628C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S20628C17D0Ev,_ZThn80_N9S20628C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C12__9S20628C179S20628C13__8S20628C1[] = {
  ABISELECT(-9648,-6728),
  ABISELECT(-20792,-14552),
  ABISELECT(-20560,-14396),
  ABISELECT(-20016,-14012),
  ABISELECT(-20704,-14488),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20628C17D1Ev,_ZThn80_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S20628C17D0Ev,_ZThn80_N9S20628C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C17D1Ev,_ZTv0_n12_N9S20628C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C17D0Ev,_ZTv0_n12_N9S20628C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C179S20628C13__8S20628C1[] = {
  ABISELECT(20592,14408),
  ABISELECT(20592,14408),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C17D1Ev,_ZTv0_n12_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C17D0Ev,_ZTv0_n12_N9S20628C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__A1__9S20628C179S20628C13__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(9536,6648),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C17D1Ev,_ZTv0_n28_N9S20628C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20628C17D0Ev,_ZTv0_n28_N9S20628C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C179S20628C13__8S20628C1[] = {
  ABISELECT(19472,13620),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(19472,13620),
  (VTBL_ENTRY)&(_ZTI9S20628C17[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C17D1Ev,_ZTv0_n28_N9S20628C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C17D0Ev,_ZTv0_n28_N9S20628C17D0Ev),
};
extern void _ZN9S20628C12D1Ev();
extern void _ZN9S20628C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C129S20628C13__A3__8S20628C1[] = {
  ABISELECT(-19280,-13468),
  ABISELECT(-30424,-21292),
  ABISELECT(-30192,-21136),
  ABISELECT(-29648,-20752),
  ABISELECT(-30336,-21228),
  0,
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN9S20628C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20628C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S20628C129S20628C13__A3__8S20628C1[] = {
  ABISELECT(30336,21228),
  ABISELECT(30336,21228),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C129S20628C13__A3__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(30192,21136),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C129S20628C13__A3__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(19280,13468),
  (VTBL_ENTRY)&(_ZTI9S20628C12[0]),
};
extern void ABISELECT(_ZThn128_N9S20628C13D1Ev,_ZThn84_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn128_N9S20628C13D0Ev,_ZThn84_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C159S20628C14__9S20628C13__8S20628C1[] = {
  ABISELECT(-10176,-7136),
  ABISELECT(-10608,-7448),
  ABISELECT(-11152,-7832),
  ABISELECT(-11168,-7840),
  ABISELECT(-11296,-7924),
  ABISELECT(-11384,-7988),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C13D1Ev,_ZThn84_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S20628C13D0Ev,_ZThn84_N9S20628C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20628C5__9S20628C13__8S20628C1[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(11040,7756),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
};
extern void _ZN8S20628C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20628C6__9S20628C13__8S20628C1[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(11024,7748),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
};
extern void _ZN8S20628C62v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S20628C13D1Ev,_ZTv0_n28_N9S20628C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20628C13D0Ev,_ZTv0_n28_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C9__9S20628C13__8S20628C1[] = {
  ABISELECT(10048,7052),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(10048,7052),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&_ZN8S20628C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C13D1Ev,_ZTv0_n28_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20628C13D0Ev,_ZTv0_n28_N9S20628C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20628C13D1Ev,_ZTv0_n12_N9S20628C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20628C13D0Ev,_ZTv0_n12_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__9S20628C13__8S20628C1[] = {
  ABISELECT(11168,7840),
  ABISELECT(11168,7840),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C13D1Ev,_ZTv0_n12_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20628C13D0Ev,_ZTv0_n12_N9S20628C13D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S20628C13D1Ev,_ZTv0_n36_N9S20628C13D1Ev)();
extern void ABISELECT(_ZTv0_n72_N9S20628C13D0Ev,_ZTv0_n36_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20628C2__A1__9S20628C13__8S20628C1[] = {
  ABISELECT(11888,8348),
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  ABISELECT(11888,8348),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C13D1Ev,_ZTv0_n36_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20628C13D0Ev,_ZTv0_n36_N9S20628C13D0Ev),
};
extern void _ZN9S20628C162v3Ev();
extern void _ZN9S20628C162v4Ev();
extern void _ZN9S20628C162v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20628C16__9S20628C13__8S20628C1[] = {
  0,
  0,
  0,
  ABISELECT(-49520,-34620),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&_ZN9S20628C162v3Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v4Ev,
  (VTBL_ENTRY)&_ZN9S20628C162v5Ev,
};
extern void ABISELECT(_ZThn1072_N9S20628C13D1Ev,_ZThn720_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn1072_N9S20628C13D0Ev,_ZThn720_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C10__9S20628C13__8S20628C1[] = {
  ABISELECT(-1184,-800),
  ABISELECT(-12328,-8624),
  ABISELECT(-12096,-8468),
  ABISELECT(-11552,-8084),
  ABISELECT(-12240,-8560),
  ABISELECT(-1072,-720),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S20628C13D1Ev,_ZThn720_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S20628C13D0Ev,_ZThn720_N9S20628C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20628C11__9S20628C13__8S20628C1[] = {
  ABISELECT(-11144,-7824),
  ABISELECT(-10912,-7668),
  ABISELECT(-10368,-7284),
  ABISELECT(112,80),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
};
extern void ABISELECT(_ZThn8640_N9S20628C13D1Ev,_ZThn6028_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn8640_N9S20628C13D0Ev,_ZThn6028_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C15__A1__9S20628C13__8S20628C1[] = {
  ABISELECT(-18688,-13080),
  ABISELECT(-19120,-13392),
  ABISELECT(-19664,-13776),
  ABISELECT(-19680,-13784),
  ABISELECT(-19808,-13868),
  ABISELECT(-19896,-13932),
  ABISELECT(-8640,-6028),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N9S20628C13D1Ev,_ZThn6028_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N9S20628C13D0Ev,_ZThn6028_N9S20628C13D0Ev),
};
extern void ABISELECT(_ZThn9424_N9S20628C13D1Ev,_ZThn6568_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn9424_N9S20628C13D0Ev,_ZThn6568_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C17__9S20628C13__8S20628C1[] = {
  ABISELECT(-19472,-13620),
  ABISELECT(-9536,-6648),
  ABISELECT(-20592,-14408),
  ABISELECT(-20680,-14472),
  ABISELECT(-20448,-14316),
  ABISELECT(-19904,-13932),
  ABISELECT(-9424,-6568),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N9S20628C13D1Ev,_ZThn6568_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N9S20628C13D0Ev,_ZThn6568_N9S20628C13D0Ev),
};
extern void ABISELECT(_ZThn9536_N9S20628C13D1Ev,_ZThn6648_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn9536_N9S20628C13D0Ev,_ZThn6648_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C129S20628C17__A1__9S20628C13__8S20628C1[] = {
  ABISELECT(-9648,-6728),
  ABISELECT(-20792,-14552),
  ABISELECT(-20560,-14396),
  ABISELECT(-20016,-14012),
  ABISELECT(-20704,-14488),
  ABISELECT(-9536,-6648),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N9S20628C13D1Ev,_ZThn6648_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N9S20628C13D0Ev,_ZThn6648_N9S20628C13D0Ev),
};
extern void ABISELECT(_ZThn19168_N9S20628C13D1Ev,_ZThn13388_N9S20628C13D1Ev)();
extern void ABISELECT(_ZThn19168_N9S20628C13D0Ev,_ZThn13388_N9S20628C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20628C12__A2__9S20628C13__8S20628C1[] = {
  ABISELECT(-19280,-13468),
  ABISELECT(-30424,-21292),
  ABISELECT(-30192,-21136),
  ABISELECT(-29648,-20752),
  ABISELECT(-30336,-21228),
  ABISELECT(-19168,-13388),
  (VTBL_ENTRY)&(_ZTI9S20628C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N9S20628C13D1Ev,_ZThn13388_N9S20628C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N9S20628C13D0Ev,_ZThn13388_N9S20628C13D0Ev),
};
static  VTT_ENTRY vtt_S20628C1[] = {
  {&(_ZTV8S20628C1[13]),  13,154},
  {&(_tg__ZTV9S20628C12__A4__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C12__A4__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C12__A4__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C12__A4__8S20628C1[5]),  5,5},
  {&(_ZTV8S20628C1[25]),  25,154},
  {&(_ZTV8S20628C1[30]),  30,154},
  {&(_ZTV8S20628C1[37]),  37,154},
  {&(_ZTV8S20628C1[41]),  41,154},
  {&(_ZTV8S20628C1[49]),  49,154},
  {&(_ZTV8S20628C1[60]),  60,154},
  {&(_ZTV8S20628C1[67]),  67,154},
  {&(_ZTV8S20628C1[83]),  83,154},
  {&(_ZTV8S20628C1[97]),  97,154},
  {&(_ZTV8S20628C1[151]),  151,154},
  {&(_ZTV8S20628C1[106]),  106,154},
  {&(_ZTV8S20628C1[116]),  116,154},
  {&(_ZTV8S20628C1[126]),  126,154},
  {&(_ZTV8S20628C1[135]),  135,154},
  {&(_ZTV8S20628C1[144]),  144,154},
  {&(_tg__ZTV8S20628C2__8S20628C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C2__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C2__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C2__8S20628C1[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C2__8S20628C1[7]),  7,10},
  {&(_tg__ZTV8S20628C5__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C5__8S20628C1[4]),  4,5},
  {&(_tg__ZTV8S20628C6__8S20628C1[3]),  3,4},
  {&(_tg__ZTV8S20628C9__8S20628C1[5]),  5,8},
  {&(_tg__ZTV8S20628C68S20628C9__A1__8S20628C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S20628C9__8S20628C1[3]),  3,5},
  {&(_tg__ZTV9S20628C10__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20628C129S20628C10__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C129S20628C10__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C129S20628C10__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C129S20628C10__8S20628C1[5]),  5,5},
  {&(_tg__ZTV9S20628C11__9S20628C10__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C10__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__9S20628C10__8S20628C1[3]),  3,5},
  {&(_tg__ZTV9S20628C11__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C11__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20628C13__8S20628C1[11]),  11,17},
  {&(_tg__ZTV9S20628C149S20628C13__8S20628C1[10]),  10,14},
  {&(_tg__ZTV9S20628C159S20628C149S20628C13__8S20628C1[8]),  8,10},
  {&(_tg__ZTV8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C29S20628C159S20628C149S20628C13__A1__8S20628C1[7]),  7,10},
  {&(_tg__ZTV8S20628C5__9S20628C159S20628C149S20628C13__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C159S20628C149S20628C13__8S20628C1[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C159S20628C149S20628C13__8S20628C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20628C159S20628C149S20628C13__8S20628C1[3]),  3,5},
  {&(_tg__ZTV9S20628C15__9S20628C149S20628C13__8S20628C1[8]),  8,10},
  {&(_tg__ZTV8S20628C5__9S20628C149S20628C13__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C149S20628C13__8S20628C1[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C149S20628C13__8S20628C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__9S20628C149S20628C13__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C2__A1__9S20628C149S20628C13__8S20628C1[9]),  9,11},
  {&(_tg__ZTV9S20628C16__9S20628C149S20628C13__8S20628C1[5]),  5,8},
  {&(_tg__ZTV9S20628C109S20628C13__A1__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20628C129S20628C109S20628C13__A1__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C129S20628C109S20628C13__A1__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C129S20628C109S20628C13__A1__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C129S20628C109S20628C13__A1__8S20628C1[5]),  5,5},
  {&(_tg__ZTV9S20628C11__9S20628C109S20628C13__A1__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C109S20628C13__A1__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__9S20628C109S20628C13__A1__8S20628C1[3]),  3,5},
  {&(_tg__ZTV9S20628C159S20628C13__A1__8S20628C1[8]),  8,10},
  {&(_tg__ZTV8S20628C29S20628C159S20628C13__A2__8S20628C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S20628C29S20628C159S20628C13__A2__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C5__8S20628C29S20628C159S20628C13__A2__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__8S20628C29S20628C159S20628C13__A2__8S20628C1[4]),  4,5},
  {&(_tg__ZTV8S20628C9__8S20628C29S20628C159S20628C13__A2__8S20628C1[7]),  7,10},
  {&(_tg__ZTV8S20628C5__9S20628C159S20628C13__A1__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C159S20628C13__A1__8S20628C1[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C159S20628C13__A1__8S20628C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__9S20628C159S20628C13__A1__8S20628C1[3]),  3,5},
  {&(_tg__ZTV9S20628C179S20628C13__8S20628C1[8]),  8,10},
  {&(_tg__ZTV9S20628C119S20628C179S20628C13__A1__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C119S20628C179S20628C13__A1__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20628C129S20628C179S20628C13__A2__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C129S20628C179S20628C13__A2__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C129S20628C179S20628C13__A2__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C129S20628C179S20628C13__A2__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C179S20628C13__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20628C12__9S20628C179S20628C13__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C179S20628C13__8S20628C1[3]),  3,5},
  {&(_tg__ZTV9S20628C11__A1__9S20628C179S20628C13__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C9__9S20628C179S20628C13__8S20628C1[7]),  7,10},
  {&(_tg__ZTV9S20628C129S20628C13__A3__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S20628C129S20628C13__A3__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C6__9S20628C129S20628C13__A3__8S20628C1[4]),  4,5},
  {&(_tg__ZTV9S20628C11__9S20628C129S20628C13__A3__8S20628C1[5]),  5,5},
  {&(_tg__ZTV9S20628C159S20628C14__9S20628C13__8S20628C1[8]),  8,10},
  {&(_tg__ZTV8S20628C5__9S20628C13__8S20628C1[5]),  5,5},
  {&(_tg__ZTV8S20628C6__9S20628C13__8S20628C1[4]),  4,5},
  {&(_tg__ZTV8S20628C9__9S20628C13__8S20628C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__9S20628C13__8S20628C1[3]),  3,5},
  {&(_tg__ZTV8S20628C2__A1__9S20628C13__8S20628C1[9]),  9,11},
  {&(_tg__ZTV9S20628C16__9S20628C13__8S20628C1[5]),  5,8},
  {&(_tg__ZTV9S20628C10__9S20628C13__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20628C11__9S20628C13__8S20628C1[5]),  5,5},
  {&(_tg__ZTV9S20628C15__A1__9S20628C13__8S20628C1[8]),  8,10},
  {&(_tg__ZTV9S20628C17__9S20628C13__8S20628C1[8]),  8,10},
  {&(_tg__ZTV9S20628C129S20628C17__A1__9S20628C13__8S20628C1[7]),  7,9},
  {&(_tg__ZTV9S20628C12__A2__9S20628C13__8S20628C1[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S20628C1[];
extern  VTBL_ENTRY _ZTV8S20628C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20628C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D0Ev,_ZTv0_n28_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N8S20628C2D0Ev,_ZThn1296_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C2D1Ev,_ZTv0_n28_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N8S20628C2D1Ev,_ZThn1296_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D0Ev,_ZTv0_n12_N8S20628C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S20628C2D0Ev,_ZThn508_N8S20628C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C2D1Ev,_ZTv0_n12_N8S20628C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S20628C2D1Ev,_ZThn508_N8S20628C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D0Ev,_ZTv0_n12_N9S20628C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5808_N9S20628C12D0Ev,_ZThn4064_N9S20628C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20628C12D1Ev,_ZTv0_n12_N9S20628C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5808_N9S20628C12D1Ev,_ZThn4064_N9S20628C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20628C1D0Ev,_ZTv0_n48_N8S20628C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16976_N8S20628C1D0Ev,_ZThn11904_N8S20628C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20628C1D1Ev,_ZTv0_n48_N8S20628C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16976_N8S20628C1D1Ev,_ZThn11904_N8S20628C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20628C1D0Ev,_ZTv0_n32_N8S20628C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9296_N8S20628C1D0Ev,_ZThn6516_N8S20628C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20628C1D1Ev,_ZTv0_n32_N8S20628C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9296_N8S20628C1D1Ev,_ZThn6516_N8S20628C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C1D0Ev,_ZTv0_n28_N8S20628C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S20628C1D0Ev,_ZThn4852_N8S20628C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20628C1D1Ev,_ZTv0_n28_N8S20628C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S20628C1D1Ev,_ZThn4852_N8S20628C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C1D0Ev,_ZTv0_n12_N8S20628C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5808_N8S20628C1D0Ev,_ZThn4064_N8S20628C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20628C1D1Ev,_ZTv0_n12_N8S20628C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5808_N8S20628C1D1Ev,_ZThn4064_N8S20628C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20628C1D0Ev,_ZTv0_n36_N8S20628C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S20628C1D0Ev,_ZThn3556_N8S20628C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20628C1D1Ev,_ZTv0_n36_N8S20628C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S20628C1D1Ev,_ZThn3556_N8S20628C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20628C1 = {  "S20628C1", // class name
  bases_S20628C1, 36,
  &(vtc_S20628C1[0]), // expected_vtbl_contents
  &(vtt_S20628C1[0]), // expected_vtt_contents
  ABISELECT(73504,51436), // object size
  NSPAIRA(_ZTI8S20628C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20628C1),154, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20628C1),107, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2974C3  {
  __tsi64 s2974c3f0[8];
  char s2974c3f1[4];
  __tsi64 s2974c3f2:7;
  int s2974c3f3;
  long double s2974c3f4;
  __tsi64 s2974c3f5;
  virtual void  v1(); // _ZN7S2974C32v1Ev
  ~S2974C3(); // tgen
  S2974C3(); // tgen
};
//SIG(-1 S2974C3) C1{ v1 FL[8] Fc[4] FL:7 Fi FD FL}


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

static void Test_S2974C3()
{
  extern Class_Descriptor cd_S2974C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S2974C3, buf);
    S2974C3 *dp, &lv = *(dp=new (buf) S2974C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S2974C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C3)");
    check_field_offset(lv, s2974c3f0, ABISELECT(8,4), "S2974C3.s2974c3f0");
    check_field_offset(lv, s2974c3f1, ABISELECT(72,68), "S2974C3.s2974c3f1");
    set_bf_and_test(lv, s2974c3f2, ABISELECT(76,72), 0, 7, 1, "S2974C3");
    set_bf_and_test(lv, s2974c3f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S2974C3");
    check_field_offset(lv, s2974c3f3, ABISELECT(80,76), "S2974C3.s2974c3f3");
    check_field_offset(lv, s2974c3f4, ABISELECT(96,80), "S2974C3.s2974c3f4");
    check_field_offset(lv, s2974c3f5, ABISELECT(112,92), "S2974C3.s2974c3f5");
    test_class_info(&lv, &cd_S2974C3);
    dp->~S2974C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C3(Test_S2974C3, "S2974C3", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN7S2974C3C1Ev();
extern void _ZN7S2974C3D1Ev();
Name_Map name_map_S2974C3[] = {
  NSPAIR(_ZN7S2974C3C1Ev),
  NSPAIR(_ZN7S2974C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2974C3[];
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY vtc_S2974C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C3[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
Class_Descriptor cd_S2974C3 = {  "S2974C3", // class name
  0,0,//no base classes
  &(vtc_S2974C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI7S2974C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2974C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2974C2  : S2974C3 {
  ::S2974C3 s2974c2f0;
  int s2974c2f1;
  ::S2974C3 s2974c2f2;
  int s2974c2f3;
  char s2974c2f4[6];
  char s2974c2f5:4;
  void *s2974c2f6;
  ::S2974C3 s2974c2f7;
  int s2974c2f8;
  virtual void  v2(); // _ZN7S2974C22v2Ev
  virtual void  v3(); // _ZN7S2974C22v3Ev
  virtual void  v4(); // _ZN7S2974C22v4Ev
  ~S2974C2(); // tgen
  S2974C2(); // tgen
};
//SIG(-1 S2974C2) C1{ BC2{ v4 FL[8] Fc[4] FL:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S2974C2 ::v2(){vfunc_called(this, "_ZN7S2974C22v2Ev");}
void  S2974C2 ::v3(){vfunc_called(this, "_ZN7S2974C22v3Ev");}
void  S2974C2 ::v4(){vfunc_called(this, "_ZN7S2974C22v4Ev");}
S2974C2 ::~S2974C2(){ note_dtor("S2974C2", this);} // tgen
S2974C2 ::S2974C2(){ note_ctor("S2974C2", this);} // tgen

static void Test_S2974C2()
{
  extern Class_Descriptor cd_S2974C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S2974C2, buf);
    S2974C2 *dp, &lv = *(dp=new (buf) S2974C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S2974C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C2)");
    check_base_class_offset(lv, (S2974C3*), 0, "S2974C2");
    check_field_offset(lv, s2974c2f0, ABISELECT(128,100), "S2974C2.s2974c2f0");
    check_field_offset(lv, s2974c2f1, ABISELECT(256,200), "S2974C2.s2974c2f1");
    check_field_offset(lv, s2974c2f2, ABISELECT(272,204), "S2974C2.s2974c2f2");
    check_field_offset(lv, s2974c2f3, ABISELECT(400,304), "S2974C2.s2974c2f3");
    check_field_offset(lv, s2974c2f4, ABISELECT(404,308), "S2974C2.s2974c2f4");
    set_bf_and_test(lv, s2974c2f5, ABISELECT(410,314), 0, 4, 1, "S2974C2");
    set_bf_and_test(lv, s2974c2f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S2974C2");
    check_field_offset(lv, s2974c2f6, ABISELECT(416,316), "S2974C2.s2974c2f6");
    check_field_offset(lv, s2974c2f7, ABISELECT(432,320), "S2974C2.s2974c2f7");
    check_field_offset(lv, s2974c2f8, ABISELECT(560,420), "S2974C2.s2974c2f8");
    test_class_info(&lv, &cd_S2974C2);
    dp->~S2974C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C2(Test_S2974C2, "S2974C2", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN7S2974C2C1Ev();
extern void _ZN7S2974C2D1Ev();
Name_Map name_map_S2974C2[] = {
  NSPAIR(_ZN7S2974C2C1Ev),
  NSPAIR(_ZN7S2974C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
static Base_Class bases_S2974C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2974C2[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY vtc_S2974C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C2[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
Class_Descriptor cd_S2974C2 = {  "S2974C2", // class name
  bases_S2974C2, 1,
  &(vtc_S2974C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI7S2974C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2974C2),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  S2974C9  : S2974C3 {
  ::S2974C3 s2974c9f0;
  ::S2974C3 s2974c9f1;
  ::S19921C7 s2974c9f2;
  virtual void  v5(); // _ZN7S2974C92v5Ev
  ~S2974C9(); // tgen
  S2974C9(); // tgen
};
//SIG(-1 S2974C9) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


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

static void Test_S2974C9()
{
  extern Class_Descriptor cd_S2974C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S2974C9, buf);
    S2974C9 *dp, &lv = *(dp=new (buf) S2974C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S2974C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C9)");
    check_base_class_offset(lv, (S2974C3*), 0, "S2974C9");
    check_field_offset(lv, s2974c9f0, ABISELECT(128,100), "S2974C9.s2974c9f0");
    check_field_offset(lv, s2974c9f1, ABISELECT(256,200), "S2974C9.s2974c9f1");
    check_field_offset(lv, s2974c9f2, ABISELECT(384,300), "S2974C9.s2974c9f2");
    test_class_info(&lv, &cd_S2974C9);
    dp->~S2974C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C9(Test_S2974C9, "S2974C9", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN7S2974C9C1Ev();
extern void _ZN7S2974C9D1Ev();
Name_Map name_map_S2974C9[] = {
  NSPAIR(_ZN7S2974C9C1Ev),
  NSPAIR(_ZN7S2974C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
static Base_Class bases_S2974C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2974C9[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY vtc_S2974C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C9[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
Class_Descriptor cd_S2974C9 = {  "S2974C9", // class name
  bases_S2974C9, 1,
  &(vtc_S2974C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI7S2974C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2974C9),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  S2974C8  : S2974C2 , virtual S19922C8 , S2974C3 , virtual S2974C9 {
  long s2974c8f0;
  long s2974c8f1;
  ~S2974C8(); // tgen
  S2974C8(); // tgen
};
//SIG(-1 S2974C8) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC6{ v6 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} BC3 VBC7{ BC3 v5 FC3 FC3 FU5} Fl Fl}


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

static void Test_S2974C8()
{
  extern Class_Descriptor cd_S2974C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,273)];
    init_test(&cd_S2974C8, buf);
    S2974C8 *dp, &lv = *(dp=new (buf) S2974C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1088), "sizeof(S2974C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C8)");
    check_base_class_offset(lv, (S2974C3*)(S2974C2*), 0, "S2974C8");
    check_base_class_offset(lv, (S2974C2*), 0, "S2974C8");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(720,532), "S2974C8");
    /*is_ambiguous_... S2974C8::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*), ABISELECT(576,424), "S2974C8");
    check_base_class_offset(lv, (S2974C3*)(S2974C9*), ABISELECT(1008,760), "S2974C8");
    check_base_class_offset(lv, (S2974C9*), ABISELECT(1008,760), "S2974C8");
    check_field_offset(lv, s2974c8f0, ABISELECT(696,524), "S2974C8.s2974c8f0");
    check_field_offset(lv, s2974c8f1, ABISELECT(704,528), "S2974C8.s2974c8f1");
    test_class_info(&lv, &cd_S2974C8);
    dp->~S2974C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C8(Test_S2974C8, "S2974C8", ABISELECT(1424,1088));

#else // __cplusplus

extern void _ZN7S2974C8C1Ev();
extern void _ZN7S2974C8D1Ev();
Name_Map name_map_S2974C8[] = {
  NSPAIR(_ZN7S2974C8C1Ev),
  NSPAIR(_ZN7S2974C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
static Base_Class bases_S2974C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2974C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C8,    ABISELECT(720,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2974C3,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2974C3,    ABISELECT(1008,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C9,    ABISELECT(1008,760), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2974C8[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY vtc_S2974C8[] = {
  ABISELECT(1008,760),
  ABISELECT(720,532),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  0,
  ABISELECT(-1008,-760),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern VTBL_ENTRY _ZTV7S2974C8[];
static  VTT_ENTRY vtt_S2974C8[] = {
  {&(_ZTV7S2974C8[4]),  4,17},
  {&(_ZTV7S2974C8[15]),  15,17},
};
extern VTBL_ENTRY _ZTI7S2974C8[];
extern  VTBL_ENTRY _ZTV7S2974C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C8[];
Class_Descriptor cd_S2974C8 = {  "S2974C8", // class name
  bases_S2974C8, 6,
  &(vtc_S2974C8[0]), // expected_vtbl_contents
  &(vtt_S2974C8[0]), // expected_vtt_contents
  ABISELECT(1424,1088), // object size
  NSPAIRA(_ZTI7S2974C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2974C8),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2974C8),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2974C7  : virtual S19922C8 , virtual S2974C8 {
  int s2974c7f0;
  void *s2974c7f1;
  unsigned char s2974c7f2:1;
  int s2974c7f3;
  int s2974c7f4;
  void *s2974c7f5;
  int s2974c7f6;
  int s2974c7f7;
  int s2974c7f8;
  int s2974c7f9[8];
  char s2974c7f10;
  virtual  ~S2974C7(); // _ZN7S2974C7D2Ev
  virtual void  v6(); // _ZN7S2974C72v6Ev
  virtual void  v7(); // _ZN7S2974C72v7Ev
  S2974C7(); // tgen
};
//SIG(-1 S2974C7) C1{ VBC2{ m Fc FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC4{ v8 FL[8] Fc[4] FL:7 Fi FD FL} FL FU3[3] Fc} VBC5{ BC6{ BC7{ v3 FL[8] Fc[4] FL:7 Fi FD FL} v4 v5 v6 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi} VBC2 BC7 VBC8{ BC7 v7 FC7 FC7 FU3} Fl Fl} vd v1 v2 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc}


 S2974C7 ::~S2974C7(){ note_dtor("S2974C7", this);}
void  S2974C7 ::v6(){vfunc_called(this, "_ZN7S2974C72v6Ev");}
void  S2974C7 ::v7(){vfunc_called(this, "_ZN7S2974C72v7Ev");}
S2974C7 ::S2974C7(){ note_ctor("S2974C7", this);} // tgen

static void Test_S2974C7()
{
  extern Class_Descriptor cd_S2974C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,292)];
    init_test(&cd_S2974C7, buf);
    S2974C7 *dp, &lv = *(dp=new (buf) S2974C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1164), "sizeof(S2974C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C7)");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(96,76), "S2974C7");
    check_base_class_offset(lv, (S19922C8*)(S2974C8*), ABISELECT(96,76), "S2974C7");
    check_base_class_offset(lv, (S2974C3*)(S2974C2*)(S2974C8*), ABISELECT(384,304), "S2974C7");
    check_base_class_offset(lv, (S2974C2*)(S2974C8*), ABISELECT(384,304), "S2974C7");
    /*is_ambiguous_... S2974C8::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C8*), ABISELECT(960,728), "S2974C7");
    check_base_class_offset(lv, (S2974C3*)(S2974C9*), ABISELECT(1104,836), "S2974C7");
    check_base_class_offset(lv, (S2974C9*)(S2974C8*), ABISELECT(1104,836), "S2974C7");
    check_base_class_offset(lv, (S2974C8*), ABISELECT(384,304), "S2974C7");
    check_field_offset(lv, s2974c7f0, ABISELECT(8,4), "S2974C7.s2974c7f0");
    check_field_offset(lv, s2974c7f1, ABISELECT(16,8), "S2974C7.s2974c7f1");
    set_bf_and_test(lv, s2974c7f2, ABISELECT(24,12), 0, 1, 1, "S2974C7");
    check_field_offset(lv, s2974c7f3, ABISELECT(28,16), "S2974C7.s2974c7f3");
    check_field_offset(lv, s2974c7f4, ABISELECT(32,20), "S2974C7.s2974c7f4");
    check_field_offset(lv, s2974c7f5, ABISELECT(40,24), "S2974C7.s2974c7f5");
    check_field_offset(lv, s2974c7f6, ABISELECT(48,28), "S2974C7.s2974c7f6");
    check_field_offset(lv, s2974c7f7, ABISELECT(52,32), "S2974C7.s2974c7f7");
    check_field_offset(lv, s2974c7f8, ABISELECT(56,36), "S2974C7.s2974c7f8");
    check_field_offset(lv, s2974c7f9, ABISELECT(60,40), "S2974C7.s2974c7f9");
    check_field_offset(lv, s2974c7f10, ABISELECT(92,72), "S2974C7.s2974c7f10");
    test_class_info(&lv, &cd_S2974C7);
    dp->~S2974C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C7(Test_S2974C7, "S2974C7", ABISELECT(1520,1164));

#else // __cplusplus

extern void _ZN7S2974C7C1Ev();
extern void _ZN7S2974C7D2Ev();
Name_Map name_map_S2974C7[] = {
  NSPAIR(_ZN7S2974C7C1Ev),
  NSPAIR(_ZN7S2974C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S2974C8;
extern VTBL_ENTRY _ZTI7S2974C8[];
extern  VTBL_ENTRY _ZTV7S2974C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C8[];
static Base_Class bases_S2974C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C8,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2974C3,    ABISELECT(384,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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(384,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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(960,728), //bcp->offset
    21, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(1104,836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C9,    ABISELECT(1104,836), //bcp->offset
    24, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2974C8,    ABISELECT(384,304), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2974C7[];
extern void _ZN7S2974C7D1Ev();
extern void _ZN7S2974C7D0Ev();
extern void _ZN7S2974C72v6Ev();
extern void _ZN7S2974C72v7Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY vtc_S2974C7[] = {
  ABISELECT(1104,836),
  ABISELECT(384,304),
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2974C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v7Ev,
  0,
  0,
  0,
  0,
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  ABISELECT(-384,-304),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(-960,-728),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  0,
  ABISELECT(-1104,-836),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern VTBL_ENTRY _ZTV7S2974C7[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__7S2974C7[] = {
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C8__7S2974C7[] = {
  0,
  0,
  ABISELECT(-720,-532),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
static  VTT_ENTRY vtt_S2974C7[] = {
  {&(_ZTV7S2974C7[5]),  5,30},
  {&(_ZTV7S2974C7[17]),  17,30},
  {&(_ZTV7S2974C7[23]),  23,30},
  {&(_ZTV7S2974C7[28]),  28,30},
  {&(_tg__ZTV7S2974C8__7S2974C7[4]),  4,8},
  {&(_tg__ZTV7S2974C9__7S2974C8__7S2974C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S2974C7[];
extern  VTBL_ENTRY _ZTV7S2974C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C7[];
Class_Descriptor cd_S2974C7 = {  "S2974C7", // class name
  bases_S2974C7, 7,
  &(vtc_S2974C7[0]), // expected_vtbl_contents
  &(vtt_S2974C7[0]), // expected_vtt_contents
  ABISELECT(1520,1164), // object size
  NSPAIRA(_ZTI7S2974C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2974C7),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2974C7),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2974C12  {
  long double s2974c12f0;
  void *s2974c12f1;
  long double s2974c12f2[8];
  void *s2974c12f3[9];
  ::S19922C12 s2974c12f4;
  int s2974c12f5;
  char s2974c12f6;
  long double s2974c12f7[4];
  char s2974c12f8;
  int s2974c12f9;
  virtual void  v12(); // _ZN8S2974C123v12Ev
  ~S2974C12(); // tgen
  S2974C12(); // tgen
};
//SIG(-1 S2974C12) C1{ v1 FD Fp FD[8] Fp[9] FC2{ m FD Fp[10] FD Fi:0 Fi FD FC3{ BC4{ v3 FL[8] Fc[4] FL:7 Fi FD FL} v2 FC4 FC4 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 Fl FD FC6{ BC4 v4 v5 v6 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi}} Fi Fc FD[4] Fc Fi}


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

static void Test_S2974C12()
{
  extern Class_Descriptor cd_S2974C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,268)];
    init_test(&cd_S2974C12, buf);
    S2974C12 *dp, &lv = *(dp=new (buf) S2974C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1068), "sizeof(S2974C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C12)");
    check_field_offset(lv, s2974c12f0, ABISELECT(16,4), "S2974C12.s2974c12f0");
    check_field_offset(lv, s2974c12f1, ABISELECT(32,16), "S2974C12.s2974c12f1");
    check_field_offset(lv, s2974c12f2, ABISELECT(48,20), "S2974C12.s2974c12f2");
    check_field_offset(lv, s2974c12f3, ABISELECT(176,116), "S2974C12.s2974c12f3");
    check_field_offset(lv, s2974c12f4, ABISELECT(256,152), "S2974C12.s2974c12f4");
    check_field_offset(lv, s2974c12f5, ABISELECT(1424,1004), "S2974C12.s2974c12f5");
    check_field_offset(lv, s2974c12f6, ABISELECT(1428,1008), "S2974C12.s2974c12f6");
    check_field_offset(lv, s2974c12f7, ABISELECT(1440,1012), "S2974C12.s2974c12f7");
    check_field_offset(lv, s2974c12f8, ABISELECT(1504,1060), "S2974C12.s2974c12f8");
    check_field_offset(lv, s2974c12f9, ABISELECT(1508,1064), "S2974C12.s2974c12f9");
    test_class_info(&lv, &cd_S2974C12);
    dp->~S2974C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C12(Test_S2974C12, "S2974C12", ABISELECT(1520,1068));

#else // __cplusplus

extern void _ZN8S2974C12C1Ev();
extern void _ZN8S2974C12D1Ev();
Name_Map name_map_S2974C12[] = {
  NSPAIR(_ZN8S2974C12C1Ev),
  NSPAIR(_ZN8S2974C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2974C12[];
extern void _ZN8S2974C123v12Ev();
static  VTBL_ENTRY vtc_S2974C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C12[0]),
  (VTBL_ENTRY)&_ZN8S2974C123v12Ev,
};
extern VTBL_ENTRY _ZTI8S2974C12[];
extern  VTBL_ENTRY _ZTV8S2974C12[];
Class_Descriptor cd_S2974C12 = {  "S2974C12", // class name
  0,0,//no base classes
  &(vtc_S2974C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1520,1068), // object size
  NSPAIRA(_ZTI8S2974C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2974C12),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  S2974C11  : S2974C3 , S2974C9 , S19922C8 {
  ::S19921C7 s2974c11f0;
  char s2974c11f1;
  char s2974c11f2;
  ::S2974C8 s2974c11f3;
  ::S2974C12 s2974c11f4;
  int s2974c11f5;
  long s2974c11f6;
  virtual void  v8(); // _ZN8S2974C112v8Ev
  virtual void  v9(); // _ZN8S2974C112v9Ev
  ~S2974C11(); // tgen
  S2974C11(); // tgen
};
//SIG(-1 S2974C11) C1{ BC2{ v3 FL[8] Fc[4] FL:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC6{ v5 FL[8] Fc[4] FL:7 Fi FD FL} FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC7{ BC8{ BC2 v6 v7 v8 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl Fl} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC11{ BC6 v10 FC6 FC6 FU4} Fc:8 Fl FD FC12{ BC6 v11 v12 v13 FC6 Fi FC6 Fi Fc[6] Fc:4 Fp FC6 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S2974C11 ::v8(){vfunc_called(this, "_ZN8S2974C112v8Ev");}
void  S2974C11 ::v9(){vfunc_called(this, "_ZN8S2974C112v9Ev");}
S2974C11 ::~S2974C11(){ note_dtor("S2974C11", this);} // tgen
S2974C11 ::S2974C11(){ note_ctor("S2974C11", this);} // tgen

static void Test_S2974C11()
{
  extern Class_Descriptor cd_S2974C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,714)];
    init_test(&cd_S2974C11, buf);
    S2974C11 *dp, &lv = *(dp=new (buf) S2974C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2852), "sizeof(S2974C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C11)");
    /*is_ambiguous_... S2974C11::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*), 0, "S2974C11");
    check_base_class_offset(lv, (S2974C3*)(S2974C9*), ABISELECT(128,100), "S2974C11");
    check_base_class_offset(lv, (S2974C9*), ABISELECT(128,100), "S2974C11");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(544,428), "S2974C11");
    check_field_offset(lv, s2974c11f0, ABISELECT(832,656), "S2974C11.s2974c11f0");
    check_field_offset(lv, s2974c11f1, ABISELECT(864,684), "S2974C11.s2974c11f1");
    check_field_offset(lv, s2974c11f2, ABISELECT(865,685), "S2974C11.s2974c11f2");
    check_field_offset(lv, s2974c11f3, ABISELECT(880,688), "S2974C11.s2974c11f3");
    check_field_offset(lv, s2974c11f4, ABISELECT(2304,1776), "S2974C11.s2974c11f4");
    check_field_offset(lv, s2974c11f5, ABISELECT(3824,2844), "S2974C11.s2974c11f5");
    check_field_offset(lv, s2974c11f6, ABISELECT(3832,2848), "S2974C11.s2974c11f6");
    test_class_info(&lv, &cd_S2974C11);
    dp->~S2974C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C11(Test_S2974C11, "S2974C11", ABISELECT(3840,2852));

#else // __cplusplus

extern void _ZN8S2974C11C1Ev();
extern void _ZN8S2974C11D1Ev();
Name_Map name_map_S2974C11[] = {
  NSPAIR(_ZN8S2974C11C1Ev),
  NSPAIR(_ZN8S2974C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S2974C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2974C3,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2974C9,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2974C11[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C112v8Ev();
extern void _ZN8S2974C112v9Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY vtc_S2974C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C11[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v9Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2974C11[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern VTBL_ENTRY _ZTI8S2974C11[];
extern  VTBL_ENTRY _ZTV8S2974C11[];
Class_Descriptor cd_S2974C11 = {  "S2974C11", // class name
  bases_S2974C11, 4,
  &(vtc_S2974C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2852), // object size
  NSPAIRA(_ZTI8S2974C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2974C11),9, //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  S2974C14  : S2974C3 , virtual S2974C2 , virtual S2974C9 , S2974C8 , S19922C8 {
  int s2974c14f0;
  virtual void  v10(); // _ZN8S2974C143v10Ev
  ~S2974C14(); // tgen
  S2974C14(); // tgen
};
//SIG(-1 S2974C14) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC8{ v7 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} BC2 VBC4 Fl Fl} BC7 v1 Fi}


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

static void Test_S2974C14()
{
  extern Class_Descriptor cd_S2974C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,462)];
    init_test(&cd_S2974C14, buf);
    S2974C14 *dp, &lv = *(dp=new (buf) S2974C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1844), "sizeof(S2974C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C14)");
    /*is_ambiguous_... S2974C14::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*), 0, "S2974C14");
    /*is_ambiguous_... S2974C14::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*), ABISELECT(1136,864), "S2974C14");
    /*is_ambiguous_... S2974C14::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C2*), ABISELECT(1136,864), "S2974C14");
    check_base_class_offset(lv, (S2974C3*)(S2974C9*), ABISELECT(1712,1288), "S2974C14");
    check_base_class_offset(lv, (S2974C9*), ABISELECT(1712,1288), "S2974C14");
    check_base_class_offset(lv, (S2974C9*)(S2974C8*), ABISELECT(1712,1288), "S2974C14");
    check_base_class_offset(lv, (S2974C3*)(S2974C2*)(S2974C8*), ABISELECT(128,100), "S2974C14");
    check_base_class_offset(lv, (S2974C2*)(S2974C8*), ABISELECT(128,100), "S2974C14");
    check_base_class_offset(lv, (S19922C8*)(S2974C8*), ABISELECT(2128,1616), "S2974C14");
    /*is_ambiguous_... S2974C8::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C8*), ABISELECT(704,524), "S2974C14");
    check_base_class_offset(lv, (S2974C8*), ABISELECT(128,100), "S2974C14");
    /*is_ambiguous_... S2974C14::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(848,632), "S2974C14");
    check_field_offset(lv, s2974c14f0, ABISELECT(1132,860), "S2974C14.s2974c14f0");
    test_class_info(&lv, &cd_S2974C14);
    dp->~S2974C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C14(Test_S2974C14, "S2974C14", ABISELECT(2416,1844));

#else // __cplusplus

extern void _ZN8S2974C14C1Ev();
extern void _ZN8S2974C14D1Ev();
Name_Map name_map_S2974C14[] = {
  NSPAIR(_ZN8S2974C14C1Ev),
  NSPAIR(_ZN8S2974C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C8;
extern VTBL_ENTRY _ZTI7S2974C8[];
extern  VTBL_ENTRY _ZTV7S2974C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C8[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S2974C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C3,    ABISELECT(1136,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(1136,864), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2974C3,    ABISELECT(1712,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2974C9,    ABISELECT(1712,1288), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2974C3,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(2128,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C3,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2974C8,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(848,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2974C14[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY vtc_S2974C14[] = {
  ABISELECT(2128,1616),
  ABISELECT(1712,1288),
  ABISELECT(1136,864),
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-864),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  0,
  0,
  ABISELECT(-1712,-1288),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern VTBL_ENTRY _ZTV8S2974C14[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__8S2974C14[] = {
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C8__8S2974C14[] = {
  0,
  0,
  ABISELECT(-1584,-1188),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
static  VTT_ENTRY vtt_S2974C14[] = {
  {&(_ZTV8S2974C14[5]),  5,34},
  {&(_tg__ZTV7S2974C8__8S2974C14[4]),  4,8},
  {&(_tg__ZTV7S2974C9__7S2974C8__8S2974C14[4]),  4,6},
  {&(_ZTV8S2974C14[24]),  24,34},
  {&(_ZTV8S2974C14[32]),  32,34},
  {&(_ZTV8S2974C14[11]),  11,34},
};
extern VTBL_ENTRY _ZTI8S2974C14[];
extern  VTBL_ENTRY _ZTV8S2974C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2974C14[];
Class_Descriptor cd_S2974C14 = {  "S2974C14", // class name
  bases_S2974C14, 11,
  &(vtc_S2974C14[0]), // expected_vtbl_contents
  &(vtt_S2974C14[0]), // expected_vtt_contents
  ABISELECT(2416,1844), // object size
  NSPAIRA(_ZTI8S2974C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2974C14),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2974C14),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2974C10  : S2974C11 , S2974C14 , S19922C12 , S19922C8 , virtual S2974C3 {
  void *s2974c10f0;
  long double s2974c10f1;
  int s2974c10f2;
  int s2974c10f3;
  char s2974c10f4[7];
  ~S2974C10(); // tgen
  S2974C10(); // tgen
};
//SIG(-1 S2974C10) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC7{ v9 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC8{ BC9{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl Fl} FC10{ v10 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC12{ BC7 v11 FC7 FC7 FU5} Fc:8 Fl FD FC13{ BC7 v12 v13 v14 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC14{ BC3 VBC9 VBC4 BC8 BC6 v8 Fi} BC11 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S2974C10()
{
  extern Class_Descriptor cd_S2974C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1478)];
    init_test(&cd_S2974C10, buf);
    S2974C10 *dp, &lv = *(dp=new (buf) S2974C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5908), "sizeof(S2974C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C10)");
    /*is_ambiguous_... S2974C11::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C11*), 0, "S2974C10");
    check_base_class_offset(lv, (S2974C3*)(S2974C9*)(S2974C11*), ABISELECT(128,100), "S2974C10");
    check_base_class_offset(lv, (S2974C9*)(S2974C11*), ABISELECT(128,100), "S2974C10");
    check_base_class_offset(lv, (S19922C8*)(S2974C11*), ABISELECT(544,428), "S2974C10");
    check_base_class_offset(lv, (S2974C11*), 0, "S2974C10");
    /*is_ambiguous_... S2974C14::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C14*), ABISELECT(3840,2852), "S2974C10");
    /*is_ambiguous_... S2974C10::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*), ABISELECT(6480,4828), "S2974C10");
    /*is_ambiguous_... S2974C14::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C2*)(S2974C14*), ABISELECT(6480,4828), "S2974C10");
    /*is_ambiguous_... S2974C10::S2974C9 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C9*), ABISELECT(7056,5252), "S2974C10");
    check_base_class_offset(lv, (S2974C9*)(S2974C14*), ABISELECT(7056,5252), "S2974C10");
    check_base_class_offset(lv, (S2974C9*)(S2974C8*)(S2974C14*), ABISELECT(7056,5252), "S2974C10");
    check_base_class_offset(lv, (S2974C3*)(S2974C2*)(S2974C8*)(S2974C14*), ABISELECT(3968,2952), "S2974C10");
    check_base_class_offset(lv, (S2974C2*)(S2974C8*)(S2974C14*), ABISELECT(3968,2952), "S2974C10");
    check_base_class_offset(lv, (S19922C8*)(S2974C8*)(S2974C14*), ABISELECT(7472,5580), "S2974C10");
    /*is_ambiguous_... S2974C8::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C8*)(S2974C14*), ABISELECT(4544,3376), "S2974C10");
    check_base_class_offset(lv, (S2974C8*)(S2974C14*), ABISELECT(3968,2952), "S2974C10");
    /*is_ambiguous_... S2974C14::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S2974C14*), ABISELECT(4688,3484), "S2974C10");
    check_base_class_offset(lv, (S2974C14*), ABISELECT(3840,2852), "S2974C10");
    check_base_class_offset(lv, (S19922C12*), ABISELECT(4976,3716), "S2974C10");
    /*is_ambiguous_... S2974C10::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(6144,4568), "S2974C10");
    /*is_ambiguous_... S2974C10::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*), ABISELECT(7760,5808), "S2974C10");
    check_field_offset(lv, s2974c10f0, ABISELECT(6432,4796), "S2974C10.s2974c10f0");
    check_field_offset(lv, s2974c10f1, ABISELECT(6448,4800), "S2974C10.s2974c10f1");
    check_field_offset(lv, s2974c10f2, ABISELECT(6464,4812), "S2974C10.s2974c10f2");
    check_field_offset(lv, s2974c10f3, ABISELECT(6468,4816), "S2974C10.s2974c10f3");
    check_field_offset(lv, s2974c10f4, ABISELECT(6472,4820), "S2974C10.s2974c10f4");
    test_class_info(&lv, &cd_S2974C10);
    dp->~S2974C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C10(Test_S2974C10, "S2974C10", ABISELECT(7888,5908));

#else // __cplusplus

extern void _ZN8S2974C10C1Ev();
extern void _ZN8S2974C10D1Ev();
Name_Map name_map_S2974C10[] = {
  NSPAIR(_ZN8S2974C10C1Ev),
  NSPAIR(_ZN8S2974C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C11;
extern VTBL_ENTRY _ZTI8S2974C11[];
extern  VTBL_ENTRY _ZTV8S2974C11[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C8;
extern VTBL_ENTRY _ZTI7S2974C8[];
extern  VTBL_ENTRY _ZTV7S2974C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C8[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C14;
extern VTBL_ENTRY _ZTI8S2974C14[];
extern  VTBL_ENTRY _ZTV8S2974C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2974C14[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
static Base_Class bases_S2974C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2974C3,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2974C9,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2974C3,    ABISELECT(3840,2852), //bcp->offset
    -1, //bcp->virtual_function_table_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_S2974C3,    ABISELECT(6480,4828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C2,    ABISELECT(6480,4828), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2974C3,    ABISELECT(7056,5252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C9,    ABISELECT(7056,5252), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2974C3,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7472,5580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C3,    ABISELECT(4544,3376), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2974C8,    ABISELECT(3968,2952), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(4688,3484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C14,    ABISELECT(3840,2852), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C12,    ABISELECT(4976,3716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(6144,4568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2974C3,    ABISELECT(7760,5808), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2974C10[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C112v8Ev();
extern void _ZN8S2974C112v9Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY vtc_S2974C10[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v9Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(-4544,-3376),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S2974C10[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C14__8S2974C10[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C88S2974C14__8S2974C10[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C88S2974C14__8S2974C10[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C2__8S2974C14__8S2974C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__8S2974C14__8S2974C10[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__8S2974C14__8S2974C10[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
static  VTT_ENTRY vtt_S2974C10[] = {
  {&(_ZTV8S2974C10[6]),  6,51},
  {&(_tg__ZTV8S2974C14__8S2974C10[5]),  5,7},
  {&(_tg__ZTV7S2974C88S2974C14__8S2974C10[4]),  4,8},
  {&(_tg__ZTV7S2974C9__7S2974C88S2974C14__8S2974C10[4]),  4,6},
  {&(_tg__ZTV7S2974C2__8S2974C14__8S2974C10[6]),  6,10},
  {&(_tg__ZTV7S2974C9__8S2974C14__8S2974C10[4]),  4,6},
  {&(_tg__ZTV7S2974C8__8S2974C14__8S2974C10[4]),  4,8},
  {&(_ZTV8S2974C10[18]),  18,51},
  {&(_ZTV8S2974C10[37]),  37,51},
  {&(_ZTV8S2974C10[45]),  45,51},
  {&(_ZTV8S2974C10[24]),  24,51},
  {&(_ZTV8S2974C10[50]),  50,51},
};
extern VTBL_ENTRY _ZTI8S2974C10[];
extern  VTBL_ENTRY _ZTV8S2974C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2974C10[];
Class_Descriptor cd_S2974C10 = {  "S2974C10", // class name
  bases_S2974C10, 20,
  &(vtc_S2974C10[0]), // expected_vtbl_contents
  &(vtt_S2974C10[0]), // expected_vtt_contents
  ABISELECT(7888,5908), // object size
  NSPAIRA(_ZTI8S2974C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2974C10),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2974C10),12, //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  S2974C4  : S2974C3 , virtual S19922C8 , S2974C2 , S2974C7 , S2974C10 {
  __tsi64 s2974c4f0;
  char s2974c4f1:2;
  long s2974c4f2;
  ::S2974C9 s2974c4f3;
  __tsi64 s2974c4f4[2];
  virtual  ~S2974C4(); // _ZN7S2974C4D2Ev
  virtual void  v11(); // _ZN7S2974C43v11Ev
  S2974C4(); // tgen
};
//SIG(-1 S2974C4) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} VBC3{ m Fc FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC5{ v12 FL[8] Fc[4] FL:7 Fi FD FL} FL FU4[3] Fc} BC6{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} BC7{ VBC3 VBC8{ BC6 VBC3 BC2 VBC9{ BC2 v6 FC2 FC2 FU4} Fl Fl} vd v7 v8 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} BC10{ BC11{ BC2 BC9 BC3 v9 v10 FU4 Fc Fc FC8 FC12{ v13 FD Fp FD[8] Fp[9] FC13{ m FD Fp[10] FD Fi:0 Fi FD FC14{ BC5 v14 FC5 FC5 FU4} Fc:8 Fl FD FC15{ BC5 v15 v16 v17 FC5 Fi FC5 Fi Fc[6] Fc:4 Fp FC5 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC16{ BC2 VBC6 VBC9 BC8 BC3 v11 Fi} BC13 BC3 VBC2 Fp FD Fi Fi Fc[7]} vd v1 FL Fc:2 Fl FC9 FL[2]}


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

static void Test_S2974C4()
{
  extern Class_Descriptor cd_S2974C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(618,1851)];
    init_test(&cd_S2974C4, buf);
    S2974C4 *dp, &lv = *(dp=new (buf) S2974C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9872,7400), "sizeof(S2974C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C4)");
    /*is_ambiguous_... S2974C4::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*), 0, "S2974C4");
    /*is_ambiguous_... S2974C4::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(7744,5788), "S2974C4");
    check_base_class_offset(lv, (S19922C8*)(S2974C7*), ABISELECT(7744,5788), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S2974C8*), ABISELECT(7744,5788), "S2974C4");
    check_base_class_offset(lv, (S19922C8*)(S2974C8*)(S2974C14*)(S2974C10*), ABISELECT(7744,5788), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*), ABISELECT(128,100), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C2*), ABISELECT(128,100), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C8 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*)(S2974C8*), ABISELECT(8032,6016), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C8 */ AMB_check_base_class_offset(lv, (S2974C2*)(S2974C8*), ABISELECT(8032,6016), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C8 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C8*), ABISELECT(8608,6440), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C9 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C9*), ABISELECT(8752,6548), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C8 */ AMB_check_base_class_offset(lv, (S2974C9*)(S2974C8*), ABISELECT(8752,6548), "S2974C4");
    check_base_class_offset(lv, (S2974C9*)(S2974C14*)(S2974C10*), ABISELECT(8752,6548), "S2974C4");
    check_base_class_offset(lv, (S2974C9*)(S2974C8*)(S2974C14*)(S2974C10*), ABISELECT(8752,6548), "S2974C4");
    check_base_class_offset(lv, (S2974C8*)(S2974C7*), ABISELECT(8032,6016), "S2974C4");
    check_base_class_offset(lv, (S2974C7*), ABISELECT(696,524), "S2974C4");
    /*is_ambiguous_... S2974C11::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C11*)(S2974C10*), ABISELECT(800,600), "S2974C4");
    check_base_class_offset(lv, (S2974C3*)(S2974C9*)(S2974C11*)(S2974C10*), ABISELECT(928,700), "S2974C4");
    check_base_class_offset(lv, (S2974C9*)(S2974C11*)(S2974C10*), ABISELECT(928,700), "S2974C4");
    check_base_class_offset(lv, (S19922C8*)(S2974C11*)(S2974C10*), ABISELECT(1344,1028), "S2974C4");
    check_base_class_offset(lv, (S2974C11*)(S2974C10*), ABISELECT(800,600), "S2974C4");
    /*is_ambiguous_... S2974C14::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C14*)(S2974C10*), ABISELECT(4640,3452), "S2974C4");
    /*is_ambiguous_... S2974C4::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*), ABISELECT(9168,6876), "S2974C4");
    /*is_ambiguous_... S2974C14::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C2*)(S2974C14*)(S2974C10*), ABISELECT(9168,6876), "S2974C4");
    check_base_class_offset(lv, (S2974C3*)(S2974C2*)(S2974C8*)(S2974C14*)(S2974C10*), ABISELECT(4768,3552), "S2974C4");
    check_base_class_offset(lv, (S2974C2*)(S2974C8*)(S2974C14*)(S2974C10*), ABISELECT(4768,3552), "S2974C4");
    /*is_ambiguous_... S2974C8::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C8*)(S2974C14*)(S2974C10*), ABISELECT(5344,3976), "S2974C4");
    check_base_class_offset(lv, (S2974C8*)(S2974C14*)(S2974C10*), ABISELECT(4768,3552), "S2974C4");
    /*is_ambiguous_... S2974C14::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S2974C14*)(S2974C10*), ABISELECT(5488,4084), "S2974C4");
    check_base_class_offset(lv, (S2974C14*)(S2974C10*), ABISELECT(4640,3452), "S2974C4");
    check_base_class_offset(lv, (S19922C12*)(S2974C10*), ABISELECT(5776,4316), "S2974C4");
    /*is_ambiguous_... S2974C10::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S2974C10*), ABISELECT(6944,5168), "S2974C4");
    /*is_ambiguous_... S2974C10::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C10*), ABISELECT(9744,7300), "S2974C4");
    check_base_class_offset(lv, (S2974C10*), ABISELECT(800,600), "S2974C4");
    check_field_offset(lv, s2974c4f0, ABISELECT(7280,5428), "S2974C4.s2974c4f0");
    set_bf_and_test(lv, s2974c4f1, ABISELECT(7288,5436), 0, 2, 1, "S2974C4");
    set_bf_and_test(lv, s2974c4f1, ABISELECT(7288,5436), 0, 2, hide_sll(1LL<<1), "S2974C4");
    check_field_offset(lv, s2974c4f2, ABISELECT(7296,5440), "S2974C4.s2974c4f2");
    check_field_offset(lv, s2974c4f3, ABISELECT(7312,5444), "S2974C4.s2974c4f3");
    check_field_offset(lv, s2974c4f4, ABISELECT(7728,5772), "S2974C4.s2974c4f4");
    test_class_info(&lv, &cd_S2974C4);
    dp->~S2974C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C4(Test_S2974C4, "S2974C4", ABISELECT(9872,7400));

#else // __cplusplus

extern void _ZN7S2974C4C1Ev();
extern void _ZN7S2974C4D2Ev();
Name_Map name_map_S2974C4[] = {
  NSPAIR(_ZN7S2974C4C1Ev),
  NSPAIR(_ZN7S2974C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S2974C8;
extern VTBL_ENTRY _ZTI7S2974C8[];
extern  VTBL_ENTRY _ZTV7S2974C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C8[];
extern Class_Descriptor cd_S2974C7;
extern VTBL_ENTRY _ZTI7S2974C7[];
extern  VTBL_ENTRY _ZTV7S2974C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C7[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C11;
extern VTBL_ENTRY _ZTI8S2974C11[];
extern  VTBL_ENTRY _ZTV8S2974C11[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C8;
extern VTBL_ENTRY _ZTI7S2974C8[];
extern  VTBL_ENTRY _ZTV7S2974C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C8[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C14;
extern VTBL_ENTRY _ZTI8S2974C14[];
extern  VTBL_ENTRY _ZTV8S2974C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2974C14[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C10;
extern VTBL_ENTRY _ZTI8S2974C10[];
extern  VTBL_ENTRY _ZTV8S2974C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2974C10[];
static Base_Class bases_S2974C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C8,    ABISELECT(7744,5788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2974C3,    ABISELECT(128,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
    11, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(128,100), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2974C3,    ABISELECT(8032,6016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C2,    ABISELECT(8032,6016), //bcp->offset
    -1, //bcp->virtual_function_table_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_S2974C3,    ABISELECT(8608,6440), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(8752,6548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C9,    ABISELECT(8752,6548), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 1},
  {&cd_S2974C8,    ABISELECT(8032,6016), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2974C7,    ABISELECT(696,524), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2974C3,    ABISELECT(800,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
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(928,700), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S2974C9,    ABISELECT(928,700), //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
    16, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(1344,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2974C11,    ABISELECT(800,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
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(4640,3452), //bcp->offset
    -1, //bcp->virtual_function_table_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_S2974C3,    ABISELECT(9168,6876), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(9168,6876), //bcp->offset
    78, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2974C3,    ABISELECT(4768,3552), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(4768,3552), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(5344,3976), //bcp->offset
    54, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S2974C8,    ABISELECT(4768,3552), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(5488,4084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C14,    ABISELECT(4640,3452), //bcp->offset
    39, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(5776,4316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(6944,5168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C3,    ABISELECT(9744,7300), //bcp->offset
    88, //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
    9, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2974C10,    ABISELECT(800,600), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2974C4[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C4D1Ev();
extern void _ZN7S2974C4D0Ev();
extern void _ZN7S2974C43v11Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void ABISELECT(_ZThn696_N7S2974C4D1Ev,_ZThn524_N7S2974C4D1Ev)();
extern void ABISELECT(_ZThn696_N7S2974C4D0Ev,_ZThn524_N7S2974C4D0Ev)();
extern void _ZN7S2974C72v6Ev();
extern void _ZN7S2974C72v7Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C112v8Ev();
extern void _ZN8S2974C112v9Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY vtc_S2974C4[] = {
  ABISELECT(9744,7300),
  ABISELECT(9168,6876),
  ABISELECT(8752,6548),
  ABISELECT(8032,6016),
  ABISELECT(7744,5788),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2974C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2974C43v11Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(8056,6024),
  ABISELECT(7336,5492),
  ABISELECT(7048,5264),
  ABISELECT(-696,-524),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn696_N7S2974C4D1Ev,_ZThn524_N7S2974C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn696_N7S2974C4D0Ev,_ZThn524_N7S2974C4D0Ev),
  (VTBL_ENTRY)&_ZN7S2974C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v7Ev,
  ABISELECT(8944,6700),
  ABISELECT(6944,5188),
  ABISELECT(7952,5948),
  ABISELECT(8368,6276),
  ABISELECT(-800,-600),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v9Ev,
  ABISELECT(-928,-700),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
  ABISELECT(3104,2336),
  ABISELECT(4112,3096),
  ABISELECT(4528,3424),
  ABISELECT(-4640,-3452),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  ABISELECT(-4768,-3552),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(-5344,-3976),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  ABISELECT(-8032,-6016),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(-8608,-6440),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  0,
  ABISELECT(-8752,-6548),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9168,-6876),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  0,
  ABISELECT(-9744,-7300),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S2974C4[];
extern void _ZN7S2974C7D1Ev();
extern void _ZN7S2974C7D0Ev();
extern void _ZN7S2974C72v6Ev();
extern void _ZN7S2974C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C7__7S2974C4[] = {
  ABISELECT(8056,6024),
  ABISELECT(7336,5492),
  ABISELECT(7048,5264),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2974C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v7Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__7S2974C7__7S2974C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  ABISELECT(-7336,-5492),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C37S2974C8__A1__7S2974C7__7S2974C4[] = {
  ABISELECT(-7912,-5916),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C7__7S2974C4[] = {
  0,
  0,
  ABISELECT(-8056,-6024),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C112v8Ev();
extern void _ZN8S2974C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C10__7S2974C4[] = {
  ABISELECT(8944,6700),
  ABISELECT(6944,5188),
  ABISELECT(7952,5948),
  ABISELECT(8368,6276),
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v9Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C148S2974C10__7S2974C4[] = {
  ABISELECT(3104,2336),
  ABISELECT(4112,3096),
  ABISELECT(4528,3424),
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C88S2974C148S2974C10__A1__7S2974C4[] = {
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C88S2974C148S2974C10__A1__7S2974C4[] = {
  0,
  0,
  ABISELECT(-3984,-2996),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C2__8S2974C148S2974C10__7S2974C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-4528,-3424),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__8S2974C148S2974C10__7S2974C4[] = {
  0,
  0,
  ABISELECT(-4112,-3096),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__8S2974C148S2974C10__7S2974C4[] = {
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C14__8S2974C10__7S2974C4[] = {
  ABISELECT(3104,2336),
  ABISELECT(4112,3096),
  ABISELECT(4528,3424),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C2__8S2974C10__7S2974C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-8368,-6276),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__A1__8S2974C10__7S2974C4[] = {
  0,
  0,
  ABISELECT(-7952,-5948),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C88S2974C14__8S2974C10__7S2974C4[] = {
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C3__A7__8S2974C10__7S2974C4[] = {
  0,
  ABISELECT(-8944,-6700),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__7S2974C4[] = {
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C8__7S2974C4[] = {
  0,
  0,
  ABISELECT(-720,-532),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
static  VTT_ENTRY vtt_S2974C4[] = {
  {&(_ZTV7S2974C4[7]),  7,92},
  {&(_tg__ZTV7S2974C7__7S2974C4[5]),  5,9},
  {&(_tg__ZTV7S2974C8__7S2974C7__7S2974C4[8]),  8,12},
  {&(_tg__ZTV7S2974C37S2974C8__A1__7S2974C7__7S2974C4[2]),  2,3},
  {&(_tg__ZTV7S2974C9__7S2974C7__7S2974C4[4]),  4,6},
  {&(_tg__ZTV8S2974C10__7S2974C4[6]),  6,9},
  {&(_tg__ZTV8S2974C148S2974C10__7S2974C4[5]),  5,7},
  {&(_tg__ZTV7S2974C88S2974C148S2974C10__A1__7S2974C4[4]),  4,8},
  {&(_tg__ZTV7S2974C9__7S2974C88S2974C148S2974C10__A1__7S2974C4[4]),  4,6},
  {&(_tg__ZTV7S2974C2__8S2974C148S2974C10__7S2974C4[6]),  6,10},
  {&(_tg__ZTV7S2974C9__8S2974C148S2974C10__7S2974C4[4]),  4,6},
  {&(_tg__ZTV7S2974C8__8S2974C148S2974C10__7S2974C4[4]),  4,8},
  {&(_tg__ZTV8S2974C14__8S2974C10__7S2974C4[5]),  5,7},
  {&(_tg__ZTV7S2974C2__8S2974C10__7S2974C4[6]),  6,10},
  {&(_tg__ZTV7S2974C9__A1__8S2974C10__7S2974C4[4]),  4,6},
  {&(_tg__ZTV7S2974C88S2974C14__8S2974C10__7S2974C4[4]),  4,8},
  {&(_tg__ZTV7S2974C3__A7__8S2974C10__7S2974C4[3]),  3,4},
  {&(_ZTV7S2974C4[22]),  22,92},
  {&(_ZTV7S2974C4[65]),  65,92},
  {&(_ZTV7S2974C4[71]),  71,92},
  {&(_ZTV7S2974C4[76]),  76,92},
  {&(_ZTV7S2974C4[32]),  32,92},
  {&(_ZTV7S2974C4[44]),  44,92},
  {&(_ZTV7S2974C4[84]),  84,92},
  {&(_ZTV7S2974C4[50]),  50,92},
  {&(_ZTV7S2974C4[91]),  91,92},
  {&(_tg__ZTV7S2974C8__7S2974C4[4]),  4,8},
  {&(_tg__ZTV7S2974C9__7S2974C8__7S2974C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S2974C4[];
extern  VTBL_ENTRY _ZTV7S2974C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C4[];
Class_Descriptor cd_S2974C4 = {  "S2974C4", // class name
  bases_S2974C4, 29,
  &(vtc_S2974C4[0]), // expected_vtbl_contents
  &(vtt_S2974C4[0]), // expected_vtt_contents
  ABISELECT(9872,7400), // object size
  NSPAIRA(_ZTI7S2974C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2974C4),92, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2974C4),28, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2974C15  : S2974C12 {
  ::S2974C4 s2974c15f0;
  int s2974c15f1;
  char s2974c15f2;
  int s2974c15f3;
  long double s2974c15f4;
  long s2974c15f5[4];
  __tsi64 s2974c15f6:52;
  long s2974c15f7;
  int s2974c15f8;
  short s2974c15f9;
  short s2974c15f10;
  ::S19922C8 s2974c15f11;
  virtual  ~S2974C15(); // _ZN8S2974C15D1Ev
  S2974C15(); // tgen
};
//SIG(-1 S2974C15) C1{ BC2{ v1 FD Fp FD[8] Fp[9] FC3{ m FD Fp[10] FD Fi:0 Fi FD FC4{ BC5{ v3 FL[8] Fc[4] FL:7 Fi FD FL} v2 FC5 FC5 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 Fl FD FC7{ BC5 v4 v5 v6 FC5 Fi FC5 Fi Fc[6] Fc:4 Fp FC5 Fi}} Fi Fc FD[4] Fc Fi} vd FC8{ BC9{ v8 FL[8] Fc[4] FL:7 Fi FD FL} VBC10{ m Fc FU6 FC5 FL FU6[3] Fc} BC11{ BC9 v9 v10 v11 FC9 Fi FC9 Fi Fc[6] Fc:4 Fp FC9 Fi} BC12{ VBC10 VBC13{ BC11 VBC10 BC9 VBC14{ BC9 v12 FC9 FC9 FU6} Fl Fl} vd v13 v14 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} BC15{ BC16{ BC9 BC14 BC10 v15 v16 FU6 Fc Fc FC13 FC2 Fi Fl} BC17{ BC9 VBC11 VBC14 BC13 BC10 v17 Fi} BC3 BC10 VBC9 Fp FD Fi Fi Fc[7]} vd v7 FL Fc:2 Fl FC14 FL[2]} Fi Fc Fi FD Fl[4] FL:52 Fl Fi Fs Fs FC10}


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

static void Test_S2974C15()
{
  extern Class_Descriptor cd_S2974C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(737,2190)];
    init_test(&cd_S2974C15, buf);
    S2974C15 *dp, &lv = *(dp=new (buf) S2974C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11776,8756), "sizeof(S2974C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C15)");
    check_base_class_offset(lv, (S2974C12*), 0, "S2974C15");
    check_field_offset(lv, s2974c15f0, ABISELECT(1520,1068), "S2974C15.s2974c15f0");
    check_field_offset(lv, s2974c15f1, ABISELECT(11392,8468), "S2974C15.s2974c15f1");
    check_field_offset(lv, s2974c15f2, ABISELECT(11396,8472), "S2974C15.s2974c15f2");
    check_field_offset(lv, s2974c15f3, ABISELECT(11400,8476), "S2974C15.s2974c15f3");
    check_field_offset(lv, s2974c15f4, ABISELECT(11408,8480), "S2974C15.s2974c15f4");
    check_field_offset(lv, s2974c15f5, ABISELECT(11424,8492), "S2974C15.s2974c15f5");
    set_bf_and_test(lv, s2974c15f6, ABISELECT(11456,8508), 0, 52, 1, "S2974C15");
    set_bf_and_test(lv, s2974c15f6, ABISELECT(11456,8508), 0, 52, hide_sll(1LL<<51), "S2974C15");
    check_field_offset(lv, s2974c15f7, ABISELECT(11464,8516), "S2974C15.s2974c15f7");
    check_field_offset(lv, s2974c15f8, ABISELECT(11472,8520), "S2974C15.s2974c15f8");
    check_field_offset(lv, s2974c15f9, ABISELECT(11476,8524), "S2974C15.s2974c15f9");
    check_field_offset(lv, s2974c15f10, ABISELECT(11478,8526), "S2974C15.s2974c15f10");
    check_field_offset(lv, s2974c15f11, ABISELECT(11488,8528), "S2974C15.s2974c15f11");
    test_class_info(&lv, &cd_S2974C15);
    dp->~S2974C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C15(Test_S2974C15, "S2974C15", ABISELECT(11776,8756));

#else // __cplusplus

extern void _ZN8S2974C15C1Ev();
extern void _ZN8S2974C15D1Ev();
Name_Map name_map_S2974C15[] = {
  NSPAIR(_ZN8S2974C15C1Ev),
  NSPAIR(_ZN8S2974C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C12;
extern VTBL_ENTRY _ZTI8S2974C12[];
extern  VTBL_ENTRY _ZTV8S2974C12[];
static Base_Class bases_S2974C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2974C15[];
extern void _ZN8S2974C123v12Ev();
extern void _ZN8S2974C15D1Ev();
extern void _ZN8S2974C15D0Ev();
static  VTBL_ENTRY vtc_S2974C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C15[0]),
  (VTBL_ENTRY)&_ZN8S2974C123v12Ev,
  (VTBL_ENTRY)&_ZN8S2974C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2974C15D0Ev,
};
extern VTBL_ENTRY _ZTI8S2974C15[];
extern  VTBL_ENTRY _ZTV8S2974C15[];
Class_Descriptor cd_S2974C15 = {  "S2974C15", // class name
  bases_S2974C15, 1,
  &(vtc_S2974C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(11776,8756), // object size
  NSPAIRA(_ZTI8S2974C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2974C15),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  S2974C16  {
  ::S2974C9 s2974c16f0;
  int s2974c16f1[7];
  int s2974c16f2;
  void *s2974c16f3;
  int s2974c16f4;
  virtual void  v13(); // _ZN8S2974C163v13Ev
  ~S2974C16(); // tgen
  S2974C16(); // tgen
};
//SIG(-1 S2974C16) C1{ v1 FC2{ BC3{ v3 FL[8] Fc[4] FL:7 Fi FD FL} v2 FC3 FC3 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fi[7] Fi Fp Fi}


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

static void Test_S2974C16()
{
  extern Class_Descriptor cd_S2974C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,94)];
    init_test(&cd_S2974C16, buf);
    S2974C16 *dp, &lv = *(dp=new (buf) S2974C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,372), "sizeof(S2974C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C16)");
    check_field_offset(lv, s2974c16f0, ABISELECT(16,4), "S2974C16.s2974c16f0");
    check_field_offset(lv, s2974c16f1, ABISELECT(432,332), "S2974C16.s2974c16f1");
    check_field_offset(lv, s2974c16f2, ABISELECT(460,360), "S2974C16.s2974c16f2");
    check_field_offset(lv, s2974c16f3, ABISELECT(464,364), "S2974C16.s2974c16f3");
    check_field_offset(lv, s2974c16f4, ABISELECT(472,368), "S2974C16.s2974c16f4");
    test_class_info(&lv, &cd_S2974C16);
    dp->~S2974C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C16(Test_S2974C16, "S2974C16", ABISELECT(480,372));

#else // __cplusplus

extern void _ZN8S2974C16C1Ev();
extern void _ZN8S2974C16D1Ev();
Name_Map name_map_S2974C16[] = {
  NSPAIR(_ZN8S2974C16C1Ev),
  NSPAIR(_ZN8S2974C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2974C16[];
extern void _ZN8S2974C163v13Ev();
static  VTBL_ENTRY vtc_S2974C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C16[0]),
  (VTBL_ENTRY)&_ZN8S2974C163v13Ev,
};
extern VTBL_ENTRY _ZTI8S2974C16[];
extern  VTBL_ENTRY _ZTV8S2974C16[];
Class_Descriptor cd_S2974C16 = {  "S2974C16", // class name
  0,0,//no base classes
  &(vtc_S2974C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,372), // object size
  NSPAIRA(_ZTI8S2974C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2974C16),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  S2974C1  : S2974C2 , virtual S2974C4 , S2974C15 , virtual S2974C16 {
  short s2974c1f0;
  void *s2974c1f1[5];
  long double s2974c1f2;
  ::S2974C11 s2974c1f3[9];
  virtual  ~S2974C1(); // _ZN7S2974C1D2Ev
  S2974C1(); // tgen
};
//SIG(1 S2974C1) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ BC3 VBC5{ m Fc FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC7{ v15 FL[8] Fc[4] FL:7 Fi FD FL} FL FU6[3] Fc} BC2 BC8{ VBC5 VBC9{ BC2 VBC5 BC3 VBC10{ BC3 v5 FC3 FC3 FU6} Fl Fl} vd v6 v7 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} BC11{ BC12{ BC3 BC10 BC5 v8 v9 FU6 Fc Fc FC9 FC13{ v12 FD Fp FD[8] Fp[9] FC14{ m FD Fp[10] FD Fi:0 Fi FD FC15{ BC7 v14 FC7 FC7 FU6} Fc:8 Fl FD FC16{ BC7 v16 v17 v18 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC17{ BC3 VBC2 VBC10 BC9 BC5 v10 Fi} BC14 BC5 VBC3 Fp FD Fi Fi Fc[7]} vd v11 FL Fc:2 Fl FC10 FL[2]} BC18{ BC13 vd FC4 Fi Fc Fi FD Fl[4] FL:52 Fl Fi Fs Fs FC5} VBC19{ v13 FC10 Fi[7] Fi Fp Fi} vd Fs Fp[5] FD FC12[9]}


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

static void Test_S2974C1()
{
  extern Class_Descriptor cd_S2974C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3584,10665)];
    init_test(&cd_S2974C1, buf);
    S2974C1 *dp, &lv = *(dp=new (buf) S2974C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(57328,42656), "sizeof(S2974C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2974C1)");
    /*is_ambiguous_... S2974C1::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*), 0, "S2974C1");
    /*is_ambiguous_... S2974C1::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C2*), 0, "S2974C1");
    /*is_ambiguous_... S2974C4::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C4*), ABISELECT(46976,34884), "S2974C1");
    /*is_ambiguous_... S2974C4::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S2974C4*), ABISELECT(54720,40672), "S2974C1");
    check_base_class_offset(lv, (S19922C8*)(S2974C7*)(S2974C4*), ABISELECT(54720,40672), "S2974C1");
    /*is_ambiguous_... S2974C1::S2974C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S2974C8*), ABISELECT(54720,40672), "S2974C1");
    check_base_class_offset(lv, (S19922C8*)(S2974C8*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(54720,40672), "S2974C1");
    /*is_ambiguous_... S2974C4::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*)(S2974C4*), ABISELECT(47104,34984), "S2974C1");
    /*is_ambiguous_... S2974C4::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C2*)(S2974C4*), ABISELECT(47104,34984), "S2974C1");
    /*is_ambiguous_... S2974C1::S2974C8 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*)(S2974C8*), ABISELECT(55008,40900), "S2974C1");
    /*is_ambiguous_... S2974C1::S2974C8 */ AMB_check_base_class_offset(lv, (S2974C2*)(S2974C8*), ABISELECT(55008,40900), "S2974C1");
    /*is_ambiguous_... S2974C1::S2974C8 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C8*), ABISELECT(55584,41324), "S2974C1");
    /*is_ambiguous_... S2974C1::S2974C9 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C9*), ABISELECT(55728,41432), "S2974C1");
    /*is_ambiguous_... S2974C1::S2974C8 */ AMB_check_base_class_offset(lv, (S2974C9*)(S2974C8*), ABISELECT(55728,41432), "S2974C1");
    check_base_class_offset(lv, (S2974C9*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(55728,41432), "S2974C1");
    check_base_class_offset(lv, (S2974C9*)(S2974C8*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(55728,41432), "S2974C1");
    check_base_class_offset(lv, (S2974C8*)(S2974C7*)(S2974C4*), ABISELECT(55008,40900), "S2974C1");
    check_base_class_offset(lv, (S2974C7*)(S2974C4*), ABISELECT(47672,35408), "S2974C1");
    /*is_ambiguous_... S2974C11::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C11*)(S2974C10*)(S2974C4*), ABISELECT(47776,35484), "S2974C1");
    check_base_class_offset(lv, (S2974C3*)(S2974C9*)(S2974C11*)(S2974C10*)(S2974C4*), ABISELECT(47904,35584), "S2974C1");
    check_base_class_offset(lv, (S2974C9*)(S2974C11*)(S2974C10*)(S2974C4*), ABISELECT(47904,35584), "S2974C1");
    check_base_class_offset(lv, (S19922C8*)(S2974C11*)(S2974C10*)(S2974C4*), ABISELECT(48320,35912), "S2974C1");
    check_base_class_offset(lv, (S2974C11*)(S2974C10*)(S2974C4*), ABISELECT(47776,35484), "S2974C1");
    /*is_ambiguous_... S2974C14::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(51616,38336), "S2974C1");
    /*is_ambiguous_... S2974C1::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C2*), ABISELECT(56144,41760), "S2974C1");
    /*is_ambiguous_... S2974C14::S2974C2 */ AMB_check_base_class_offset(lv, (S2974C2*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(56144,41760), "S2974C1");
    check_base_class_offset(lv, (S2974C3*)(S2974C2*)(S2974C8*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(51744,38436), "S2974C1");
    check_base_class_offset(lv, (S2974C2*)(S2974C8*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(51744,38436), "S2974C1");
    /*is_ambiguous_... S2974C8::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C8*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(52320,38860), "S2974C1");
    check_base_class_offset(lv, (S2974C8*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(51744,38436), "S2974C1");
    /*is_ambiguous_... S2974C14::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(52464,38968), "S2974C1");
    check_base_class_offset(lv, (S2974C14*)(S2974C10*)(S2974C4*), ABISELECT(51616,38336), "S2974C1");
    check_base_class_offset(lv, (S19922C12*)(S2974C10*)(S2974C4*), ABISELECT(52752,39200), "S2974C1");
    /*is_ambiguous_... S2974C10::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S2974C10*)(S2974C4*), ABISELECT(53920,40052), "S2974C1");
    /*is_ambiguous_... S2974C10::S2974C3 */ AMB_check_base_class_offset(lv, (S2974C3*)(S2974C10*)(S2974C4*), ABISELECT(56720,42184), "S2974C1");
    check_base_class_offset(lv, (S2974C10*)(S2974C4*), ABISELECT(47776,35484), "S2974C1");
    check_base_class_offset(lv, (S2974C4*), ABISELECT(46976,34884), "S2974C1");
    check_base_class_offset(lv, (S2974C12*)(S2974C15*), ABISELECT(576,424), "S2974C1");
    check_base_class_offset(lv, (S2974C15*), ABISELECT(576,424), "S2974C1");
    check_base_class_offset(lv, (S2974C16*), ABISELECT(56848,42284), "S2974C1");
    check_field_offset(lv, s2974c1f0, ABISELECT(12352,9180), "S2974C1.s2974c1f0");
    check_field_offset(lv, s2974c1f1, ABISELECT(12360,9184), "S2974C1.s2974c1f1");
    check_field_offset(lv, s2974c1f2, ABISELECT(12400,9204), "S2974C1.s2974c1f2");
    check_field_offset(lv, s2974c1f3, ABISELECT(12416,9216), "S2974C1.s2974c1f3");
    test_class_info(&lv, &cd_S2974C1);
    dp->~S2974C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2974C1(Test_S2974C1, "S2974C1", ABISELECT(57328,42656));

#else // __cplusplus

extern void _ZN7S2974C1C1Ev();
extern void _ZN7S2974C1D2Ev();
Name_Map name_map_S2974C1[] = {
  NSPAIR(_ZN7S2974C1C1Ev),
  NSPAIR(_ZN7S2974C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S2974C8;
extern VTBL_ENTRY _ZTI7S2974C8[];
extern  VTBL_ENTRY _ZTV7S2974C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C8[];
extern Class_Descriptor cd_S2974C7;
extern VTBL_ENTRY _ZTI7S2974C7[];
extern  VTBL_ENTRY _ZTV7S2974C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C7[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C9;
extern VTBL_ENTRY _ZTI7S2974C9[];
extern  VTBL_ENTRY _ZTV7S2974C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C11;
extern VTBL_ENTRY _ZTI8S2974C11[];
extern  VTBL_ENTRY _ZTV8S2974C11[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C2;
extern VTBL_ENTRY _ZTI7S2974C2[];
extern  VTBL_ENTRY _ZTV7S2974C2[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C8;
extern VTBL_ENTRY _ZTI7S2974C8[];
extern  VTBL_ENTRY _ZTV7S2974C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C8[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C14;
extern VTBL_ENTRY _ZTI8S2974C14[];
extern  VTBL_ENTRY _ZTV8S2974C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2974C14[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S2974C3;
extern VTBL_ENTRY _ZTI7S2974C3[];
extern  VTBL_ENTRY _ZTV7S2974C3[];
extern Class_Descriptor cd_S2974C10;
extern VTBL_ENTRY _ZTI8S2974C10[];
extern  VTBL_ENTRY _ZTV8S2974C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2974C10[];
extern Class_Descriptor cd_S2974C4;
extern VTBL_ENTRY _ZTI7S2974C4[];
extern  VTBL_ENTRY _ZTV7S2974C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C4[];
extern Class_Descriptor cd_S2974C12;
extern VTBL_ENTRY _ZTI8S2974C12[];
extern  VTBL_ENTRY _ZTV8S2974C12[];
extern Class_Descriptor cd_S2974C15;
extern VTBL_ENTRY _ZTI8S2974C15[];
extern  VTBL_ENTRY _ZTV8S2974C15[];
extern Class_Descriptor cd_S2974C16;
extern VTBL_ENTRY _ZTI8S2974C16[];
extern  VTBL_ENTRY _ZTV8S2974C16[];
static Base_Class bases_S2974C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2974C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    1, //immediately_derived
  0, 0},
  {&cd_S2974C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S2974C3,    ABISELECT(46976,34884), //bcp->offset
    -1, //bcp->virtual_function_table_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
    31, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(54720,40672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C3,    ABISELECT(47104,34984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(47104,34984), //bcp->offset
    43, //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
    12, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(55008,40900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C2,    ABISELECT(55008,40900), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(55584,41324), //bcp->offset
    101, //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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(55728,41432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C9,    ABISELECT(55728,41432), //bcp->offset
    104, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2974C8,    ABISELECT(55008,40900), //bcp->offset
    89, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2974C7,    ABISELECT(47672,35408), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(47776,35484), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(47904,35584), //bcp->offset
    -1, //bcp->virtual_function_table_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_S2974C9,    ABISELECT(47904,35584), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(48320,35912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C11,    ABISELECT(47776,35484), //bcp->offset
    -1, //bcp->virtual_function_table_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
    30, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(51616,38336), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(56144,41760), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(56144,41760), //bcp->offset
    110, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2974C3,    ABISELECT(51744,38436), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S2974C2,    ABISELECT(51744,38436), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S2974C3,    ABISELECT(52320,38860), //bcp->offset
    86, //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
    21, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2974C8,    ABISELECT(51744,38436), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(52464,38968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C14,    ABISELECT(51616,38336), //bcp->offset
    71, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(52752,39200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(53920,40052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2974C3,    ABISELECT(56720,42184), //bcp->offset
    120, //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
    9, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S2974C10,    ABISELECT(47776,35484), //bcp->offset
    58, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2974C4,    ABISELECT(46976,34884), //bcp->offset
    20, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2974C12,    ABISELECT(576,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
    29, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2974C15,    ABISELECT(576,424), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2974C16,    ABISELECT(56848,42284), //bcp->offset
    124, //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
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2974C1[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C1D1Ev();
extern void _ZN7S2974C1D0Ev();
extern void _ZN8S2974C123v12Ev();
extern void ABISELECT(_ZThn576_N7S2974C1D1Ev,_ZThn424_N7S2974C1D1Ev)();
extern void ABISELECT(_ZThn576_N7S2974C1D0Ev,_ZThn424_N7S2974C1D0Ev)();
extern void _ZN7S2974C32v1Ev();
extern void ABISELECT(_ZTv0_n72_N7S2974C1D1Ev,_ZTv0_n36_N7S2974C1D1Ev)();
extern void ABISELECT(_ZThn46976_N7S2974C1D1Ev,_ZThn34884_N7S2974C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2974C1D0Ev,_ZTv0_n36_N7S2974C1D0Ev)();
extern void ABISELECT(_ZThn46976_N7S2974C1D0Ev,_ZThn34884_N7S2974C1D0Ev)() __attribute__((weak));
extern void _ZN7S2974C43v11Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void ABISELECT(_ZTvn696_n72_N7S2974C1D1Ev,_ZTvn524_n36_N7S2974C1D1Ev)();
extern void ABISELECT(_ZTvn696_n72_N7S2974C1D0Ev,_ZTvn524_n36_N7S2974C1D0Ev)();
extern void _ZN7S2974C72v6Ev();
extern void _ZN7S2974C72v7Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C112v8Ev();
extern void _ZN8S2974C112v9Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C163v13Ev();
static  VTBL_ENTRY vtc_S2974C1[] = {
  ABISELECT(56848,42284),
  ABISELECT(56720,42184),
  ABISELECT(56144,41760),
  ABISELECT(55728,41432),
  ABISELECT(55008,40900),
  ABISELECT(54720,40672),
  ABISELECT(46976,34884),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  (VTBL_ENTRY)&_ZN7S2974C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2974C1D0Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN8S2974C123v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S2974C1D1Ev,_ZThn424_N7S2974C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S2974C1D0Ev,_ZThn424_N7S2974C1D0Ev),
  ABISELECT(4640,3452),
  ABISELECT(928,700),
  ABISELECT(800,600),
  ABISELECT(800,600),
  ABISELECT(696,524),
  ABISELECT(696,524),
  ABISELECT(128,100),
  ABISELECT(128,100),
  ABISELECT(128,100),
  0,
  ABISELECT(-46976,-34884),
  0,
  ABISELECT(9744,7300),
  ABISELECT(9168,6876),
  ABISELECT(8752,6548),
  ABISELECT(8032,6016),
  ABISELECT(7744,5788),
  ABISELECT(-46976,-34884),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2974C1D1Ev,_ZTv0_n36_N7S2974C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2974C1D0Ev,_ZTv0_n36_N7S2974C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2974C43v11Ev,
  ABISELECT(-47104,-34984),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(8056,6024),
  ABISELECT(7336,5492),
  ABISELECT(7048,5264),
  ABISELECT(-47672,-35408),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn696_n72_N7S2974C1D1Ev,_ZTvn524_n36_N7S2974C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn696_n72_N7S2974C1D0Ev,_ZTvn524_n36_N7S2974C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2974C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v7Ev,
  ABISELECT(8944,6700),
  ABISELECT(6944,5188),
  ABISELECT(7952,5948),
  ABISELECT(8368,6276),
  ABISELECT(-47776,-35484),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v9Ev,
  ABISELECT(-47904,-35584),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
  ABISELECT(3104,2336),
  ABISELECT(4112,3096),
  ABISELECT(4528,3424),
  ABISELECT(-51616,-38336),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  ABISELECT(-51744,-38436),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(-52320,-38860),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  ABISELECT(-55008,-40900),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  ABISELECT(-55584,-41324),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  0,
  ABISELECT(-55728,-41432),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56144,-41760),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
  0,
  ABISELECT(-56720,-42184),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  0,
  ABISELECT(-56848,-42284),
  (VTBL_ENTRY)&(_ZTI7S2974C1[0]),
  (VTBL_ENTRY)&_ZN8S2974C163v13Ev,
};
extern VTBL_ENTRY _ZTV7S2974C1[];
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C4D1Ev();
extern void _ZN7S2974C4D0Ev();
extern void _ZN7S2974C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C4__7S2974C1[] = {
  ABISELECT(9744,7300),
  ABISELECT(9168,6876),
  ABISELECT(8752,6548),
  ABISELECT(8032,6016),
  ABISELECT(7744,5788),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2974C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2974C43v11Ev,
};
extern void _ZN7S2974C7D1Ev();
extern void _ZN7S2974C7D0Ev();
extern void _ZN7S2974C72v6Ev();
extern void _ZN7S2974C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C77S2974C4__7S2974C1[] = {
  ABISELECT(8056,6024),
  ABISELECT(7336,5492),
  ABISELECT(7048,5264),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2974C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v7Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__7S2974C77S2974C4__7S2974C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  ABISELECT(-7336,-5492),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C37S2974C8__A1__7S2974C77S2974C4__7S2974C1[] = {
  ABISELECT(-7912,-5916),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C77S2974C4__7S2974C1[] = {
  0,
  0,
  ABISELECT(-8056,-6024),
  (VTBL_ENTRY)&(_ZTI7S2974C7[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C112v8Ev();
extern void _ZN8S2974C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C107S2974C4__7S2974C1[] = {
  ABISELECT(8944,6700),
  ABISELECT(6944,5188),
  ABISELECT(7952,5948),
  ABISELECT(8368,6276),
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v9Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C148S2974C107S2974C4__7S2974C1[] = {
  ABISELECT(3104,2336),
  ABISELECT(4112,3096),
  ABISELECT(4528,3424),
  0,
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C88S2974C148S2974C107S2974C4__A1__7S2974C1[] = {
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C88S2974C148S2974C107S2974C4__A1__7S2974C1[] = {
  0,
  0,
  ABISELECT(-3984,-2996),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C2__8S2974C148S2974C107S2974C4__7S2974C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-4528,-3424),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__8S2974C148S2974C107S2974C4__7S2974C1[] = {
  0,
  0,
  ABISELECT(-4112,-3096),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__8S2974C148S2974C107S2974C4__7S2974C1[] = {
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2974C14[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C14__8S2974C107S2974C4__7S2974C1[] = {
  ABISELECT(3104,2336),
  ABISELECT(4112,3096),
  ABISELECT(4528,3424),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C2__8S2974C107S2974C4__7S2974C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-8368,-6276),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__A1__8S2974C107S2974C4__7S2974C1[] = {
  0,
  0,
  ABISELECT(-7952,-5948),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C88S2974C14__8S2974C107S2974C4__7S2974C1[] = {
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C3__A7__8S2974C107S2974C4__7S2974C1[] = {
  0,
  ABISELECT(-8944,-6700),
  (VTBL_ENTRY)&(_ZTI8S2974C10[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern void ABISELECT(_ZThn696_N7S2974C4D1Ev,_ZThn524_N7S2974C4D1Ev)();
extern void ABISELECT(_ZThn696_N7S2974C4D0Ev,_ZThn524_N7S2974C4D0Ev)();
extern void _ZN7S2974C72v6Ev();
extern void _ZN7S2974C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C7__7S2974C4__7S2974C1[] = {
  ABISELECT(8056,6024),
  ABISELECT(7336,5492),
  ABISELECT(7048,5264),
  ABISELECT(-696,-524),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn696_N7S2974C4D1Ev,_ZThn524_N7S2974C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn696_N7S2974C4D0Ev,_ZThn524_N7S2974C4D0Ev),
  (VTBL_ENTRY)&_ZN7S2974C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2974C72v7Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__7S2974C4__7S2974C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  ABISELECT(-8032,-6016),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C37S2974C8__A3__7S2974C4__7S2974C1[] = {
  ABISELECT(-8608,-6440),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C4__7S2974C1[] = {
  0,
  0,
  ABISELECT(-8752,-6548),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C112v8Ev();
extern void _ZN8S2974C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C10__7S2974C4__7S2974C1[] = {
  ABISELECT(8944,6700),
  ABISELECT(6944,5188),
  ABISELECT(7952,5948),
  ABISELECT(8368,6276),
  ABISELECT(-800,-600),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2974C112v9Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN8S2974C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2974C148S2974C10__7S2974C4__7S2974C1[] = {
  ABISELECT(3104,2336),
  ABISELECT(4112,3096),
  ABISELECT(4528,3424),
  ABISELECT(-4640,-3452),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2974C143v10Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C2__A2__7S2974C4__7S2974C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-9168,-6876),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C88S2974C148S2974C10__A1__7S2974C4__7S2974C1[] = {
  ABISELECT(3984,2996),
  ABISELECT(2976,2236),
  ABISELECT(-4768,-3552),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C3__A11__7S2974C4__7S2974C1[] = {
  0,
  ABISELECT(-9744,-7300),
  (VTBL_ENTRY)&(_ZTI7S2974C4[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C22v2Ev();
extern void _ZN7S2974C22v3Ev();
extern void _ZN7S2974C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C8__7S2974C1[] = {
  ABISELECT(720,532),
  ABISELECT(-288,-228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2974C22v4Ev,
};
extern void _ZN7S2974C32v1Ev();
extern void _ZN7S2974C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2974C9__7S2974C8__7S2974C1[] = {
  0,
  0,
  ABISELECT(-720,-532),
  (VTBL_ENTRY)&(_ZTI7S2974C8[0]),
  (VTBL_ENTRY)&_ZN7S2974C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2974C92v5Ev,
};
static  VTT_ENTRY vtt_S2974C1[] = {
  {&(_ZTV7S2974C1[9]),  9,128},
  {&(_ZTV7S2974C1[39]),  39,128},
  {&(_ZTV7S2974C1[45]),  45,128},
  {&(_ZTV7S2974C1[54]),  54,128},
  {&(_ZTV7S2974C1[97]),  97,128},
  {&(_ZTV7S2974C1[103]),  103,128},
  {&(_ZTV7S2974C1[108]),  108,128},
  {&(_ZTV7S2974C1[64]),  64,128},
  {&(_ZTV7S2974C1[69]),  69,128},
  {&(_ZTV7S2974C1[76]),  76,128},
  {&(_ZTV7S2974C1[116]),  116,128},
  {&(_ZTV7S2974C1[82]),  82,128},
  {&(_ZTV7S2974C1[88]),  88,128},
  {&(_ZTV7S2974C1[123]),  123,128},
  {&(_ZTV7S2974C1[127]),  127,128},
  {&(_tg__ZTV7S2974C4__7S2974C1[7]),  7,11},
  {&(_tg__ZTV7S2974C77S2974C4__7S2974C1[5]),  5,9},
  {&(_tg__ZTV7S2974C8__7S2974C77S2974C4__7S2974C1[8]),  8,12},
  {&(_tg__ZTV7S2974C37S2974C8__A1__7S2974C77S2974C4__7S2974C1[2]),  2,3},
  {&(_tg__ZTV7S2974C9__7S2974C77S2974C4__7S2974C1[4]),  4,6},
  {&(_tg__ZTV8S2974C107S2974C4__7S2974C1[6]),  6,9},
  {&(_tg__ZTV8S2974C148S2974C107S2974C4__7S2974C1[5]),  5,7},
  {&(_tg__ZTV7S2974C88S2974C148S2974C107S2974C4__A1__7S2974C1[4]),  4,8},
  {&(_tg__ZTV7S2974C9__7S2974C88S2974C148S2974C107S2974C4__A1__7S2974C1[4]),  4,6},
  {&(_tg__ZTV7S2974C2__8S2974C148S2974C107S2974C4__7S2974C1[6]),  6,10},
  {&(_tg__ZTV7S2974C9__8S2974C148S2974C107S2974C4__7S2974C1[4]),  4,6},
  {&(_tg__ZTV7S2974C8__8S2974C148S2974C107S2974C4__7S2974C1[4]),  4,8},
  {&(_tg__ZTV8S2974C14__8S2974C107S2974C4__7S2974C1[5]),  5,7},
  {&(_tg__ZTV7S2974C2__8S2974C107S2974C4__7S2974C1[6]),  6,10},
  {&(_tg__ZTV7S2974C9__A1__8S2974C107S2974C4__7S2974C1[4]),  4,6},
  {&(_tg__ZTV7S2974C88S2974C14__8S2974C107S2974C4__7S2974C1[4]),  4,8},
  {&(_tg__ZTV7S2974C3__A7__8S2974C107S2974C4__7S2974C1[3]),  3,4},
  {&(_tg__ZTV7S2974C7__7S2974C4__7S2974C1[5]),  5,9},
  {&(_tg__ZTV7S2974C8__7S2974C4__7S2974C1[8]),  8,12},
  {&(_tg__ZTV7S2974C37S2974C8__A3__7S2974C4__7S2974C1[2]),  2,3},
  {&(_tg__ZTV7S2974C9__7S2974C4__7S2974C1[4]),  4,6},
  {&(_tg__ZTV8S2974C10__7S2974C4__7S2974C1[6]),  6,9},
  {&(_tg__ZTV8S2974C148S2974C10__7S2974C4__7S2974C1[5]),  5,7},
  {&(_tg__ZTV7S2974C2__A2__7S2974C4__7S2974C1[6]),  6,10},
  {&(_tg__ZTV7S2974C88S2974C148S2974C10__A1__7S2974C4__7S2974C1[4]),  4,8},
  {&(_tg__ZTV7S2974C3__A11__7S2974C4__7S2974C1[3]),  3,4},
  {&(_tg__ZTV7S2974C8__7S2974C1[4]),  4,8},
  {&(_tg__ZTV7S2974C9__7S2974C8__7S2974C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S2974C1[];
extern  VTBL_ENTRY _ZTV7S2974C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2974C1[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2974C1D0Ev,_ZTv0_n36_N7S2974C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46976_N7S2974C1D0Ev,_ZThn34884_N7S2974C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2974C1D1Ev,_ZTv0_n36_N7S2974C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46976_N7S2974C1D1Ev,_ZThn34884_N7S2974C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2974C1 = {  "S2974C1", // class name
  bases_S2974C1, 35,
  &(vtc_S2974C1[0]), // expected_vtbl_contents
  &(vtt_S2974C1[0]), // expected_vtt_contents
  ABISELECT(57328,42656), // object size
  NSPAIRA(_ZTI7S2974C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2974C1),128, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2974C1),43, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2973C3  {
  __tsi64 s2973c3f0[8];
  char s2973c3f1[4];
  int s2973c3f2:7;
  int s2973c3f3;
  long double s2973c3f4;
  __tsi64 s2973c3f5;
  virtual void  v1(); // _ZN7S2973C32v1Ev
  ~S2973C3(); // tgen
  S2973C3(); // tgen
};
//SIG(-1 S2973C3) C1{ v1 FL[8] Fc[4] Fi:7 Fi FD FL}


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

static void Test_S2973C3()
{
  extern Class_Descriptor cd_S2973C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S2973C3, buf);
    S2973C3 *dp, &lv = *(dp=new (buf) S2973C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S2973C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C3)");
    check_field_offset(lv, s2973c3f0, ABISELECT(8,4), "S2973C3.s2973c3f0");
    check_field_offset(lv, s2973c3f1, ABISELECT(72,68), "S2973C3.s2973c3f1");
    set_bf_and_test(lv, s2973c3f2, ABISELECT(76,72), 0, 7, 1, "S2973C3");
    set_bf_and_test(lv, s2973c3f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S2973C3");
    check_field_offset(lv, s2973c3f3, ABISELECT(80,76), "S2973C3.s2973c3f3");
    check_field_offset(lv, s2973c3f4, ABISELECT(96,80), "S2973C3.s2973c3f4");
    check_field_offset(lv, s2973c3f5, ABISELECT(112,92), "S2973C3.s2973c3f5");
    test_class_info(&lv, &cd_S2973C3);
    dp->~S2973C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C3(Test_S2973C3, "S2973C3", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN7S2973C3C1Ev();
extern void _ZN7S2973C3D1Ev();
Name_Map name_map_S2973C3[] = {
  NSPAIR(_ZN7S2973C3C1Ev),
  NSPAIR(_ZN7S2973C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2973C3[];
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY vtc_S2973C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C3[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
Class_Descriptor cd_S2973C3 = {  "S2973C3", // class name
  0,0,//no base classes
  &(vtc_S2973C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI7S2973C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2973C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2973C2  : S2973C3 {
  ::S2973C3 s2973c2f0;
  int s2973c2f1;
  ::S2973C3 s2973c2f2;
  int s2973c2f3;
  char s2973c2f4[6];
  char s2973c2f5:4;
  void *s2973c2f6;
  ::S2973C3 s2973c2f7;
  int s2973c2f8;
  virtual void  v2(); // _ZN7S2973C22v2Ev
  virtual void  v3(); // _ZN7S2973C22v3Ev
  virtual void  v4(); // _ZN7S2973C22v4Ev
  ~S2973C2(); // tgen
  S2973C2(); // tgen
};
//SIG(-1 S2973C2) C1{ BC2{ v4 FL[8] Fc[4] Fi:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S2973C2 ::v2(){vfunc_called(this, "_ZN7S2973C22v2Ev");}
void  S2973C2 ::v3(){vfunc_called(this, "_ZN7S2973C22v3Ev");}
void  S2973C2 ::v4(){vfunc_called(this, "_ZN7S2973C22v4Ev");}
S2973C2 ::~S2973C2(){ note_dtor("S2973C2", this);} // tgen
S2973C2 ::S2973C2(){ note_ctor("S2973C2", this);} // tgen

static void Test_S2973C2()
{
  extern Class_Descriptor cd_S2973C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S2973C2, buf);
    S2973C2 *dp, &lv = *(dp=new (buf) S2973C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S2973C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C2)");
    check_base_class_offset(lv, (S2973C3*), 0, "S2973C2");
    check_field_offset(lv, s2973c2f0, ABISELECT(128,100), "S2973C2.s2973c2f0");
    check_field_offset(lv, s2973c2f1, ABISELECT(256,200), "S2973C2.s2973c2f1");
    check_field_offset(lv, s2973c2f2, ABISELECT(272,204), "S2973C2.s2973c2f2");
    check_field_offset(lv, s2973c2f3, ABISELECT(400,304), "S2973C2.s2973c2f3");
    check_field_offset(lv, s2973c2f4, ABISELECT(404,308), "S2973C2.s2973c2f4");
    set_bf_and_test(lv, s2973c2f5, ABISELECT(410,314), 0, 4, 1, "S2973C2");
    set_bf_and_test(lv, s2973c2f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S2973C2");
    check_field_offset(lv, s2973c2f6, ABISELECT(416,316), "S2973C2.s2973c2f6");
    check_field_offset(lv, s2973c2f7, ABISELECT(432,320), "S2973C2.s2973c2f7");
    check_field_offset(lv, s2973c2f8, ABISELECT(560,420), "S2973C2.s2973c2f8");
    test_class_info(&lv, &cd_S2973C2);
    dp->~S2973C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C2(Test_S2973C2, "S2973C2", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN7S2973C2C1Ev();
extern void _ZN7S2973C2D1Ev();
Name_Map name_map_S2973C2[] = {
  NSPAIR(_ZN7S2973C2C1Ev),
  NSPAIR(_ZN7S2973C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
static Base_Class bases_S2973C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2973C2[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY vtc_S2973C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C2[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
Class_Descriptor cd_S2973C2 = {  "S2973C2", // class name
  bases_S2973C2, 1,
  &(vtc_S2973C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI7S2973C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2973C2),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  S2973C9  : S2973C3 {
  ::S2973C3 s2973c9f0;
  ::S2973C3 s2973c9f1;
  ::S19921C7 s2973c9f2;
  virtual void  v5(); // _ZN7S2973C92v5Ev
  ~S2973C9(); // tgen
  S2973C9(); // tgen
};
//SIG(-1 S2973C9) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


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

static void Test_S2973C9()
{
  extern Class_Descriptor cd_S2973C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S2973C9, buf);
    S2973C9 *dp, &lv = *(dp=new (buf) S2973C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S2973C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C9)");
    check_base_class_offset(lv, (S2973C3*), 0, "S2973C9");
    check_field_offset(lv, s2973c9f0, ABISELECT(128,100), "S2973C9.s2973c9f0");
    check_field_offset(lv, s2973c9f1, ABISELECT(256,200), "S2973C9.s2973c9f1");
    check_field_offset(lv, s2973c9f2, ABISELECT(384,300), "S2973C9.s2973c9f2");
    test_class_info(&lv, &cd_S2973C9);
    dp->~S2973C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C9(Test_S2973C9, "S2973C9", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN7S2973C9C1Ev();
extern void _ZN7S2973C9D1Ev();
Name_Map name_map_S2973C9[] = {
  NSPAIR(_ZN7S2973C9C1Ev),
  NSPAIR(_ZN7S2973C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
static Base_Class bases_S2973C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2973C9[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY vtc_S2973C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C9[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
Class_Descriptor cd_S2973C9 = {  "S2973C9", // class name
  bases_S2973C9, 1,
  &(vtc_S2973C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI7S2973C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2973C9),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  S2973C8  : S2973C2 , virtual S19921C8 , S2973C3 , virtual S2973C9 {
  long s2973c8f0;
  __tsi64 s2973c8f1;
  ~S2973C8(); // tgen
  S2973C8(); // tgen
};
//SIG(-1 S2973C8) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC6{ v6 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} BC3 VBC7{ BC3 v5 FC3 FC3 FU5} Fl FL}


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

static void Test_S2973C8()
{
  extern Class_Descriptor cd_S2973C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,274)];
    init_test(&cd_S2973C8, buf);
    S2973C8 *dp, &lv = *(dp=new (buf) S2973C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1092), "sizeof(S2973C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C8)");
    check_base_class_offset(lv, (S2973C3*)(S2973C2*), 0, "S2973C8");
    check_base_class_offset(lv, (S2973C2*), 0, "S2973C8");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(720,536), "S2973C8");
    /*is_ambiguous_... S2973C8::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*), ABISELECT(576,424), "S2973C8");
    check_base_class_offset(lv, (S2973C3*)(S2973C9*), ABISELECT(1008,764), "S2973C8");
    check_base_class_offset(lv, (S2973C9*), ABISELECT(1008,764), "S2973C8");
    check_field_offset(lv, s2973c8f0, ABISELECT(696,524), "S2973C8.s2973c8f0");
    check_field_offset(lv, s2973c8f1, ABISELECT(704,528), "S2973C8.s2973c8f1");
    test_class_info(&lv, &cd_S2973C8);
    dp->~S2973C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C8(Test_S2973C8, "S2973C8", ABISELECT(1424,1092));

#else // __cplusplus

extern void _ZN7S2973C8C1Ev();
extern void _ZN7S2973C8D1Ev();
Name_Map name_map_S2973C8[] = {
  NSPAIR(_ZN7S2973C8C1Ev),
  NSPAIR(_ZN7S2973C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
static Base_Class bases_S2973C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2973C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C8,    ABISELECT(720,536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2973C3,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2973C3,    ABISELECT(1008,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C9,    ABISELECT(1008,764), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2973C8[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY vtc_S2973C8[] = {
  ABISELECT(1008,764),
  ABISELECT(720,536),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  0,
  ABISELECT(-1008,-764),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern VTBL_ENTRY _ZTV7S2973C8[];
static  VTT_ENTRY vtt_S2973C8[] = {
  {&(_ZTV7S2973C8[4]),  4,17},
  {&(_ZTV7S2973C8[15]),  15,17},
};
extern VTBL_ENTRY _ZTI7S2973C8[];
extern  VTBL_ENTRY _ZTV7S2973C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C8[];
Class_Descriptor cd_S2973C8 = {  "S2973C8", // class name
  bases_S2973C8, 6,
  &(vtc_S2973C8[0]), // expected_vtbl_contents
  &(vtt_S2973C8[0]), // expected_vtt_contents
  ABISELECT(1424,1092), // object size
  NSPAIRA(_ZTI7S2973C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2973C8),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2973C8),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2973C7  : virtual S19921C8 , virtual S2973C8 {
  int s2973c7f0;
  void *s2973c7f1;
  unsigned char s2973c7f2:1;
  int s2973c7f3;
  int s2973c7f4;
  void *s2973c7f5;
  int s2973c7f6;
  int s2973c7f7;
  int s2973c7f8;
  int s2973c7f9[8];
  char s2973c7f10;
  virtual  ~S2973C7(); // _ZN7S2973C7D2Ev
  virtual void  v6(); // _ZN7S2973C72v6Ev
  virtual void  v7(); // _ZN7S2973C72v7Ev
  S2973C7(); // tgen
};
//SIG(-1 S2973C7) C1{ VBC2{ m Fc FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC4{ v8 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU3[3] Fc} VBC5{ BC6{ BC7{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} v4 v5 v6 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi} VBC2 BC7 VBC8{ BC7 v7 FC7 FC7 FU3} Fl FL} vd v1 v2 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc}


 S2973C7 ::~S2973C7(){ note_dtor("S2973C7", this);}
void  S2973C7 ::v6(){vfunc_called(this, "_ZN7S2973C72v6Ev");}
void  S2973C7 ::v7(){vfunc_called(this, "_ZN7S2973C72v7Ev");}
S2973C7 ::S2973C7(){ note_ctor("S2973C7", this);} // tgen

static void Test_S2973C7()
{
  extern Class_Descriptor cd_S2973C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,293)];
    init_test(&cd_S2973C7, buf);
    S2973C7 *dp, &lv = *(dp=new (buf) S2973C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1168), "sizeof(S2973C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C7)");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(96,76), "S2973C7");
    check_base_class_offset(lv, (S19921C8*)(S2973C8*), ABISELECT(96,76), "S2973C7");
    check_base_class_offset(lv, (S2973C3*)(S2973C2*)(S2973C8*), ABISELECT(384,304), "S2973C7");
    check_base_class_offset(lv, (S2973C2*)(S2973C8*), ABISELECT(384,304), "S2973C7");
    /*is_ambiguous_... S2973C8::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C8*), ABISELECT(960,728), "S2973C7");
    check_base_class_offset(lv, (S2973C3*)(S2973C9*), ABISELECT(1104,840), "S2973C7");
    check_base_class_offset(lv, (S2973C9*)(S2973C8*), ABISELECT(1104,840), "S2973C7");
    check_base_class_offset(lv, (S2973C8*), ABISELECT(384,304), "S2973C7");
    check_field_offset(lv, s2973c7f0, ABISELECT(8,4), "S2973C7.s2973c7f0");
    check_field_offset(lv, s2973c7f1, ABISELECT(16,8), "S2973C7.s2973c7f1");
    set_bf_and_test(lv, s2973c7f2, ABISELECT(24,12), 0, 1, 1, "S2973C7");
    check_field_offset(lv, s2973c7f3, ABISELECT(28,16), "S2973C7.s2973c7f3");
    check_field_offset(lv, s2973c7f4, ABISELECT(32,20), "S2973C7.s2973c7f4");
    check_field_offset(lv, s2973c7f5, ABISELECT(40,24), "S2973C7.s2973c7f5");
    check_field_offset(lv, s2973c7f6, ABISELECT(48,28), "S2973C7.s2973c7f6");
    check_field_offset(lv, s2973c7f7, ABISELECT(52,32), "S2973C7.s2973c7f7");
    check_field_offset(lv, s2973c7f8, ABISELECT(56,36), "S2973C7.s2973c7f8");
    check_field_offset(lv, s2973c7f9, ABISELECT(60,40), "S2973C7.s2973c7f9");
    check_field_offset(lv, s2973c7f10, ABISELECT(92,72), "S2973C7.s2973c7f10");
    test_class_info(&lv, &cd_S2973C7);
    dp->~S2973C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C7(Test_S2973C7, "S2973C7", ABISELECT(1520,1168));

#else // __cplusplus

extern void _ZN7S2973C7C1Ev();
extern void _ZN7S2973C7D2Ev();
Name_Map name_map_S2973C7[] = {
  NSPAIR(_ZN7S2973C7C1Ev),
  NSPAIR(_ZN7S2973C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S2973C8;
extern VTBL_ENTRY _ZTI7S2973C8[];
extern  VTBL_ENTRY _ZTV7S2973C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C8[];
static Base_Class bases_S2973C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C8,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2973C3,    ABISELECT(384,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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(384,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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(960,728), //bcp->offset
    21, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(1104,840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C9,    ABISELECT(1104,840), //bcp->offset
    24, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2973C8,    ABISELECT(384,304), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2973C7[];
extern void _ZN7S2973C7D1Ev();
extern void _ZN7S2973C7D0Ev();
extern void _ZN7S2973C72v6Ev();
extern void _ZN7S2973C72v7Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY vtc_S2973C7[] = {
  ABISELECT(1104,840),
  ABISELECT(384,304),
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2973C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v7Ev,
  0,
  0,
  0,
  0,
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  ABISELECT(-384,-304),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(-960,-728),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  0,
  ABISELECT(-1104,-840),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern VTBL_ENTRY _ZTV7S2973C7[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__7S2973C7[] = {
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C8__7S2973C7[] = {
  0,
  0,
  ABISELECT(-720,-536),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
static  VTT_ENTRY vtt_S2973C7[] = {
  {&(_ZTV7S2973C7[5]),  5,30},
  {&(_ZTV7S2973C7[17]),  17,30},
  {&(_ZTV7S2973C7[23]),  23,30},
  {&(_ZTV7S2973C7[28]),  28,30},
  {&(_tg__ZTV7S2973C8__7S2973C7[4]),  4,8},
  {&(_tg__ZTV7S2973C9__7S2973C8__7S2973C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S2973C7[];
extern  VTBL_ENTRY _ZTV7S2973C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C7[];
Class_Descriptor cd_S2973C7 = {  "S2973C7", // class name
  bases_S2973C7, 7,
  &(vtc_S2973C7[0]), // expected_vtbl_contents
  &(vtt_S2973C7[0]), // expected_vtt_contents
  ABISELECT(1520,1168), // object size
  NSPAIRA(_ZTI7S2973C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2973C7),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2973C7),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2973C12  {
  long double s2973c12f0;
  void *s2973c12f1;
  long double s2973c12f2[8];
  void *s2973c12f3[9];
  ::S19921C12 s2973c12f4;
  int s2973c12f5;
  char s2973c12f6;
  long double s2973c12f7[4];
  char s2973c12f8;
  int s2973c12f9;
  virtual void  v12(); // _ZN8S2973C123v12Ev
  ~S2973C12(); // tgen
  S2973C12(); // tgen
};
//SIG(-1 S2973C12) C1{ v1 FD Fp FD[8] Fp[9] FC2{ m FD Fp[10] FD Fi:0 Fi FD FC3{ BC4{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} v2 FC4 FC4 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 FL FD FC6{ BC4 v4 v5 v6 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi}} Fi Fc FD[4] Fc Fi}


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

static void Test_S2973C12()
{
  extern Class_Descriptor cd_S2973C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,269)];
    init_test(&cd_S2973C12, buf);
    S2973C12 *dp, &lv = *(dp=new (buf) S2973C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1072), "sizeof(S2973C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C12)");
    check_field_offset(lv, s2973c12f0, ABISELECT(16,4), "S2973C12.s2973c12f0");
    check_field_offset(lv, s2973c12f1, ABISELECT(32,16), "S2973C12.s2973c12f1");
    check_field_offset(lv, s2973c12f2, ABISELECT(48,20), "S2973C12.s2973c12f2");
    check_field_offset(lv, s2973c12f3, ABISELECT(176,116), "S2973C12.s2973c12f3");
    check_field_offset(lv, s2973c12f4, ABISELECT(256,152), "S2973C12.s2973c12f4");
    check_field_offset(lv, s2973c12f5, ABISELECT(1424,1008), "S2973C12.s2973c12f5");
    check_field_offset(lv, s2973c12f6, ABISELECT(1428,1012), "S2973C12.s2973c12f6");
    check_field_offset(lv, s2973c12f7, ABISELECT(1440,1016), "S2973C12.s2973c12f7");
    check_field_offset(lv, s2973c12f8, ABISELECT(1504,1064), "S2973C12.s2973c12f8");
    check_field_offset(lv, s2973c12f9, ABISELECT(1508,1068), "S2973C12.s2973c12f9");
    test_class_info(&lv, &cd_S2973C12);
    dp->~S2973C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C12(Test_S2973C12, "S2973C12", ABISELECT(1520,1072));

#else // __cplusplus

extern void _ZN8S2973C12C1Ev();
extern void _ZN8S2973C12D1Ev();
Name_Map name_map_S2973C12[] = {
  NSPAIR(_ZN8S2973C12C1Ev),
  NSPAIR(_ZN8S2973C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2973C12[];
extern void _ZN8S2973C123v12Ev();
static  VTBL_ENTRY vtc_S2973C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C12[0]),
  (VTBL_ENTRY)&_ZN8S2973C123v12Ev,
};
extern VTBL_ENTRY _ZTI8S2973C12[];
extern  VTBL_ENTRY _ZTV8S2973C12[];
Class_Descriptor cd_S2973C12 = {  "S2973C12", // class name
  0,0,//no base classes
  &(vtc_S2973C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1520,1072), // object size
  NSPAIRA(_ZTI8S2973C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2973C12),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  S2973C11  : S2973C3 , S2973C9 , S19921C8 {
  ::S19921C7 s2973c11f0;
  char s2973c11f1;
  char s2973c11f2;
  ::S2973C8 s2973c11f3;
  ::S2973C12 s2973c11f4;
  int s2973c11f5;
  long s2973c11f6;
  virtual void  v8(); // _ZN8S2973C112v8Ev
  virtual void  v9(); // _ZN8S2973C112v9Ev
  ~S2973C11(); // tgen
  S2973C11(); // tgen
};
//SIG(-1 S2973C11) C1{ BC2{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC6{ v5 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC7{ BC8{ BC2 v6 v7 v8 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl FL} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC11{ BC6 v10 FC6 FC6 FU4} Fc:8 FL FD FC12{ BC6 v11 v12 v13 FC6 Fi FC6 Fi Fc[6] Fc:4 Fp FC6 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S2973C11 ::v8(){vfunc_called(this, "_ZN8S2973C112v8Ev");}
void  S2973C11 ::v9(){vfunc_called(this, "_ZN8S2973C112v9Ev");}
S2973C11 ::~S2973C11(){ note_dtor("S2973C11", this);} // tgen
S2973C11 ::S2973C11(){ note_ctor("S2973C11", this);} // tgen

static void Test_S2973C11()
{
  extern Class_Descriptor cd_S2973C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,716)];
    init_test(&cd_S2973C11, buf);
    S2973C11 *dp, &lv = *(dp=new (buf) S2973C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2860), "sizeof(S2973C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C11)");
    /*is_ambiguous_... S2973C11::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*), 0, "S2973C11");
    check_base_class_offset(lv, (S2973C3*)(S2973C9*), ABISELECT(128,100), "S2973C11");
    check_base_class_offset(lv, (S2973C9*), ABISELECT(128,100), "S2973C11");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(544,428), "S2973C11");
    check_field_offset(lv, s2973c11f0, ABISELECT(832,656), "S2973C11.s2973c11f0");
    check_field_offset(lv, s2973c11f1, ABISELECT(864,684), "S2973C11.s2973c11f1");
    check_field_offset(lv, s2973c11f2, ABISELECT(865,685), "S2973C11.s2973c11f2");
    check_field_offset(lv, s2973c11f3, ABISELECT(880,688), "S2973C11.s2973c11f3");
    check_field_offset(lv, s2973c11f4, ABISELECT(2304,1780), "S2973C11.s2973c11f4");
    check_field_offset(lv, s2973c11f5, ABISELECT(3824,2852), "S2973C11.s2973c11f5");
    check_field_offset(lv, s2973c11f6, ABISELECT(3832,2856), "S2973C11.s2973c11f6");
    test_class_info(&lv, &cd_S2973C11);
    dp->~S2973C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C11(Test_S2973C11, "S2973C11", ABISELECT(3840,2860));

#else // __cplusplus

extern void _ZN8S2973C11C1Ev();
extern void _ZN8S2973C11D1Ev();
Name_Map name_map_S2973C11[] = {
  NSPAIR(_ZN8S2973C11C1Ev),
  NSPAIR(_ZN8S2973C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S2973C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2973C3,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2973C9,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2973C11[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C112v8Ev();
extern void _ZN8S2973C112v9Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY vtc_S2973C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C11[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v9Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2973C11[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern VTBL_ENTRY _ZTI8S2973C11[];
extern  VTBL_ENTRY _ZTV8S2973C11[];
Class_Descriptor cd_S2973C11 = {  "S2973C11", // class name
  bases_S2973C11, 4,
  &(vtc_S2973C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2860), // object size
  NSPAIRA(_ZTI8S2973C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2973C11),9, //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  S2973C14  : S2973C3 , virtual S2973C2 , virtual S2973C9 , S2973C8 , S19921C8 {
  int s2973c14f0;
  virtual void  v10(); // _ZN8S2973C143v10Ev
  ~S2973C14(); // tgen
  S2973C14(); // tgen
};
//SIG(-1 S2973C14) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC8{ v7 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} BC2 VBC4 Fl FL} BC7 v1 Fi}


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

static void Test_S2973C14()
{
  extern Class_Descriptor cd_S2973C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,463)];
    init_test(&cd_S2973C14, buf);
    S2973C14 *dp, &lv = *(dp=new (buf) S2973C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1848), "sizeof(S2973C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C14)");
    /*is_ambiguous_... S2973C14::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*), 0, "S2973C14");
    /*is_ambiguous_... S2973C14::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*), ABISELECT(1136,868), "S2973C14");
    /*is_ambiguous_... S2973C14::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C2*), ABISELECT(1136,868), "S2973C14");
    check_base_class_offset(lv, (S2973C3*)(S2973C9*), ABISELECT(1712,1292), "S2973C14");
    check_base_class_offset(lv, (S2973C9*), ABISELECT(1712,1292), "S2973C14");
    check_base_class_offset(lv, (S2973C9*)(S2973C8*), ABISELECT(1712,1292), "S2973C14");
    check_base_class_offset(lv, (S2973C3*)(S2973C2*)(S2973C8*), ABISELECT(128,100), "S2973C14");
    check_base_class_offset(lv, (S2973C2*)(S2973C8*), ABISELECT(128,100), "S2973C14");
    check_base_class_offset(lv, (S19921C8*)(S2973C8*), ABISELECT(2128,1620), "S2973C14");
    /*is_ambiguous_... S2973C8::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C8*), ABISELECT(704,524), "S2973C14");
    check_base_class_offset(lv, (S2973C8*), ABISELECT(128,100), "S2973C14");
    /*is_ambiguous_... S2973C14::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(848,636), "S2973C14");
    check_field_offset(lv, s2973c14f0, ABISELECT(1132,864), "S2973C14.s2973c14f0");
    test_class_info(&lv, &cd_S2973C14);
    dp->~S2973C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C14(Test_S2973C14, "S2973C14", ABISELECT(2416,1848));

#else // __cplusplus

extern void _ZN8S2973C14C1Ev();
extern void _ZN8S2973C14D1Ev();
Name_Map name_map_S2973C14[] = {
  NSPAIR(_ZN8S2973C14C1Ev),
  NSPAIR(_ZN8S2973C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C8;
extern VTBL_ENTRY _ZTI7S2973C8[];
extern  VTBL_ENTRY _ZTV7S2973C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C8[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S2973C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C3,    ABISELECT(1136,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(1136,868), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2973C3,    ABISELECT(1712,1292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2973C9,    ABISELECT(1712,1292), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2973C3,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(2128,1620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C3,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2973C8,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(848,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2973C14[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY vtc_S2973C14[] = {
  ABISELECT(2128,1620),
  ABISELECT(1712,1292),
  ABISELECT(1136,868),
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-868),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  0,
  0,
  ABISELECT(-1712,-1292),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern VTBL_ENTRY _ZTV8S2973C14[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__8S2973C14[] = {
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C8__8S2973C14[] = {
  0,
  0,
  ABISELECT(-1584,-1192),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
static  VTT_ENTRY vtt_S2973C14[] = {
  {&(_ZTV8S2973C14[5]),  5,34},
  {&(_tg__ZTV7S2973C8__8S2973C14[4]),  4,8},
  {&(_tg__ZTV7S2973C9__7S2973C8__8S2973C14[4]),  4,6},
  {&(_ZTV8S2973C14[24]),  24,34},
  {&(_ZTV8S2973C14[32]),  32,34},
  {&(_ZTV8S2973C14[11]),  11,34},
};
extern VTBL_ENTRY _ZTI8S2973C14[];
extern  VTBL_ENTRY _ZTV8S2973C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2973C14[];
Class_Descriptor cd_S2973C14 = {  "S2973C14", // class name
  bases_S2973C14, 11,
  &(vtc_S2973C14[0]), // expected_vtbl_contents
  &(vtt_S2973C14[0]), // expected_vtt_contents
  ABISELECT(2416,1848), // object size
  NSPAIRA(_ZTI8S2973C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2973C14),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2973C14),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2973C10  : S2973C11 , S2973C14 , S19921C12 , S19921C8 , virtual S2973C3 {
  void *s2973c10f0;
  long double s2973c10f1;
  int s2973c10f2;
  int s2973c10f3;
  char s2973c10f4[7];
  ~S2973C10(); // tgen
  S2973C10(); // tgen
};
//SIG(-1 S2973C10) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC7{ v9 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC8{ BC9{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl FL} FC10{ v10 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC12{ BC7 v11 FC7 FC7 FU5} Fc:8 FL FD FC13{ BC7 v12 v13 v14 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC14{ BC3 VBC9 VBC4 BC8 BC6 v8 Fi} BC11 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S2973C10()
{
  extern Class_Descriptor cd_S2973C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1482)];
    init_test(&cd_S2973C10, buf);
    S2973C10 *dp, &lv = *(dp=new (buf) S2973C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5924), "sizeof(S2973C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C10)");
    /*is_ambiguous_... S2973C11::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C11*), 0, "S2973C10");
    check_base_class_offset(lv, (S2973C3*)(S2973C9*)(S2973C11*), ABISELECT(128,100), "S2973C10");
    check_base_class_offset(lv, (S2973C9*)(S2973C11*), ABISELECT(128,100), "S2973C10");
    check_base_class_offset(lv, (S19921C8*)(S2973C11*), ABISELECT(544,428), "S2973C10");
    check_base_class_offset(lv, (S2973C11*), 0, "S2973C10");
    /*is_ambiguous_... S2973C14::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C14*), ABISELECT(3840,2860), "S2973C10");
    /*is_ambiguous_... S2973C10::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*), ABISELECT(6480,4844), "S2973C10");
    /*is_ambiguous_... S2973C14::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C2*)(S2973C14*), ABISELECT(6480,4844), "S2973C10");
    /*is_ambiguous_... S2973C10::S2973C9 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C9*), ABISELECT(7056,5268), "S2973C10");
    check_base_class_offset(lv, (S2973C9*)(S2973C14*), ABISELECT(7056,5268), "S2973C10");
    check_base_class_offset(lv, (S2973C9*)(S2973C8*)(S2973C14*), ABISELECT(7056,5268), "S2973C10");
    check_base_class_offset(lv, (S2973C3*)(S2973C2*)(S2973C8*)(S2973C14*), ABISELECT(3968,2960), "S2973C10");
    check_base_class_offset(lv, (S2973C2*)(S2973C8*)(S2973C14*), ABISELECT(3968,2960), "S2973C10");
    check_base_class_offset(lv, (S19921C8*)(S2973C8*)(S2973C14*), ABISELECT(7472,5596), "S2973C10");
    /*is_ambiguous_... S2973C8::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C8*)(S2973C14*), ABISELECT(4544,3384), "S2973C10");
    check_base_class_offset(lv, (S2973C8*)(S2973C14*), ABISELECT(3968,2960), "S2973C10");
    /*is_ambiguous_... S2973C14::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S2973C14*), ABISELECT(4688,3496), "S2973C10");
    check_base_class_offset(lv, (S2973C14*), ABISELECT(3840,2860), "S2973C10");
    check_base_class_offset(lv, (S19921C12*), ABISELECT(4976,3728), "S2973C10");
    /*is_ambiguous_... S2973C10::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(6144,4584), "S2973C10");
    /*is_ambiguous_... S2973C10::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*), ABISELECT(7760,5824), "S2973C10");
    check_field_offset(lv, s2973c10f0, ABISELECT(6432,4812), "S2973C10.s2973c10f0");
    check_field_offset(lv, s2973c10f1, ABISELECT(6448,4816), "S2973C10.s2973c10f1");
    check_field_offset(lv, s2973c10f2, ABISELECT(6464,4828), "S2973C10.s2973c10f2");
    check_field_offset(lv, s2973c10f3, ABISELECT(6468,4832), "S2973C10.s2973c10f3");
    check_field_offset(lv, s2973c10f4, ABISELECT(6472,4836), "S2973C10.s2973c10f4");
    test_class_info(&lv, &cd_S2973C10);
    dp->~S2973C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C10(Test_S2973C10, "S2973C10", ABISELECT(7888,5924));

#else // __cplusplus

extern void _ZN8S2973C10C1Ev();
extern void _ZN8S2973C10D1Ev();
Name_Map name_map_S2973C10[] = {
  NSPAIR(_ZN8S2973C10C1Ev),
  NSPAIR(_ZN8S2973C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C11;
extern VTBL_ENTRY _ZTI8S2973C11[];
extern  VTBL_ENTRY _ZTV8S2973C11[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C8;
extern VTBL_ENTRY _ZTI7S2973C8[];
extern  VTBL_ENTRY _ZTV7S2973C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C8[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C14;
extern VTBL_ENTRY _ZTI8S2973C14[];
extern  VTBL_ENTRY _ZTV8S2973C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2973C14[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
static Base_Class bases_S2973C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2973C3,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2973C9,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2973C3,    ABISELECT(3840,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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_S2973C3,    ABISELECT(6480,4844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C2,    ABISELECT(6480,4844), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2973C3,    ABISELECT(7056,5268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C9,    ABISELECT(7056,5268), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2973C3,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7472,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C3,    ABISELECT(4544,3384), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2973C8,    ABISELECT(3968,2960), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(4688,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C14,    ABISELECT(3840,2860), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C12,    ABISELECT(4976,3728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(6144,4584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2973C3,    ABISELECT(7760,5824), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2973C10[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C112v8Ev();
extern void _ZN8S2973C112v9Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY vtc_S2973C10[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v9Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(-4544,-3384),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S2973C10[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C14__8S2973C10[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C88S2973C14__8S2973C10[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C88S2973C14__8S2973C10[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C2__8S2973C14__8S2973C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__8S2973C14__8S2973C10[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__8S2973C14__8S2973C10[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
static  VTT_ENTRY vtt_S2973C10[] = {
  {&(_ZTV8S2973C10[6]),  6,51},
  {&(_tg__ZTV8S2973C14__8S2973C10[5]),  5,7},
  {&(_tg__ZTV7S2973C88S2973C14__8S2973C10[4]),  4,8},
  {&(_tg__ZTV7S2973C9__7S2973C88S2973C14__8S2973C10[4]),  4,6},
  {&(_tg__ZTV7S2973C2__8S2973C14__8S2973C10[6]),  6,10},
  {&(_tg__ZTV7S2973C9__8S2973C14__8S2973C10[4]),  4,6},
  {&(_tg__ZTV7S2973C8__8S2973C14__8S2973C10[4]),  4,8},
  {&(_ZTV8S2973C10[18]),  18,51},
  {&(_ZTV8S2973C10[37]),  37,51},
  {&(_ZTV8S2973C10[45]),  45,51},
  {&(_ZTV8S2973C10[24]),  24,51},
  {&(_ZTV8S2973C10[50]),  50,51},
};
extern VTBL_ENTRY _ZTI8S2973C10[];
extern  VTBL_ENTRY _ZTV8S2973C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2973C10[];
Class_Descriptor cd_S2973C10 = {  "S2973C10", // class name
  bases_S2973C10, 20,
  &(vtc_S2973C10[0]), // expected_vtbl_contents
  &(vtt_S2973C10[0]), // expected_vtt_contents
  ABISELECT(7888,5924), // object size
  NSPAIRA(_ZTI8S2973C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2973C10),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2973C10),12, //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  S2973C4  : S2973C3 , virtual S19921C8 , S2973C2 , S2973C7 , S2973C10 {
  __tsi64 s2973c4f0;
  char s2973c4f1:2;
  __tsi64 s2973c4f2;
  ::S2973C9 s2973c4f3;
  __tsi64 s2973c4f4[2];
  virtual  ~S2973C4(); // _ZN7S2973C4D2Ev
  virtual void  v11(); // _ZN7S2973C43v11Ev
  S2973C4(); // tgen
};
//SIG(-1 S2973C4) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} VBC3{ m Fc FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC5{ v12 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU4[3] Fc} BC6{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} BC7{ VBC3 VBC8{ BC6 VBC3 BC2 VBC9{ BC2 v6 FC2 FC2 FU4} Fl FL} vd v7 v8 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} BC10{ BC11{ BC2 BC9 BC3 v9 v10 FU4 Fc Fc FC8 FC12{ v13 FD Fp FD[8] Fp[9] FC13{ m FD Fp[10] FD Fi:0 Fi FD FC14{ BC5 v14 FC5 FC5 FU4} Fc:8 FL FD FC15{ BC5 v15 v16 v17 FC5 Fi FC5 Fi Fc[6] Fc:4 Fp FC5 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC16{ BC2 VBC6 VBC9 BC8 BC3 v11 Fi} BC13 BC3 VBC2 Fp FD Fi Fi Fc[7]} vd v1 FL Fc:2 FL FC9 FL[2]}


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

static void Test_S2973C4()
{
  extern Class_Descriptor cd_S2973C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(618,1857)];
    init_test(&cd_S2973C4, buf);
    S2973C4 *dp, &lv = *(dp=new (buf) S2973C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9872,7424), "sizeof(S2973C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C4)");
    /*is_ambiguous_... S2973C4::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*), 0, "S2973C4");
    /*is_ambiguous_... S2973C4::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(7744,5808), "S2973C4");
    check_base_class_offset(lv, (S19921C8*)(S2973C7*), ABISELECT(7744,5808), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S2973C8*), ABISELECT(7744,5808), "S2973C4");
    check_base_class_offset(lv, (S19921C8*)(S2973C8*)(S2973C14*)(S2973C10*), ABISELECT(7744,5808), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*), ABISELECT(128,100), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C2*), ABISELECT(128,100), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C8 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*)(S2973C8*), ABISELECT(8032,6036), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C8 */ AMB_check_base_class_offset(lv, (S2973C2*)(S2973C8*), ABISELECT(8032,6036), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C8 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C8*), ABISELECT(8608,6460), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C9 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C9*), ABISELECT(8752,6572), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C8 */ AMB_check_base_class_offset(lv, (S2973C9*)(S2973C8*), ABISELECT(8752,6572), "S2973C4");
    check_base_class_offset(lv, (S2973C9*)(S2973C14*)(S2973C10*), ABISELECT(8752,6572), "S2973C4");
    check_base_class_offset(lv, (S2973C9*)(S2973C8*)(S2973C14*)(S2973C10*), ABISELECT(8752,6572), "S2973C4");
    check_base_class_offset(lv, (S2973C8*)(S2973C7*), ABISELECT(8032,6036), "S2973C4");
    check_base_class_offset(lv, (S2973C7*), ABISELECT(696,524), "S2973C4");
    /*is_ambiguous_... S2973C11::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C11*)(S2973C10*), ABISELECT(800,600), "S2973C4");
    check_base_class_offset(lv, (S2973C3*)(S2973C9*)(S2973C11*)(S2973C10*), ABISELECT(928,700), "S2973C4");
    check_base_class_offset(lv, (S2973C9*)(S2973C11*)(S2973C10*), ABISELECT(928,700), "S2973C4");
    check_base_class_offset(lv, (S19921C8*)(S2973C11*)(S2973C10*), ABISELECT(1344,1028), "S2973C4");
    check_base_class_offset(lv, (S2973C11*)(S2973C10*), ABISELECT(800,600), "S2973C4");
    /*is_ambiguous_... S2973C14::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C14*)(S2973C10*), ABISELECT(4640,3460), "S2973C4");
    /*is_ambiguous_... S2973C4::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*), ABISELECT(9168,6900), "S2973C4");
    /*is_ambiguous_... S2973C14::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C2*)(S2973C14*)(S2973C10*), ABISELECT(9168,6900), "S2973C4");
    check_base_class_offset(lv, (S2973C3*)(S2973C2*)(S2973C8*)(S2973C14*)(S2973C10*), ABISELECT(4768,3560), "S2973C4");
    check_base_class_offset(lv, (S2973C2*)(S2973C8*)(S2973C14*)(S2973C10*), ABISELECT(4768,3560), "S2973C4");
    /*is_ambiguous_... S2973C8::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C8*)(S2973C14*)(S2973C10*), ABISELECT(5344,3984), "S2973C4");
    check_base_class_offset(lv, (S2973C8*)(S2973C14*)(S2973C10*), ABISELECT(4768,3560), "S2973C4");
    /*is_ambiguous_... S2973C14::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S2973C14*)(S2973C10*), ABISELECT(5488,4096), "S2973C4");
    check_base_class_offset(lv, (S2973C14*)(S2973C10*), ABISELECT(4640,3460), "S2973C4");
    check_base_class_offset(lv, (S19921C12*)(S2973C10*), ABISELECT(5776,4328), "S2973C4");
    /*is_ambiguous_... S2973C10::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S2973C10*), ABISELECT(6944,5184), "S2973C4");
    /*is_ambiguous_... S2973C10::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C10*), ABISELECT(9744,7324), "S2973C4");
    check_base_class_offset(lv, (S2973C10*), ABISELECT(800,600), "S2973C4");
    check_field_offset(lv, s2973c4f0, ABISELECT(7280,5444), "S2973C4.s2973c4f0");
    set_bf_and_test(lv, s2973c4f1, ABISELECT(7288,5452), 0, 2, 1, "S2973C4");
    set_bf_and_test(lv, s2973c4f1, ABISELECT(7288,5452), 0, 2, hide_sll(1LL<<1), "S2973C4");
    check_field_offset(lv, s2973c4f2, ABISELECT(7296,5456), "S2973C4.s2973c4f2");
    check_field_offset(lv, s2973c4f3, ABISELECT(7312,5464), "S2973C4.s2973c4f3");
    check_field_offset(lv, s2973c4f4, ABISELECT(7728,5792), "S2973C4.s2973c4f4");
    test_class_info(&lv, &cd_S2973C4);
    dp->~S2973C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C4(Test_S2973C4, "S2973C4", ABISELECT(9872,7424));

#else // __cplusplus

extern void _ZN7S2973C4C1Ev();
extern void _ZN7S2973C4D2Ev();
Name_Map name_map_S2973C4[] = {
  NSPAIR(_ZN7S2973C4C1Ev),
  NSPAIR(_ZN7S2973C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S2973C8;
extern VTBL_ENTRY _ZTI7S2973C8[];
extern  VTBL_ENTRY _ZTV7S2973C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C8[];
extern Class_Descriptor cd_S2973C7;
extern VTBL_ENTRY _ZTI7S2973C7[];
extern  VTBL_ENTRY _ZTV7S2973C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C7[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C11;
extern VTBL_ENTRY _ZTI8S2973C11[];
extern  VTBL_ENTRY _ZTV8S2973C11[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C8;
extern VTBL_ENTRY _ZTI7S2973C8[];
extern  VTBL_ENTRY _ZTV7S2973C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C8[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C14;
extern VTBL_ENTRY _ZTI8S2973C14[];
extern  VTBL_ENTRY _ZTV8S2973C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2973C14[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C10;
extern VTBL_ENTRY _ZTI8S2973C10[];
extern  VTBL_ENTRY _ZTV8S2973C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2973C10[];
static Base_Class bases_S2973C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C8,    ABISELECT(7744,5808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2973C3,    ABISELECT(128,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
    11, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(128,100), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2973C3,    ABISELECT(8032,6036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C2,    ABISELECT(8032,6036), //bcp->offset
    -1, //bcp->virtual_function_table_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_S2973C3,    ABISELECT(8608,6460), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(8752,6572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C9,    ABISELECT(8752,6572), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 1},
  {&cd_S2973C8,    ABISELECT(8032,6036), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2973C7,    ABISELECT(696,524), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2973C3,    ABISELECT(800,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
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(928,700), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S2973C9,    ABISELECT(928,700), //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
    16, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(1344,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2973C11,    ABISELECT(800,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
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(4640,3460), //bcp->offset
    -1, //bcp->virtual_function_table_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_S2973C3,    ABISELECT(9168,6900), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(9168,6900), //bcp->offset
    78, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2973C3,    ABISELECT(4768,3560), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(4768,3560), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(5344,3984), //bcp->offset
    54, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S2973C8,    ABISELECT(4768,3560), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(5488,4096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C14,    ABISELECT(4640,3460), //bcp->offset
    39, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(5776,4328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(6944,5184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C3,    ABISELECT(9744,7324), //bcp->offset
    88, //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
    9, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2973C10,    ABISELECT(800,600), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2973C4[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C4D1Ev();
extern void _ZN7S2973C4D0Ev();
extern void _ZN7S2973C43v11Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void ABISELECT(_ZThn696_N7S2973C4D1Ev,_ZThn524_N7S2973C4D1Ev)();
extern void ABISELECT(_ZThn696_N7S2973C4D0Ev,_ZThn524_N7S2973C4D0Ev)();
extern void _ZN7S2973C72v6Ev();
extern void _ZN7S2973C72v7Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C112v8Ev();
extern void _ZN8S2973C112v9Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY vtc_S2973C4[] = {
  ABISELECT(9744,7324),
  ABISELECT(9168,6900),
  ABISELECT(8752,6572),
  ABISELECT(8032,6036),
  ABISELECT(7744,5808),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2973C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2973C43v11Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(8056,6048),
  ABISELECT(7336,5512),
  ABISELECT(7048,5284),
  ABISELECT(-696,-524),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn696_N7S2973C4D1Ev,_ZThn524_N7S2973C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn696_N7S2973C4D0Ev,_ZThn524_N7S2973C4D0Ev),
  (VTBL_ENTRY)&_ZN7S2973C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v7Ev,
  ABISELECT(8944,6724),
  ABISELECT(6944,5208),
  ABISELECT(7952,5972),
  ABISELECT(8368,6300),
  ABISELECT(-800,-600),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v9Ev,
  ABISELECT(-928,-700),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
  ABISELECT(3104,2348),
  ABISELECT(4112,3112),
  ABISELECT(4528,3440),
  ABISELECT(-4640,-3460),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  ABISELECT(-4768,-3560),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(-5344,-3984),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  ABISELECT(-8032,-6036),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(-8608,-6460),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  0,
  ABISELECT(-8752,-6572),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9168,-6900),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  0,
  ABISELECT(-9744,-7324),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S2973C4[];
extern void _ZN7S2973C7D1Ev();
extern void _ZN7S2973C7D0Ev();
extern void _ZN7S2973C72v6Ev();
extern void _ZN7S2973C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C7__7S2973C4[] = {
  ABISELECT(8056,6048),
  ABISELECT(7336,5512),
  ABISELECT(7048,5284),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2973C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v7Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__7S2973C7__7S2973C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  ABISELECT(-7336,-5512),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C37S2973C8__A1__7S2973C7__7S2973C4[] = {
  ABISELECT(-7912,-5936),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C7__7S2973C4[] = {
  0,
  0,
  ABISELECT(-8056,-6048),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C112v8Ev();
extern void _ZN8S2973C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C10__7S2973C4[] = {
  ABISELECT(8944,6724),
  ABISELECT(6944,5208),
  ABISELECT(7952,5972),
  ABISELECT(8368,6300),
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v9Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C148S2973C10__7S2973C4[] = {
  ABISELECT(3104,2348),
  ABISELECT(4112,3112),
  ABISELECT(4528,3440),
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C88S2973C148S2973C10__A1__7S2973C4[] = {
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C88S2973C148S2973C10__A1__7S2973C4[] = {
  0,
  0,
  ABISELECT(-3984,-3012),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C2__8S2973C148S2973C10__7S2973C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-4528,-3440),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__8S2973C148S2973C10__7S2973C4[] = {
  0,
  0,
  ABISELECT(-4112,-3112),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__8S2973C148S2973C10__7S2973C4[] = {
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C14__8S2973C10__7S2973C4[] = {
  ABISELECT(3104,2348),
  ABISELECT(4112,3112),
  ABISELECT(4528,3440),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C2__8S2973C10__7S2973C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-8368,-6300),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__A1__8S2973C10__7S2973C4[] = {
  0,
  0,
  ABISELECT(-7952,-5972),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C88S2973C14__8S2973C10__7S2973C4[] = {
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C3__A7__8S2973C10__7S2973C4[] = {
  0,
  ABISELECT(-8944,-6724),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__7S2973C4[] = {
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C8__7S2973C4[] = {
  0,
  0,
  ABISELECT(-720,-536),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
static  VTT_ENTRY vtt_S2973C4[] = {
  {&(_ZTV7S2973C4[7]),  7,92},
  {&(_tg__ZTV7S2973C7__7S2973C4[5]),  5,9},
  {&(_tg__ZTV7S2973C8__7S2973C7__7S2973C4[8]),  8,12},
  {&(_tg__ZTV7S2973C37S2973C8__A1__7S2973C7__7S2973C4[2]),  2,3},
  {&(_tg__ZTV7S2973C9__7S2973C7__7S2973C4[4]),  4,6},
  {&(_tg__ZTV8S2973C10__7S2973C4[6]),  6,9},
  {&(_tg__ZTV8S2973C148S2973C10__7S2973C4[5]),  5,7},
  {&(_tg__ZTV7S2973C88S2973C148S2973C10__A1__7S2973C4[4]),  4,8},
  {&(_tg__ZTV7S2973C9__7S2973C88S2973C148S2973C10__A1__7S2973C4[4]),  4,6},
  {&(_tg__ZTV7S2973C2__8S2973C148S2973C10__7S2973C4[6]),  6,10},
  {&(_tg__ZTV7S2973C9__8S2973C148S2973C10__7S2973C4[4]),  4,6},
  {&(_tg__ZTV7S2973C8__8S2973C148S2973C10__7S2973C4[4]),  4,8},
  {&(_tg__ZTV8S2973C14__8S2973C10__7S2973C4[5]),  5,7},
  {&(_tg__ZTV7S2973C2__8S2973C10__7S2973C4[6]),  6,10},
  {&(_tg__ZTV7S2973C9__A1__8S2973C10__7S2973C4[4]),  4,6},
  {&(_tg__ZTV7S2973C88S2973C14__8S2973C10__7S2973C4[4]),  4,8},
  {&(_tg__ZTV7S2973C3__A7__8S2973C10__7S2973C4[3]),  3,4},
  {&(_ZTV7S2973C4[22]),  22,92},
  {&(_ZTV7S2973C4[65]),  65,92},
  {&(_ZTV7S2973C4[71]),  71,92},
  {&(_ZTV7S2973C4[76]),  76,92},
  {&(_ZTV7S2973C4[32]),  32,92},
  {&(_ZTV7S2973C4[44]),  44,92},
  {&(_ZTV7S2973C4[84]),  84,92},
  {&(_ZTV7S2973C4[50]),  50,92},
  {&(_ZTV7S2973C4[91]),  91,92},
  {&(_tg__ZTV7S2973C8__7S2973C4[4]),  4,8},
  {&(_tg__ZTV7S2973C9__7S2973C8__7S2973C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S2973C4[];
extern  VTBL_ENTRY _ZTV7S2973C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C4[];
Class_Descriptor cd_S2973C4 = {  "S2973C4", // class name
  bases_S2973C4, 29,
  &(vtc_S2973C4[0]), // expected_vtbl_contents
  &(vtt_S2973C4[0]), // expected_vtt_contents
  ABISELECT(9872,7424), // object size
  NSPAIRA(_ZTI7S2973C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2973C4),92, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2973C4),28, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2973C15  : S2973C12 {
  ::S2973C4 s2973c15f0;
  int s2973c15f1;
  char s2973c15f2;
  int s2973c15f3;
  long double s2973c15f4;
  __tsi64 s2973c15f5[4];
  __tsi64 s2973c15f6:52;
  __tsi64 s2973c15f7;
  int s2973c15f8;
  short s2973c15f9;
  short s2973c15f10;
  ::S19921C8 s2973c15f11;
  virtual  ~S2973C15(); // _ZN8S2973C15D1Ev
  S2973C15(); // tgen
};
//SIG(-1 S2973C15) C1{ BC2{ v1 FD Fp FD[8] Fp[9] FC3{ m FD Fp[10] FD Fi:0 Fi FD FC4{ BC5{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} v2 FC5 FC5 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 FL FD FC7{ BC5 v4 v5 v6 FC5 Fi FC5 Fi Fc[6] Fc:4 Fp FC5 Fi}} Fi Fc FD[4] Fc Fi} vd FC8{ BC9{ v8 FL[8] Fc[4] Fi:7 Fi FD FL} VBC10{ m Fc FU6 FC5 FL FU6[3] Fc} BC11{ BC9 v9 v10 v11 FC9 Fi FC9 Fi Fc[6] Fc:4 Fp FC9 Fi} BC12{ VBC10 VBC13{ BC11 VBC10 BC9 VBC14{ BC9 v12 FC9 FC9 FU6} Fl FL} vd v13 v14 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} BC15{ BC16{ BC9 BC14 BC10 v15 v16 FU6 Fc Fc FC13 FC2 Fi Fl} BC17{ BC9 VBC11 VBC14 BC13 BC10 v17 Fi} BC3 BC10 VBC9 Fp FD Fi Fi Fc[7]} vd v7 FL Fc:2 FL FC14 FL[2]} Fi Fc Fi FD FL[4] FL:52 FL Fi Fs Fs FC10}


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

static void Test_S2973C15()
{
  extern Class_Descriptor cd_S2973C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(737,2202)];
    init_test(&cd_S2973C15, buf);
    S2973C15 *dp, &lv = *(dp=new (buf) S2973C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11776,8804), "sizeof(S2973C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C15)");
    check_base_class_offset(lv, (S2973C12*), 0, "S2973C15");
    check_field_offset(lv, s2973c15f0, ABISELECT(1520,1072), "S2973C15.s2973c15f0");
    check_field_offset(lv, s2973c15f1, ABISELECT(11392,8496), "S2973C15.s2973c15f1");
    check_field_offset(lv, s2973c15f2, ABISELECT(11396,8500), "S2973C15.s2973c15f2");
    check_field_offset(lv, s2973c15f3, ABISELECT(11400,8504), "S2973C15.s2973c15f3");
    check_field_offset(lv, s2973c15f4, ABISELECT(11408,8508), "S2973C15.s2973c15f4");
    check_field_offset(lv, s2973c15f5, ABISELECT(11424,8520), "S2973C15.s2973c15f5");
    set_bf_and_test(lv, s2973c15f6, ABISELECT(11456,8552), 0, 52, 1, "S2973C15");
    set_bf_and_test(lv, s2973c15f6, ABISELECT(11456,8552), 0, 52, hide_sll(1LL<<51), "S2973C15");
    check_field_offset(lv, s2973c15f7, ABISELECT(11464,8560), "S2973C15.s2973c15f7");
    check_field_offset(lv, s2973c15f8, ABISELECT(11472,8568), "S2973C15.s2973c15f8");
    check_field_offset(lv, s2973c15f9, ABISELECT(11476,8572), "S2973C15.s2973c15f9");
    check_field_offset(lv, s2973c15f10, ABISELECT(11478,8574), "S2973C15.s2973c15f10");
    check_field_offset(lv, s2973c15f11, ABISELECT(11488,8576), "S2973C15.s2973c15f11");
    test_class_info(&lv, &cd_S2973C15);
    dp->~S2973C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C15(Test_S2973C15, "S2973C15", ABISELECT(11776,8804));

#else // __cplusplus

extern void _ZN8S2973C15C1Ev();
extern void _ZN8S2973C15D1Ev();
Name_Map name_map_S2973C15[] = {
  NSPAIR(_ZN8S2973C15C1Ev),
  NSPAIR(_ZN8S2973C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C12;
extern VTBL_ENTRY _ZTI8S2973C12[];
extern  VTBL_ENTRY _ZTV8S2973C12[];
static Base_Class bases_S2973C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2973C15[];
extern void _ZN8S2973C123v12Ev();
extern void _ZN8S2973C15D1Ev();
extern void _ZN8S2973C15D0Ev();
static  VTBL_ENTRY vtc_S2973C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C15[0]),
  (VTBL_ENTRY)&_ZN8S2973C123v12Ev,
  (VTBL_ENTRY)&_ZN8S2973C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2973C15D0Ev,
};
extern VTBL_ENTRY _ZTI8S2973C15[];
extern  VTBL_ENTRY _ZTV8S2973C15[];
Class_Descriptor cd_S2973C15 = {  "S2973C15", // class name
  bases_S2973C15, 1,
  &(vtc_S2973C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(11776,8804), // object size
  NSPAIRA(_ZTI8S2973C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2973C15),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  S2973C16  {
  ::S2973C9 s2973c16f0;
  int s2973c16f1[7];
  int s2973c16f2;
  void *s2973c16f3;
  int s2973c16f4;
  virtual void  v13(); // _ZN8S2973C163v13Ev
  ~S2973C16(); // tgen
  S2973C16(); // tgen
};
//SIG(-1 S2973C16) C1{ v1 FC2{ BC3{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} v2 FC3 FC3 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fi[7] Fi Fp Fi}


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

static void Test_S2973C16()
{
  extern Class_Descriptor cd_S2973C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,94)];
    init_test(&cd_S2973C16, buf);
    S2973C16 *dp, &lv = *(dp=new (buf) S2973C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,372), "sizeof(S2973C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C16)");
    check_field_offset(lv, s2973c16f0, ABISELECT(16,4), "S2973C16.s2973c16f0");
    check_field_offset(lv, s2973c16f1, ABISELECT(432,332), "S2973C16.s2973c16f1");
    check_field_offset(lv, s2973c16f2, ABISELECT(460,360), "S2973C16.s2973c16f2");
    check_field_offset(lv, s2973c16f3, ABISELECT(464,364), "S2973C16.s2973c16f3");
    check_field_offset(lv, s2973c16f4, ABISELECT(472,368), "S2973C16.s2973c16f4");
    test_class_info(&lv, &cd_S2973C16);
    dp->~S2973C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C16(Test_S2973C16, "S2973C16", ABISELECT(480,372));

#else // __cplusplus

extern void _ZN8S2973C16C1Ev();
extern void _ZN8S2973C16D1Ev();
Name_Map name_map_S2973C16[] = {
  NSPAIR(_ZN8S2973C16C1Ev),
  NSPAIR(_ZN8S2973C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2973C16[];
extern void _ZN8S2973C163v13Ev();
static  VTBL_ENTRY vtc_S2973C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C16[0]),
  (VTBL_ENTRY)&_ZN8S2973C163v13Ev,
};
extern VTBL_ENTRY _ZTI8S2973C16[];
extern  VTBL_ENTRY _ZTV8S2973C16[];
Class_Descriptor cd_S2973C16 = {  "S2973C16", // class name
  0,0,//no base classes
  &(vtc_S2973C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,372), // object size
  NSPAIRA(_ZTI8S2973C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2973C16),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  S2973C1  : S2973C2 , virtual S2973C4 , S2973C15 , virtual S2973C16 {
  short s2973c1f0;
  void *s2973c1f1[5];
  long double s2973c1f2;
  ::S2973C11 s2973c1f3[9];
  virtual  ~S2973C1(); // _ZN7S2973C1D2Ev
  S2973C1(); // tgen
};
//SIG(1 S2973C1) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ BC3 VBC5{ m Fc FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC7{ v15 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU6[3] Fc} BC2 BC8{ VBC5 VBC9{ BC2 VBC5 BC3 VBC10{ BC3 v5 FC3 FC3 FU6} Fl FL} vd v6 v7 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} BC11{ BC12{ BC3 BC10 BC5 v8 v9 FU6 Fc Fc FC9 FC13{ v12 FD Fp FD[8] Fp[9] FC14{ m FD Fp[10] FD Fi:0 Fi FD FC15{ BC7 v14 FC7 FC7 FU6} Fc:8 FL FD FC16{ BC7 v16 v17 v18 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC17{ BC3 VBC2 VBC10 BC9 BC5 v10 Fi} BC14 BC5 VBC3 Fp FD Fi Fi Fc[7]} vd v11 FL Fc:2 FL FC10 FL[2]} BC18{ BC13 vd FC4 Fi Fc Fi FD FL[4] FL:52 FL Fi Fs Fs FC5} VBC19{ v13 FC10 Fi[7] Fi Fp Fi} vd Fs Fp[5] FD FC12[9]}


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

static void Test_S2973C1()
{
  extern Class_Descriptor cd_S2973C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3584,10701)];
    init_test(&cd_S2973C1, buf);
    S2973C1 *dp, &lv = *(dp=new (buf) S2973C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(57328,42800), "sizeof(S2973C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2973C1)");
    /*is_ambiguous_... S2973C1::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*), 0, "S2973C1");
    /*is_ambiguous_... S2973C1::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C2*), 0, "S2973C1");
    /*is_ambiguous_... S2973C4::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C4*), ABISELECT(46976,35004), "S2973C1");
    /*is_ambiguous_... S2973C4::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S2973C4*), ABISELECT(54720,40812), "S2973C1");
    check_base_class_offset(lv, (S19921C8*)(S2973C7*)(S2973C4*), ABISELECT(54720,40812), "S2973C1");
    /*is_ambiguous_... S2973C1::S2973C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S2973C8*), ABISELECT(54720,40812), "S2973C1");
    check_base_class_offset(lv, (S19921C8*)(S2973C8*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(54720,40812), "S2973C1");
    /*is_ambiguous_... S2973C4::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*)(S2973C4*), ABISELECT(47104,35104), "S2973C1");
    /*is_ambiguous_... S2973C4::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C2*)(S2973C4*), ABISELECT(47104,35104), "S2973C1");
    /*is_ambiguous_... S2973C1::S2973C8 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*)(S2973C8*), ABISELECT(55008,41040), "S2973C1");
    /*is_ambiguous_... S2973C1::S2973C8 */ AMB_check_base_class_offset(lv, (S2973C2*)(S2973C8*), ABISELECT(55008,41040), "S2973C1");
    /*is_ambiguous_... S2973C1::S2973C8 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C8*), ABISELECT(55584,41464), "S2973C1");
    /*is_ambiguous_... S2973C1::S2973C9 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C9*), ABISELECT(55728,41576), "S2973C1");
    /*is_ambiguous_... S2973C1::S2973C8 */ AMB_check_base_class_offset(lv, (S2973C9*)(S2973C8*), ABISELECT(55728,41576), "S2973C1");
    check_base_class_offset(lv, (S2973C9*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(55728,41576), "S2973C1");
    check_base_class_offset(lv, (S2973C9*)(S2973C8*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(55728,41576), "S2973C1");
    check_base_class_offset(lv, (S2973C8*)(S2973C7*)(S2973C4*), ABISELECT(55008,41040), "S2973C1");
    check_base_class_offset(lv, (S2973C7*)(S2973C4*), ABISELECT(47672,35528), "S2973C1");
    /*is_ambiguous_... S2973C11::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C11*)(S2973C10*)(S2973C4*), ABISELECT(47776,35604), "S2973C1");
    check_base_class_offset(lv, (S2973C3*)(S2973C9*)(S2973C11*)(S2973C10*)(S2973C4*), ABISELECT(47904,35704), "S2973C1");
    check_base_class_offset(lv, (S2973C9*)(S2973C11*)(S2973C10*)(S2973C4*), ABISELECT(47904,35704), "S2973C1");
    check_base_class_offset(lv, (S19921C8*)(S2973C11*)(S2973C10*)(S2973C4*), ABISELECT(48320,36032), "S2973C1");
    check_base_class_offset(lv, (S2973C11*)(S2973C10*)(S2973C4*), ABISELECT(47776,35604), "S2973C1");
    /*is_ambiguous_... S2973C14::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(51616,38464), "S2973C1");
    /*is_ambiguous_... S2973C1::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C2*), ABISELECT(56144,41904), "S2973C1");
    /*is_ambiguous_... S2973C14::S2973C2 */ AMB_check_base_class_offset(lv, (S2973C2*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(56144,41904), "S2973C1");
    check_base_class_offset(lv, (S2973C3*)(S2973C2*)(S2973C8*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(51744,38564), "S2973C1");
    check_base_class_offset(lv, (S2973C2*)(S2973C8*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(51744,38564), "S2973C1");
    /*is_ambiguous_... S2973C8::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C8*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(52320,38988), "S2973C1");
    check_base_class_offset(lv, (S2973C8*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(51744,38564), "S2973C1");
    /*is_ambiguous_... S2973C14::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(52464,39100), "S2973C1");
    check_base_class_offset(lv, (S2973C14*)(S2973C10*)(S2973C4*), ABISELECT(51616,38464), "S2973C1");
    check_base_class_offset(lv, (S19921C12*)(S2973C10*)(S2973C4*), ABISELECT(52752,39332), "S2973C1");
    /*is_ambiguous_... S2973C10::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S2973C10*)(S2973C4*), ABISELECT(53920,40188), "S2973C1");
    /*is_ambiguous_... S2973C10::S2973C3 */ AMB_check_base_class_offset(lv, (S2973C3*)(S2973C10*)(S2973C4*), ABISELECT(56720,42328), "S2973C1");
    check_base_class_offset(lv, (S2973C10*)(S2973C4*), ABISELECT(47776,35604), "S2973C1");
    check_base_class_offset(lv, (S2973C4*), ABISELECT(46976,35004), "S2973C1");
    check_base_class_offset(lv, (S2973C12*)(S2973C15*), ABISELECT(576,424), "S2973C1");
    check_base_class_offset(lv, (S2973C15*), ABISELECT(576,424), "S2973C1");
    check_base_class_offset(lv, (S2973C16*), ABISELECT(56848,42428), "S2973C1");
    check_field_offset(lv, s2973c1f0, ABISELECT(12352,9228), "S2973C1.s2973c1f0");
    check_field_offset(lv, s2973c1f1, ABISELECT(12360,9232), "S2973C1.s2973c1f1");
    check_field_offset(lv, s2973c1f2, ABISELECT(12400,9252), "S2973C1.s2973c1f2");
    check_field_offset(lv, s2973c1f3, ABISELECT(12416,9264), "S2973C1.s2973c1f3");
    test_class_info(&lv, &cd_S2973C1);
    dp->~S2973C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2973C1(Test_S2973C1, "S2973C1", ABISELECT(57328,42800));

#else // __cplusplus

extern void _ZN7S2973C1C1Ev();
extern void _ZN7S2973C1D2Ev();
Name_Map name_map_S2973C1[] = {
  NSPAIR(_ZN7S2973C1C1Ev),
  NSPAIR(_ZN7S2973C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S2973C8;
extern VTBL_ENTRY _ZTI7S2973C8[];
extern  VTBL_ENTRY _ZTV7S2973C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C8[];
extern Class_Descriptor cd_S2973C7;
extern VTBL_ENTRY _ZTI7S2973C7[];
extern  VTBL_ENTRY _ZTV7S2973C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C7[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C9;
extern VTBL_ENTRY _ZTI7S2973C9[];
extern  VTBL_ENTRY _ZTV7S2973C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C11;
extern VTBL_ENTRY _ZTI8S2973C11[];
extern  VTBL_ENTRY _ZTV8S2973C11[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C2;
extern VTBL_ENTRY _ZTI7S2973C2[];
extern  VTBL_ENTRY _ZTV7S2973C2[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C8;
extern VTBL_ENTRY _ZTI7S2973C8[];
extern  VTBL_ENTRY _ZTV7S2973C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C8[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C14;
extern VTBL_ENTRY _ZTI8S2973C14[];
extern  VTBL_ENTRY _ZTV8S2973C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2973C14[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S2973C3;
extern VTBL_ENTRY _ZTI7S2973C3[];
extern  VTBL_ENTRY _ZTV7S2973C3[];
extern Class_Descriptor cd_S2973C10;
extern VTBL_ENTRY _ZTI8S2973C10[];
extern  VTBL_ENTRY _ZTV8S2973C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2973C10[];
extern Class_Descriptor cd_S2973C4;
extern VTBL_ENTRY _ZTI7S2973C4[];
extern  VTBL_ENTRY _ZTV7S2973C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C4[];
extern Class_Descriptor cd_S2973C12;
extern VTBL_ENTRY _ZTI8S2973C12[];
extern  VTBL_ENTRY _ZTV8S2973C12[];
extern Class_Descriptor cd_S2973C15;
extern VTBL_ENTRY _ZTI8S2973C15[];
extern  VTBL_ENTRY _ZTV8S2973C15[];
extern Class_Descriptor cd_S2973C16;
extern VTBL_ENTRY _ZTI8S2973C16[];
extern  VTBL_ENTRY _ZTV8S2973C16[];
static Base_Class bases_S2973C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    1, //immediately_derived
  0, 0},
  {&cd_S2973C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S2973C3,    ABISELECT(46976,35004), //bcp->offset
    -1, //bcp->virtual_function_table_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
    31, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(54720,40812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C3,    ABISELECT(47104,35104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(47104,35104), //bcp->offset
    43, //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
    12, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(55008,41040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C2,    ABISELECT(55008,41040), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(55584,41464), //bcp->offset
    101, //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
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(55728,41576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C9,    ABISELECT(55728,41576), //bcp->offset
    104, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2973C8,    ABISELECT(55008,41040), //bcp->offset
    89, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2973C7,    ABISELECT(47672,35528), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(47776,35604), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(47904,35704), //bcp->offset
    -1, //bcp->virtual_function_table_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_S2973C9,    ABISELECT(47904,35704), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(48320,36032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C11,    ABISELECT(47776,35604), //bcp->offset
    -1, //bcp->virtual_function_table_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
    30, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(51616,38464), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(56144,41904), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(56144,41904), //bcp->offset
    110, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2973C3,    ABISELECT(51744,38564), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S2973C2,    ABISELECT(51744,38564), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S2973C3,    ABISELECT(52320,38988), //bcp->offset
    86, //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
    21, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2973C8,    ABISELECT(51744,38564), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(52464,39100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C14,    ABISELECT(51616,38464), //bcp->offset
    71, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(52752,39332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(53920,40188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2973C3,    ABISELECT(56720,42328), //bcp->offset
    120, //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
    9, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S2973C10,    ABISELECT(47776,35604), //bcp->offset
    58, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2973C4,    ABISELECT(46976,35004), //bcp->offset
    20, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2973C12,    ABISELECT(576,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
    29, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2973C15,    ABISELECT(576,424), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2973C16,    ABISELECT(56848,42428), //bcp->offset
    124, //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
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2973C1[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C1D1Ev();
extern void _ZN7S2973C1D0Ev();
extern void _ZN8S2973C123v12Ev();
extern void ABISELECT(_ZThn576_N7S2973C1D1Ev,_ZThn424_N7S2973C1D1Ev)();
extern void ABISELECT(_ZThn576_N7S2973C1D0Ev,_ZThn424_N7S2973C1D0Ev)();
extern void _ZN7S2973C32v1Ev();
extern void ABISELECT(_ZTv0_n72_N7S2973C1D1Ev,_ZTv0_n36_N7S2973C1D1Ev)();
extern void ABISELECT(_ZThn46976_N7S2973C1D1Ev,_ZThn35004_N7S2973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2973C1D0Ev,_ZTv0_n36_N7S2973C1D0Ev)();
extern void ABISELECT(_ZThn46976_N7S2973C1D0Ev,_ZThn35004_N7S2973C1D0Ev)() __attribute__((weak));
extern void _ZN7S2973C43v11Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void ABISELECT(_ZTvn696_n72_N7S2973C1D1Ev,_ZTvn524_n36_N7S2973C1D1Ev)();
extern void ABISELECT(_ZTvn696_n72_N7S2973C1D0Ev,_ZTvn524_n36_N7S2973C1D0Ev)();
extern void _ZN7S2973C72v6Ev();
extern void _ZN7S2973C72v7Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C112v8Ev();
extern void _ZN8S2973C112v9Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C163v13Ev();
static  VTBL_ENTRY vtc_S2973C1[] = {
  ABISELECT(56848,42428),
  ABISELECT(56720,42328),
  ABISELECT(56144,41904),
  ABISELECT(55728,41576),
  ABISELECT(55008,41040),
  ABISELECT(54720,40812),
  ABISELECT(46976,35004),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  (VTBL_ENTRY)&_ZN7S2973C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2973C1D0Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN8S2973C123v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S2973C1D1Ev,_ZThn424_N7S2973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S2973C1D0Ev,_ZThn424_N7S2973C1D0Ev),
  ABISELECT(4640,3460),
  ABISELECT(928,700),
  ABISELECT(800,600),
  ABISELECT(800,600),
  ABISELECT(696,524),
  ABISELECT(696,524),
  ABISELECT(128,100),
  ABISELECT(128,100),
  ABISELECT(128,100),
  0,
  ABISELECT(-46976,-35004),
  0,
  ABISELECT(9744,7324),
  ABISELECT(9168,6900),
  ABISELECT(8752,6572),
  ABISELECT(8032,6036),
  ABISELECT(7744,5808),
  ABISELECT(-46976,-35004),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2973C1D1Ev,_ZTv0_n36_N7S2973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2973C1D0Ev,_ZTv0_n36_N7S2973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2973C43v11Ev,
  ABISELECT(-47104,-35104),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(8056,6048),
  ABISELECT(7336,5512),
  ABISELECT(7048,5284),
  ABISELECT(-47672,-35528),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn696_n72_N7S2973C1D1Ev,_ZTvn524_n36_N7S2973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn696_n72_N7S2973C1D0Ev,_ZTvn524_n36_N7S2973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2973C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v7Ev,
  ABISELECT(8944,6724),
  ABISELECT(6944,5208),
  ABISELECT(7952,5972),
  ABISELECT(8368,6300),
  ABISELECT(-47776,-35604),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v9Ev,
  ABISELECT(-47904,-35704),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
  ABISELECT(3104,2348),
  ABISELECT(4112,3112),
  ABISELECT(4528,3440),
  ABISELECT(-51616,-38464),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  ABISELECT(-51744,-38564),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(-52320,-38988),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  ABISELECT(-55008,-41040),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  ABISELECT(-55584,-41464),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  0,
  ABISELECT(-55728,-41576),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56144,-41904),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
  0,
  ABISELECT(-56720,-42328),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  0,
  ABISELECT(-56848,-42428),
  (VTBL_ENTRY)&(_ZTI7S2973C1[0]),
  (VTBL_ENTRY)&_ZN8S2973C163v13Ev,
};
extern VTBL_ENTRY _ZTV7S2973C1[];
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C4D1Ev();
extern void _ZN7S2973C4D0Ev();
extern void _ZN7S2973C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C4__7S2973C1[] = {
  ABISELECT(9744,7324),
  ABISELECT(9168,6900),
  ABISELECT(8752,6572),
  ABISELECT(8032,6036),
  ABISELECT(7744,5808),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2973C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2973C43v11Ev,
};
extern void _ZN7S2973C7D1Ev();
extern void _ZN7S2973C7D0Ev();
extern void _ZN7S2973C72v6Ev();
extern void _ZN7S2973C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C77S2973C4__7S2973C1[] = {
  ABISELECT(8056,6048),
  ABISELECT(7336,5512),
  ABISELECT(7048,5284),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2973C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v7Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__7S2973C77S2973C4__7S2973C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  ABISELECT(-7336,-5512),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C37S2973C8__A1__7S2973C77S2973C4__7S2973C1[] = {
  ABISELECT(-7912,-5936),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C77S2973C4__7S2973C1[] = {
  0,
  0,
  ABISELECT(-8056,-6048),
  (VTBL_ENTRY)&(_ZTI7S2973C7[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C112v8Ev();
extern void _ZN8S2973C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C107S2973C4__7S2973C1[] = {
  ABISELECT(8944,6724),
  ABISELECT(6944,5208),
  ABISELECT(7952,5972),
  ABISELECT(8368,6300),
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v9Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C148S2973C107S2973C4__7S2973C1[] = {
  ABISELECT(3104,2348),
  ABISELECT(4112,3112),
  ABISELECT(4528,3440),
  0,
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C88S2973C148S2973C107S2973C4__A1__7S2973C1[] = {
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C88S2973C148S2973C107S2973C4__A1__7S2973C1[] = {
  0,
  0,
  ABISELECT(-3984,-3012),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C2__8S2973C148S2973C107S2973C4__7S2973C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-4528,-3440),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__8S2973C148S2973C107S2973C4__7S2973C1[] = {
  0,
  0,
  ABISELECT(-4112,-3112),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__8S2973C148S2973C107S2973C4__7S2973C1[] = {
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S2973C14[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C14__8S2973C107S2973C4__7S2973C1[] = {
  ABISELECT(3104,2348),
  ABISELECT(4112,3112),
  ABISELECT(4528,3440),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C2__8S2973C107S2973C4__7S2973C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-8368,-6300),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__A1__8S2973C107S2973C4__7S2973C1[] = {
  0,
  0,
  ABISELECT(-7952,-5972),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C88S2973C14__8S2973C107S2973C4__7S2973C1[] = {
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C3__A7__8S2973C107S2973C4__7S2973C1[] = {
  0,
  ABISELECT(-8944,-6724),
  (VTBL_ENTRY)&(_ZTI8S2973C10[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern void ABISELECT(_ZThn696_N7S2973C4D1Ev,_ZThn524_N7S2973C4D1Ev)();
extern void ABISELECT(_ZThn696_N7S2973C4D0Ev,_ZThn524_N7S2973C4D0Ev)();
extern void _ZN7S2973C72v6Ev();
extern void _ZN7S2973C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C7__7S2973C4__7S2973C1[] = {
  ABISELECT(8056,6048),
  ABISELECT(7336,5512),
  ABISELECT(7048,5284),
  ABISELECT(-696,-524),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn696_N7S2973C4D1Ev,_ZThn524_N7S2973C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn696_N7S2973C4D0Ev,_ZThn524_N7S2973C4D0Ev),
  (VTBL_ENTRY)&_ZN7S2973C72v6Ev,
  (VTBL_ENTRY)&_ZN7S2973C72v7Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__7S2973C4__7S2973C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  ABISELECT(-8032,-6036),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C37S2973C8__A3__7S2973C4__7S2973C1[] = {
  ABISELECT(-8608,-6460),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C4__7S2973C1[] = {
  0,
  0,
  ABISELECT(-8752,-6572),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C112v8Ev();
extern void _ZN8S2973C112v9Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C10__7S2973C4__7S2973C1[] = {
  ABISELECT(8944,6724),
  ABISELECT(6944,5208),
  ABISELECT(7952,5972),
  ABISELECT(8368,6300),
  ABISELECT(-800,-600),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v8Ev,
  (VTBL_ENTRY)&_ZN8S2973C112v9Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN8S2973C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S2973C148S2973C10__7S2973C4__7S2973C1[] = {
  ABISELECT(3104,2348),
  ABISELECT(4112,3112),
  ABISELECT(4528,3440),
  ABISELECT(-4640,-3460),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN8S2973C143v10Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C2__A2__7S2973C4__7S2973C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-9168,-6900),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C88S2973C148S2973C10__A1__7S2973C4__7S2973C1[] = {
  ABISELECT(3984,3012),
  ABISELECT(2976,2248),
  ABISELECT(-4768,-3560),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C3__A11__7S2973C4__7S2973C1[] = {
  0,
  ABISELECT(-9744,-7324),
  (VTBL_ENTRY)&(_ZTI7S2973C4[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C22v2Ev();
extern void _ZN7S2973C22v3Ev();
extern void _ZN7S2973C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C8__7S2973C1[] = {
  ABISELECT(720,536),
  ABISELECT(-288,-228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2973C22v4Ev,
};
extern void _ZN7S2973C32v1Ev();
extern void _ZN7S2973C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2973C9__7S2973C8__7S2973C1[] = {
  0,
  0,
  ABISELECT(-720,-536),
  (VTBL_ENTRY)&(_ZTI7S2973C8[0]),
  (VTBL_ENTRY)&_ZN7S2973C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2973C92v5Ev,
};
static  VTT_ENTRY vtt_S2973C1[] = {
  {&(_ZTV7S2973C1[9]),  9,128},
  {&(_ZTV7S2973C1[39]),  39,128},
  {&(_ZTV7S2973C1[45]),  45,128},
  {&(_ZTV7S2973C1[54]),  54,128},
  {&(_ZTV7S2973C1[97]),  97,128},
  {&(_ZTV7S2973C1[103]),  103,128},
  {&(_ZTV7S2973C1[108]),  108,128},
  {&(_ZTV7S2973C1[64]),  64,128},
  {&(_ZTV7S2973C1[69]),  69,128},
  {&(_ZTV7S2973C1[76]),  76,128},
  {&(_ZTV7S2973C1[116]),  116,128},
  {&(_ZTV7S2973C1[82]),  82,128},
  {&(_ZTV7S2973C1[88]),  88,128},
  {&(_ZTV7S2973C1[123]),  123,128},
  {&(_ZTV7S2973C1[127]),  127,128},
  {&(_tg__ZTV7S2973C4__7S2973C1[7]),  7,11},
  {&(_tg__ZTV7S2973C77S2973C4__7S2973C1[5]),  5,9},
  {&(_tg__ZTV7S2973C8__7S2973C77S2973C4__7S2973C1[8]),  8,12},
  {&(_tg__ZTV7S2973C37S2973C8__A1__7S2973C77S2973C4__7S2973C1[2]),  2,3},
  {&(_tg__ZTV7S2973C9__7S2973C77S2973C4__7S2973C1[4]),  4,6},
  {&(_tg__ZTV8S2973C107S2973C4__7S2973C1[6]),  6,9},
  {&(_tg__ZTV8S2973C148S2973C107S2973C4__7S2973C1[5]),  5,7},
  {&(_tg__ZTV7S2973C88S2973C148S2973C107S2973C4__A1__7S2973C1[4]),  4,8},
  {&(_tg__ZTV7S2973C9__7S2973C88S2973C148S2973C107S2973C4__A1__7S2973C1[4]),  4,6},
  {&(_tg__ZTV7S2973C2__8S2973C148S2973C107S2973C4__7S2973C1[6]),  6,10},
  {&(_tg__ZTV7S2973C9__8S2973C148S2973C107S2973C4__7S2973C1[4]),  4,6},
  {&(_tg__ZTV7S2973C8__8S2973C148S2973C107S2973C4__7S2973C1[4]),  4,8},
  {&(_tg__ZTV8S2973C14__8S2973C107S2973C4__7S2973C1[5]),  5,7},
  {&(_tg__ZTV7S2973C2__8S2973C107S2973C4__7S2973C1[6]),  6,10},
  {&(_tg__ZTV7S2973C9__A1__8S2973C107S2973C4__7S2973C1[4]),  4,6},
  {&(_tg__ZTV7S2973C88S2973C14__8S2973C107S2973C4__7S2973C1[4]),  4,8},
  {&(_tg__ZTV7S2973C3__A7__8S2973C107S2973C4__7S2973C1[3]),  3,4},
  {&(_tg__ZTV7S2973C7__7S2973C4__7S2973C1[5]),  5,9},
  {&(_tg__ZTV7S2973C8__7S2973C4__7S2973C1[8]),  8,12},
  {&(_tg__ZTV7S2973C37S2973C8__A3__7S2973C4__7S2973C1[2]),  2,3},
  {&(_tg__ZTV7S2973C9__7S2973C4__7S2973C1[4]),  4,6},
  {&(_tg__ZTV8S2973C10__7S2973C4__7S2973C1[6]),  6,9},
  {&(_tg__ZTV8S2973C148S2973C10__7S2973C4__7S2973C1[5]),  5,7},
  {&(_tg__ZTV7S2973C2__A2__7S2973C4__7S2973C1[6]),  6,10},
  {&(_tg__ZTV7S2973C88S2973C148S2973C10__A1__7S2973C4__7S2973C1[4]),  4,8},
  {&(_tg__ZTV7S2973C3__A11__7S2973C4__7S2973C1[3]),  3,4},
  {&(_tg__ZTV7S2973C8__7S2973C1[4]),  4,8},
  {&(_tg__ZTV7S2973C9__7S2973C8__7S2973C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S2973C1[];
extern  VTBL_ENTRY _ZTV7S2973C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2973C1[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2973C1D0Ev,_ZTv0_n36_N7S2973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46976_N7S2973C1D0Ev,_ZThn35004_N7S2973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2973C1D1Ev,_ZTv0_n36_N7S2973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46976_N7S2973C1D1Ev,_ZThn35004_N7S2973C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2973C1 = {  "S2973C1", // class name
  bases_S2973C1, 35,
  &(vtc_S2973C1[0]), // expected_vtbl_contents
  &(vtt_S2973C1[0]), // expected_vtt_contents
  ABISELECT(57328,42800), // object size
  NSPAIRA(_ZTI7S2973C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2973C1),128, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2973C1),43, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19117C7  : S20507C6 {
  int s19117c7f0;
  long double s19117c7f1;
  int s19117c7f2;
  ::S20507C6 s19117c7f3;
  ::S20507C6 s19117c7f4;
  int s19117c7f5;
  long double s19117c7f6[8];
};
//SIG(-1 S19117C7) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S19117C7()
{
  extern Class_Descriptor cd_S19117C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S19117C7, buf);
    S19117C7 &lv = *(new (buf) S19117C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S19117C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C7)");
    check_base_class_offset(lv, (S20507C6*), 0, "S19117C7");
    check_field_offset(lv, s19117c7f0, ABISELECT(88,64), "S19117C7.s19117c7f0");
    check_field_offset(lv, s19117c7f1, ABISELECT(96,68), "S19117C7.s19117c7f1");
    check_field_offset(lv, s19117c7f2, ABISELECT(112,80), "S19117C7.s19117c7f2");
    check_field_offset(lv, s19117c7f3, ABISELECT(120,84), "S19117C7.s19117c7f3");
    check_field_offset(lv, s19117c7f4, ABISELECT(208,148), "S19117C7.s19117c7f4");
    check_field_offset(lv, s19117c7f5, ABISELECT(296,212), "S19117C7.s19117c7f5");
    check_field_offset(lv, s19117c7f6, ABISELECT(304,216), "S19117C7.s19117c7f6");
    test_class_info(&lv, &cd_S19117C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C7(Test_S19117C7, "S19117C7", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S19117C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19117C7[];
Class_Descriptor cd_S19117C7 = {  "S19117C7", // class name
  bases_S19117C7, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI8S19117C7),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  S19117C9  : S19117C7 , virtual S20507C6 {
  long double s19117c9f0[2];
  int s19117c9f1[2];
  long double s19117c9f2[3];
  virtual void  v2(); // _ZN8S19117C92v2Ev
  ~S19117C9(); // tgen
  S19117C9(); // tgen
};
//SIG(-1 S19117C9) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S19117C9()
{
  extern Class_Descriptor cd_S19117C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S19117C9, buf);
    S19117C9 *dp, &lv = *(dp=new (buf) S19117C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S19117C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C9)");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(16,4), "S19117C9");
    check_base_class_offset(lv, (S19117C7*), ABISELECT(16,4), "S19117C9");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S19117C9");
    check_field_offset(lv, s19117c9f0, ABISELECT(448,316), "S19117C9.s19117c9f0");
    check_field_offset(lv, s19117c9f1, ABISELECT(480,340), "S19117C9.s19117c9f1");
    check_field_offset(lv, s19117c9f2, ABISELECT(496,348), "S19117C9.s19117c9f2");
    test_class_info(&lv, &cd_S19117C9);
    dp->~S19117C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C9(Test_S19117C9, "S19117C9", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN8S19117C9C1Ev();
extern void _ZN8S19117C9D1Ev();
Name_Map name_map_S19117C9[] = {
  NSPAIR(_ZN8S19117C9C1Ev),
  NSPAIR(_ZN8S19117C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S19117C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19117C7,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19117C9[];
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY vtc_S19117C9[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S19117C9[];
static  VTT_ENTRY vtt_S19117C9[] = {
  {&(_ZTV8S19117C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
Class_Descriptor cd_S19117C9 = {  "S19117C9", // class name
  bases_S19117C9, 3,
  &(vtc_S19117C9[0]), // expected_vtbl_contents
  &(vtt_S19117C9[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI8S19117C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19117C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19117C9),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  S19117C8  : virtual S20507C6 , virtual S19117C9 , virtual S19117C7 {
  ::S468C20_nt s19117c8f0;
  ~S19117C8(); // tgen
  S19117C8(); // tgen
};
//SIG(-1 S19117C8) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S19117C8()
{
  extern Class_Descriptor cd_S19117C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S19117C8, buf);
    S19117C8 *dp, &lv = *(dp=new (buf) S19117C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S19117C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C8)");
    /*is_ambiguous_... S19117C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S19117C8");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(16,8), "S19117C8");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(128,76), "S19117C8");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(128,76), "S19117C8");
    check_base_class_offset(lv, (S19117C9*), ABISELECT(112,72), "S19117C8");
    /*is_ambiguous_... S19117C8::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(656,456), "S19117C8");
    /*is_ambiguous_... S19117C8::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*), ABISELECT(656,456), "S19117C8");
    check_field_offset(lv, s19117c8f0, ABISELECT(8,4), "S19117C8.s19117c8f0");
    test_class_info(&lv, &cd_S19117C8);
    dp->~S19117C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C8(Test_S19117C8, "S19117C8", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S19117C8C1Ev();
extern void _ZN8S19117C8D1Ev();
Name_Map name_map_S19117C8[] = {
  NSPAIR(_ZN8S19117C8C1Ev),
  NSPAIR(_ZN8S19117C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
static Base_Class bases_S19117C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19117C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S19117C9,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19117C8[];
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY vtc_S19117C8[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S19117C8[];
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C8[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTT_ENTRY vtt_S19117C8[] = {
  {&(_ZTV8S19117C8[5]),  5,10},
  {&(_ZTV8S19117C8[9]),  9,10},
  {&(_tg__ZTV8S19117C9__8S19117C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19117C8[];
extern  VTBL_ENTRY _ZTV8S19117C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C8[];
Class_Descriptor cd_S19117C8 = {  "S19117C8", // class name
  bases_S19117C8, 6,
  &(vtc_S19117C8[0]), // expected_vtbl_contents
  &(vtt_S19117C8[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S19117C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19117C8),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19117C8),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  S19117C11  : S20507C6 , virtual S19117C7 , virtual S20507C11 , S19117C9 {
  ::S19117C8 s19117c11f0;
  ::S19117C9 s19117c11f1;
  virtual  ~S19117C11(); // _ZN9S19117C11D2Ev
  S19117C11(); // tgen
};
//SIG(-1 S19117C11) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ vd m Fp FD[5] Fp FD} BC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} vd FC6{ VBC2 VBC5 VBC3 FC7{}} FC5}


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

static void Test_S19117C11()
{
  extern Class_Descriptor cd_S19117C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(190,532)];
    init_test(&cd_S19117C11, buf);
    S19117C11 *dp, &lv = *(dp=new (buf) S19117C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3024,2124), "sizeof(S19117C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C11)");
    /*is_ambiguous_... S19117C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S19117C11");
    /*is_ambiguous_... S19117C11::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(2368,1664), "S19117C11");
    /*is_ambiguous_... S19117C11::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*), ABISELECT(2368,1664), "S19117C11");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2800,1976), "S19117C11");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(16,4), "S19117C11");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(16,4), "S19117C11");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(2928,2060), "S19117C11");
    check_base_class_offset(lv, (S19117C9*), 0, "S19117C11");
    check_field_offset(lv, s19117c11f0, ABISELECT(640,448), "S19117C11.s19117c11f0");
    check_field_offset(lv, s19117c11f1, ABISELECT(1728,1216), "S19117C11.s19117c11f1");
    test_class_info(&lv, &cd_S19117C11);
    dp->~S19117C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C11(Test_S19117C11, "S19117C11", ABISELECT(3024,2124));

#else // __cplusplus

extern void _ZN9S19117C11C1Ev();
extern void _ZN9S19117C11D2Ev();
Name_Map name_map_S19117C11[] = {
  NSPAIR(_ZN9S19117C11C1Ev),
  NSPAIR(_ZN9S19117C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
static Base_Class bases_S19117C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19117C7,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C11,    ABISELECT(2800,1976), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    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_S19117C7,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(2928,2060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    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 _ZTI9S19117C11[];
extern void _ZN8S19117C92v2Ev();
extern void _ZN9S19117C11D1Ev();
extern void _ZN9S19117C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev)();
extern void ABISELECT(_ZThn2800_N9S19117C11D1Ev,_ZThn1976_N9S19117C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev)();
extern void ABISELECT(_ZThn2800_N9S19117C11D0Ev,_ZThn1976_N9S19117C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19117C11[] = {
  ABISELECT(2800,1976),
  ABISELECT(2368,1664),
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D0Ev,
  ABISELECT(-2800,-1976),
  ABISELECT(-2800,-1976),
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19117C11[];
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C11[] = {
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTT_ENTRY vtt_S19117C11[] = {
  {&(_ZTV9S19117C11[5]),  5,13},
  {&(_tg__ZTV8S19117C9__9S19117C11[3]),  3,4},
  {&(_ZTV9S19117C11[11]),  11,13},
};
extern VTBL_ENTRY _ZTI9S19117C11[];
extern  VTBL_ENTRY _ZTV9S19117C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C11[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S19117C11D0Ev,_ZThn1976_N9S19117C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S19117C11D1Ev,_ZThn1976_N9S19117C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C11 = {  "S19117C11", // class name
  bases_S19117C11, 8,
  &(vtc_S19117C11[0]), // expected_vtbl_contents
  &(vtt_S19117C11[0]), // expected_vtt_contents
  ABISELECT(3024,2124), // object size
  NSPAIRA(_ZTI9S19117C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19117C11),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19117C11),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19117C12  : virtual S20507C6 , virtual S20507C11 , virtual S19117C8 , virtual S19117C11 {
  ::S19117C7 s19117c12f0;
  ::S20507C6 s19117c12f1;
  short s19117c12f2;
  void *s19117c12f3[2];
  __tsi64 s19117c12f4;
  long double s19117c12f5[2];
  __tsi64 s19117c12f6;
  int s19117c12f7[2];
  char s19117c12f8;
  ~S19117C12(); // tgen
  S19117C12(); // tgen
};
//SIG(-1 S19117C12) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ vd m Fp FD[5] Fp FD} VBC4{ VBC2 VBC5{ BC6{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC6 FC7{}} VBC8{ BC2 VBC6 VBC3 BC5 vd FC4 FC5} FC6 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc}


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

static void Test_S19117C12()
{
  extern Class_Descriptor cd_S19117C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,741)];
    init_test(&cd_S19117C12, buf);
    S19117C12 *dp, &lv = *(dp=new (buf) S19117C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,2960), "sizeof(S19117C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C12)");
    /*is_ambiguous_... S19117C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(632,444), "S19117C12");
    /*is_ambiguous_... S19117C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C8*), ABISELECT(632,444), "S19117C12");
    /*is_ambiguous_... S19117C12::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(632,444), "S19117C12");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*)(S19117C11*), ABISELECT(632,444), "S19117C12");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(720,508), "S19117C12");
    check_base_class_offset(lv, (S20507C11*)(S19117C11*), ABISELECT(720,508), "S19117C12");
    /*is_ambiguous_... S19117C12::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(880,604), "S19117C12");
    /*is_ambiguous_... S19117C12::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(880,604), "S19117C12");
    check_base_class_offset(lv, (S19117C9*)(S19117C8*), ABISELECT(864,600), "S19117C12");
    /*is_ambiguous_... S19117C12::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(1408,984), "S19117C12");
    /*is_ambiguous_... S19117C8::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C8*), ABISELECT(1408,984), "S19117C12");
    /*is_ambiguous_... S19117C11::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C11*), ABISELECT(1408,984), "S19117C12");
    check_base_class_offset(lv, (S19117C8*), ABISELECT(848,592), "S19117C12");
    /*is_ambiguous_... S19117C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C11*), ABISELECT(2384,1680), "S19117C12");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(1856,1300), "S19117C12");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(1856,1300), "S19117C12");
    check_base_class_offset(lv, (S19117C9*)(S19117C11*), ABISELECT(1840,1296), "S19117C12");
    check_base_class_offset(lv, (S19117C11*), ABISELECT(1840,1296), "S19117C12");
    check_field_offset(lv, s19117c12f0, ABISELECT(16,4), "S19117C12.s19117c12f0");
    check_field_offset(lv, s19117c12f1, ABISELECT(448,316), "S19117C12.s19117c12f1");
    check_field_offset(lv, s19117c12f2, ABISELECT(536,380), "S19117C12.s19117c12f2");
    check_field_offset(lv, s19117c12f3, ABISELECT(544,384), "S19117C12.s19117c12f3");
    check_field_offset(lv, s19117c12f4, ABISELECT(560,392), "S19117C12.s19117c12f4");
    check_field_offset(lv, s19117c12f5, ABISELECT(576,400), "S19117C12.s19117c12f5");
    check_field_offset(lv, s19117c12f6, ABISELECT(608,424), "S19117C12.s19117c12f6");
    check_field_offset(lv, s19117c12f7, ABISELECT(616,432), "S19117C12.s19117c12f7");
    check_field_offset(lv, s19117c12f8, ABISELECT(624,440), "S19117C12.s19117c12f8");
    test_class_info(&lv, &cd_S19117C12);
    dp->~S19117C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C12(Test_S19117C12, "S19117C12", ABISELECT(4208,2960));

#else // __cplusplus

extern void _ZN9S19117C12C1Ev();
extern void _ZN9S19117C12D1Ev();
Name_Map name_map_S19117C12[] = {
  NSPAIR(_ZN9S19117C12C1Ev),
  NSPAIR(_ZN9S19117C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C8;
extern VTBL_ENTRY _ZTI8S19117C8[];
extern  VTBL_ENTRY _ZTV8S19117C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C11;
extern VTBL_ENTRY _ZTI9S19117C11[];
extern  VTBL_ENTRY _ZTV9S19117C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C11[];
static Base_Class bases_S19117C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(632,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
  1, 1},
  {&cd_S20507C11,    ABISELECT(720,508), //bcp->offset
    10, //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_S20507C6,    ABISELECT(880,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
    3, //immediately_derived
  0, 0},
  {&cd_S19117C7,    ABISELECT(880,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
    4, //immediately_derived
  0, 0},
  {&cd_S19117C9,    ABISELECT(864,600), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C8,    ABISELECT(848,592), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2384,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(1840,1296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19117C11,    ABISELECT(1840,1296), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19117C12[];
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn720_N9S19117C12D1Ev,_ZThn508_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn720_N9S19117C12D0Ev,_ZThn508_N9S19117C12D0Ev)() __attribute__((weak));
extern void _ZN8S19117C92v2Ev();
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn1840_N9S19117C12D1Ev,_ZThn1296_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn1840_N9S19117C12D0Ev,_ZThn1296_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19117C12[] = {
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
  ABISELECT(-720,-508),
  ABISELECT(-720,-508),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(-848,-592),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  0,
  ABISELECT(-232,-156),
  ABISELECT(-864,-600),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  ABISELECT(-1840,-1296),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(-1840,-1296),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19117C12[];
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C12[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C8__9S19117C12[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C12[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void _ZN9S19117C11D1Ev();
extern void _ZN9S19117C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C12[] = {
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D0Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C99S19117C11__A1__9S19117C12[] = {
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C11__9S19117C12[] = {
  ABISELECT(1120,788),
  ABISELECT(1120,788),
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev),
};
static  VTT_ENTRY vtt_S19117C12[] = {
  {&(_ZTV9S19117C12[8]),  8,35},
  {&(_ZTV9S19117C12[13]),  13,35},
  {&(_ZTV9S19117C12[20]),  20,35},
  {&(_ZTV9S19117C12[24]),  24,35},
  {&(_ZTV9S19117C12[32]),  32,35},
  {&(_tg__ZTV8S19117C8__9S19117C12[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C8__9S19117C12[4]),  4,5},
  {&(_tg__ZTV8S19117C9__9S19117C12[3]),  3,4},
  {&(_tg__ZTV9S19117C11__9S19117C12[5]),  5,8},
  {&(_tg__ZTV8S19117C99S19117C11__A1__9S19117C12[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19117C11__9S19117C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N9S19117C12D0Ev,_ZThn1296_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N9S19117C12D1Ev,_ZThn1296_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19117C12D0Ev,_ZThn508_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19117C12D1Ev,_ZThn508_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C12 = {  "S19117C12", // class name
  bases_S19117C12, 13,
  &(vtc_S19117C12[0]), // expected_vtbl_contents
  &(vtt_S19117C12[0]), // expected_vtt_contents
  ABISELECT(4208,2960), // object size
  NSPAIRA(_ZTI9S19117C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19117C12),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19117C12),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19117C5  : virtual S20507C6 , virtual S19117C7 , virtual S19117C8 , virtual S19117C11 , S19117C12 {
  ::S20507C11 s19117c5f0;
  long double s19117c5f1;
  virtual  ~S19117C5(); // _ZN8S19117C5D2Ev
  S19117C5(); // tgen
};
//SIG(-1 S19117C5) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ VBC2 VBC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} VBC3 FC6{}} VBC7{ BC2 VBC3 VBC8{ vd m Fp FD[5] Fp FD} BC5 vd FC4 FC5} BC9{ VBC2 VBC8 VBC4 VBC7 FC3 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC8 FD}


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

static void Test_S19117C5()
{
  extern Class_Descriptor cd_S19117C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(274,765)];
    init_test(&cd_S19117C5, buf);
    S19117C5 *dp, &lv = *(dp=new (buf) S19117C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4368,3056), "sizeof(S19117C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C5)");
    /*is_ambiguous_... S19117C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(784,540), "S19117C5");
    /*is_ambiguous_... S19117C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C8*), ABISELECT(784,540), "S19117C5");
    /*is_ambiguous_... S19117C5::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(784,540), "S19117C5");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*)(S19117C11*), ABISELECT(784,540), "S19117C5");
    /*is_ambiguous_... S19117C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*), ABISELECT(784,540), "S19117C5");
    /*is_ambiguous_... S19117C5::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(880,604), "S19117C5");
    /*is_ambiguous_... S19117C5::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*), ABISELECT(880,604), "S19117C5");
    /*is_ambiguous_... S19117C8::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C8*), ABISELECT(880,604), "S19117C5");
    /*is_ambiguous_... S19117C11::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C11*), ABISELECT(880,604), "S19117C5");
    /*is_ambiguous_... S19117C5::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(1344,928), "S19117C5");
    /*is_ambiguous_... S19117C5::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(1344,928), "S19117C5");
    check_base_class_offset(lv, (S19117C9*)(S19117C8*), ABISELECT(1328,924), "S19117C5");
    check_base_class_offset(lv, (S19117C8*), ABISELECT(1312,916), "S19117C5");
    check_base_class_offset(lv, (S19117C8*)(S19117C12*), ABISELECT(1312,916), "S19117C5");
    /*is_ambiguous_... S19117C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C11*), ABISELECT(2416,1692), "S19117C5");
    check_base_class_offset(lv, (S20507C11*)(S19117C11*), ABISELECT(4240,2972), "S19117C5");
    check_base_class_offset(lv, (S20507C11*)(S19117C12*), ABISELECT(4240,2972), "S19117C5");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(1888,1312), "S19117C5");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(1888,1312), "S19117C5");
    check_base_class_offset(lv, (S19117C9*)(S19117C11*), ABISELECT(1872,1308), "S19117C5");
    check_base_class_offset(lv, (S19117C11*), ABISELECT(1872,1308), "S19117C5");
    check_base_class_offset(lv, (S19117C11*)(S19117C12*), ABISELECT(1872,1308), "S19117C5");
    check_base_class_offset(lv, (S19117C12*), 0, "S19117C5");
    check_field_offset(lv, s19117c5f0, ABISELECT(640,444), "S19117C5.s19117c5f0");
    check_field_offset(lv, s19117c5f1, ABISELECT(768,528), "S19117C5.s19117c5f1");
    test_class_info(&lv, &cd_S19117C5);
    dp->~S19117C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C5(Test_S19117C5, "S19117C5", ABISELECT(4368,3056));

#else // __cplusplus

extern void _ZN8S19117C5C1Ev();
extern void _ZN8S19117C5D2Ev();
Name_Map name_map_S19117C5[] = {
  NSPAIR(_ZN8S19117C5C1Ev),
  NSPAIR(_ZN8S19117C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C8;
extern VTBL_ENTRY _ZTI8S19117C8[];
extern  VTBL_ENTRY _ZTV8S19117C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C11;
extern VTBL_ENTRY _ZTI9S19117C11[];
extern  VTBL_ENTRY _ZTV9S19117C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C11[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
static Base_Class bases_S19117C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(784,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(880,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
    2, //immediately_derived
  0, 0},
  {&cd_S19117C7,    ABISELECT(880,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(1328,924), //bcp->offset
    15, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19117C8,    ABISELECT(1312,916), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2416,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4240,2972), //bcp->offset
    30, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(1872,1308), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19117C11,    ABISELECT(1872,1308), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19117C12,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19117C5[];
extern void _ZN8S19117C5D1Ev();
extern void _ZN8S19117C5D0Ev();
extern void _ZN8S19117C92v2Ev();
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn1872_N8S19117C5D1Ev,_ZThn1308_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn1872_N8S19117C5D0Ev,_ZThn1308_N8S19117C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn4240_N8S19117C5D1Ev,_ZThn2972_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn4240_N8S19117C5D0Ev,_ZThn2972_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19117C5[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C5D0Ev,
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev),
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19117C5[];
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C12__8S19117C5[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn4240_N9S19117C12D1Ev,_ZThn2972_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn4240_N9S19117C12D0Ev,_ZThn2972_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C12__8S19117C5[] = {
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C12__8S19117C5[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C12__8S19117C5[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn1872_N9S19117C12D1Ev,_ZThn1308_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn1872_N9S19117C12D0Ev,_ZThn1308_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C12__8S19117C5[] = {
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C5[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C8__8S19117C5[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C5[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void _ZN9S19117C11D1Ev();
extern void _ZN9S19117C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C5[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D0Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C99S19117C11__A1__8S19117C5[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19117C11D1Ev,_ZThn1664_N9S19117C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19117C11D0Ev,_ZThn1664_N9S19117C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C11__8S19117C5[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev),
};
static  VTT_ENTRY vtt_S19117C5[] = {
  {&(_ZTV8S19117C5[8]),  8,35},
  {&(_tg__ZTV9S19117C12__8S19117C5[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C12__8S19117C5[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C12__8S19117C5[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C12__8S19117C5[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C12__8S19117C5[7]),  7,10},
  {&(_ZTV8S19117C5[15]),  15,35},
  {&(_ZTV8S19117C5[19]),  19,35},
  {&(_ZTV8S19117C5[27]),  27,35},
  {&(_ZTV8S19117C5[33]),  33,35},
  {&(_tg__ZTV8S19117C8__8S19117C5[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C8__8S19117C5[4]),  4,5},
  {&(_tg__ZTV8S19117C9__8S19117C5[3]),  3,4},
  {&(_tg__ZTV9S19117C11__8S19117C5[5]),  5,8},
  {&(_tg__ZTV8S19117C99S19117C11__A1__8S19117C5[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19117C11__8S19117C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19117C5[];
extern  VTBL_ENTRY _ZTV8S19117C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C5[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19117C11D0Ev,_ZThn1664_N9S19117C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19117C11D1Ev,_ZThn1664_N9S19117C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S19117C12D0Ev,_ZThn1308_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S19117C12D1Ev,_ZThn1308_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S19117C12D0Ev,_ZThn2972_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S19117C12D1Ev,_ZThn2972_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S19117C5D0Ev,_ZThn2972_N8S19117C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S19117C5D1Ev,_ZThn2972_N8S19117C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S19117C5D0Ev,_ZThn1308_N8S19117C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S19117C5D1Ev,_ZThn1308_N8S19117C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C5 = {  "S19117C5", // class name
  bases_S19117C5, 14,
  &(vtc_S19117C5[0]), // expected_vtbl_contents
  &(vtt_S19117C5[0]), // expected_vtt_contents
  ABISELECT(4368,3056), // object size
  NSPAIRA(_ZTI8S19117C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19117C5),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19117C5),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19117C15  : S20507C6 , virtual S19117C7 , virtual S19117C9 {
  long double s19117c15f0;
  ~S19117C15(); // tgen
  S19117C15(); // tgen
};
//SIG(-1 S19117C15) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S19117C15()
{
  extern Class_Descriptor cd_S19117C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S19117C15, buf);
    S19117C15 *dp, &lv = *(dp=new (buf) S19117C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S19117C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C15)");
    /*is_ambiguous_... S19117C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S19117C15");
    /*is_ambiguous_... S19117C15::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(112,80), "S19117C15");
    /*is_ambiguous_... S19117C15::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*), ABISELECT(112,80), "S19117C15");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(560,396), "S19117C15");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(560,396), "S19117C15");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(1088,776), "S19117C15");
    check_base_class_offset(lv, (S19117C9*), ABISELECT(544,392), "S19117C15");
    check_field_offset(lv, s19117c15f0, ABISELECT(96,68), "S19117C15.s19117c15f0");
    test_class_info(&lv, &cd_S19117C15);
    dp->~S19117C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C15(Test_S19117C15, "S19117C15", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN9S19117C15C1Ev();
extern void _ZN9S19117C15D1Ev();
Name_Map name_map_S19117C15[] = {
  NSPAIR(_ZN9S19117C15C1Ev),
  NSPAIR(_ZN9S19117C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
static Base_Class bases_S19117C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19117C7,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S19117C7,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S19117C15[];
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY vtc_S19117C15[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern VTBL_ENTRY _ZTV9S19117C15[];
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C15[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTT_ENTRY vtt_S19117C15[] = {
  {&(_ZTV9S19117C15[5]),  5,10},
  {&(_ZTV9S19117C15[9]),  9,10},
  {&(_tg__ZTV8S19117C9__9S19117C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
Class_Descriptor cd_S19117C15 = {  "S19117C15", // class name
  bases_S19117C15, 7,
  &(vtc_S19117C15[0]), // expected_vtbl_contents
  &(vtt_S19117C15[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI9S19117C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19117C15),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19117C15),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  S19117C14  : virtual S20507C11 , virtual S19117C7 , virtual S19117C9 , virtual S19117C15 {
  long double s19117c14f0[9];
  int s19117c14f1;
  ::S19117C12 s19117c14f2;
  int s19117c14f3;
  __tsi64 s19117c14f4;
  ::S20507C11 s19117c14f5;
  __tsi64 s19117c14f6;
  virtual  ~S19117C14(); // _ZN9S19117C14D2Ev
  S19117C14(); // tgen
};
//SIG(-1 S19117C14) C1{ VBC2{ vd m Fp FD[5] Fp FD} VBC3{ BC4{ m Fi[10] Fp[6]} Fi FD Fi FC4 FC4 Fi FD[8]} VBC5{ BC3 VBC4 v1 FD[2] Fi[2] FD[3]} VBC6{ BC4 VBC3 VBC5 FD} vd FD[9] Fi FC7{ VBC4 VBC2 VBC8{ VBC4 VBC5 VBC3 FC9{}} VBC10{ BC4 VBC3 VBC2 BC5 vd FC8 FC5} FC3 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL}


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

static void Test_S19117C14()
{
  extern Class_Descriptor cd_S19117C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(367,1027)];
    init_test(&cd_S19117C14, buf);
    S19117C14 *dp, &lv = *(dp=new (buf) S19117C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5856,4104), "sizeof(S19117C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C14)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(4544,3180), "S19117C14");
    /*is_ambiguous_... S19117C14::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(4672,3264), "S19117C14");
    /*is_ambiguous_... S19117C14::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*), ABISELECT(4672,3264), "S19117C14");
    /*is_ambiguous_... S19117C15::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C15*), ABISELECT(4672,3264), "S19117C14");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(5120,3580), "S19117C14");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(5120,3580), "S19117C14");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(5648,3960), "S19117C14");
    check_base_class_offset(lv, (S19117C9*), ABISELECT(5104,3576), "S19117C14");
    check_base_class_offset(lv, (S19117C9*)(S19117C15*), ABISELECT(5104,3576), "S19117C14");
    /*is_ambiguous_... S19117C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C15*), ABISELECT(5752,4028), "S19117C14");
    check_base_class_offset(lv, (S19117C15*), ABISELECT(5744,4024), "S19117C14");
    check_field_offset(lv, s19117c14f0, ABISELECT(16,4), "S19117C14.s19117c14f0");
    check_field_offset(lv, s19117c14f1, ABISELECT(160,112), "S19117C14.s19117c14f1");
    check_field_offset(lv, s19117c14f2, ABISELECT(176,116), "S19117C14.s19117c14f2");
    check_field_offset(lv, s19117c14f3, ABISELECT(4384,3076), "S19117C14.s19117c14f3");
    check_field_offset(lv, s19117c14f4, ABISELECT(4392,3080), "S19117C14.s19117c14f4");
    check_field_offset(lv, s19117c14f5, ABISELECT(4400,3088), "S19117C14.s19117c14f5");
    check_field_offset(lv, s19117c14f6, ABISELECT(4528,3172), "S19117C14.s19117c14f6");
    test_class_info(&lv, &cd_S19117C14);
    dp->~S19117C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C14(Test_S19117C14, "S19117C14", ABISELECT(5856,4104));

#else // __cplusplus

extern void _ZN9S19117C14C1Ev();
extern void _ZN9S19117C14D2Ev();
Name_Map name_map_S19117C14[] = {
  NSPAIR(_ZN9S19117C14C1Ev),
  NSPAIR(_ZN9S19117C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C15;
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
static Base_Class bases_S19117C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(4544,3180), //bcp->offset
    9, //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_S20507C6,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19117C7,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19117C7,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(5648,3960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(5104,3576), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(5752,4028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C15,    ABISELECT(5744,4024), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19117C14[];
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn4544_N9S19117C14D1Ev,_ZThn3180_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn4544_N9S19117C14D0Ev,_ZThn3180_N9S19117C14D0Ev)() __attribute__((weak));
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY vtc_S19117C14[] = {
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
  ABISELECT(-4544,-3180),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
  0,
  ABISELECT(544,384),
  ABISELECT(-5104,-3576),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-5744,-4024),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
extern VTBL_ENTRY _ZTV9S19117C14[];
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C14[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C14[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C15__9S19117C14[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTT_ENTRY vtt_S19117C14[] = {
  {&(_ZTV9S19117C14[7]),  7,24},
  {&(_ZTV9S19117C14[12]),  12,24},
  {&(_ZTV9S19117C14[18]),  18,24},
  {&(_ZTV9S19117C14[24]),  24,24},
  {&(_tg__ZTV8S19117C9__9S19117C14[3]),  3,4},
  {&(_tg__ZTV9S19117C15__9S19117C14[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C15__9S19117C14[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S19117C14D0Ev,_ZThn3180_N9S19117C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S19117C14D1Ev,_ZThn3180_N9S19117C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C14 = {  "S19117C14", // class name
  bases_S19117C14, 9,
  &(vtc_S19117C14[0]), // expected_vtbl_contents
  &(vtt_S19117C14[0]), // expected_vtt_contents
  ABISELECT(5856,4104), // object size
  NSPAIRA(_ZTI9S19117C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19117C14),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19117C14),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19117C13  {
  int s19117c13f0;
  ::S19117C8 s19117c13f1;
  int s19117c13f2;
  void *s19117c13f3;
  ::S19117C14 s19117c13f4;
  int s19117c13f5;
  __tsi64 s19117c13f6;
  long double s19117c13f7;
  virtual void  v3(); // _ZN9S19117C132v3Ev
  virtual void  v4(); // _ZN9S19117C132v4Ev
  virtual void  v5(); // _ZN9S19117C132v5Ev
  ~S19117C13(); // tgen
  S19117C13(); // tgen
};
//SIG(-1 S19117C13) C1{ v1 v2 v3 Fi FC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ BC5{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v4 FD[2] Fi[2] FD[3]} VBC5 FC6{}} Fi Fp FC7{ VBC8{ vd m Fp FD[5] Fp FD} VBC5 VBC4 VBC9{ BC3 VBC5 VBC4 FD} vd FD[9] Fi FC10{ VBC3 VBC8 VBC2 VBC11{ BC3 VBC5 VBC8 BC4 vd FC2 FC4} FC5 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC8 FL} Fi FL FD}


void  S19117C13 ::v3(){vfunc_called(this, "_ZN9S19117C132v3Ev");}
void  S19117C13 ::v4(){vfunc_called(this, "_ZN9S19117C132v4Ev");}
void  S19117C13 ::v5(){vfunc_called(this, "_ZN9S19117C132v5Ev");}
S19117C13 ::~S19117C13(){ note_dtor("S19117C13", this);} // tgen
S19117C13 ::S19117C13(){ note_ctor("S19117C13", this);} // tgen

static void Test_S19117C13()
{
  extern Class_Descriptor cd_S19117C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(439,1229)];
    init_test(&cd_S19117C13, buf);
    S19117C13 *dp, &lv = *(dp=new (buf) S19117C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7008,4912), "sizeof(S19117C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C13)");
    check_field_offset(lv, s19117c13f0, ABISELECT(8,4), "S19117C13.s19117c13f0");
    check_field_offset(lv, s19117c13f1, ABISELECT(16,8), "S19117C13.s19117c13f1");
    check_field_offset(lv, s19117c13f2, ABISELECT(1104,776), "S19117C13.s19117c13f2");
    check_field_offset(lv, s19117c13f3, ABISELECT(1112,780), "S19117C13.s19117c13f3");
    check_field_offset(lv, s19117c13f4, ABISELECT(1120,784), "S19117C13.s19117c13f4");
    check_field_offset(lv, s19117c13f5, ABISELECT(6976,4888), "S19117C13.s19117c13f5");
    check_field_offset(lv, s19117c13f6, ABISELECT(6984,4892), "S19117C13.s19117c13f6");
    check_field_offset(lv, s19117c13f7, ABISELECT(6992,4900), "S19117C13.s19117c13f7");
    test_class_info(&lv, &cd_S19117C13);
    dp->~S19117C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C13(Test_S19117C13, "S19117C13", ABISELECT(7008,4912));

#else // __cplusplus

extern void _ZN9S19117C13C1Ev();
extern void _ZN9S19117C13D1Ev();
Name_Map name_map_S19117C13[] = {
  NSPAIR(_ZN9S19117C13C1Ev),
  NSPAIR(_ZN9S19117C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19117C13[];
extern void _ZN9S19117C132v3Ev();
extern void _ZN9S19117C132v4Ev();
extern void _ZN9S19117C132v5Ev();
static  VTBL_ENTRY vtc_S19117C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C13[0]),
  (VTBL_ENTRY)&_ZN9S19117C132v3Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v4Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v5Ev,
};
extern VTBL_ENTRY _ZTI9S19117C13[];
extern  VTBL_ENTRY _ZTV9S19117C13[];
Class_Descriptor cd_S19117C13 = {  "S19117C13", // class name
  0,0,//no base classes
  &(vtc_S19117C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7008,4912), // object size
  NSPAIRA(_ZTI9S19117C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19117C13),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  S19117C3  : S20507C11 , S19117C5 , virtual S19117C12 , virtual S19117C13 {
  void *s19117c3f0[5];
  long double s19117c3f1[5];
  int s19117c3f2;
  long double s19117c3f3;
  virtual void  v6(); // _ZN8S19117C32v6Ev
  virtual void  v7(); // _ZN8S19117C32v7Ev
  ~S19117C3(); // tgen
  S19117C3(); // tgen
};
//SIG(-1 S19117C3) C1{ BC2{ vd m Fp FD[5] Fp FD} BC3{ VBC4{ m Fi[10] Fp[6]} VBC5{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC6{ VBC4 VBC7{ BC5 VBC4 v3 FD[2] Fi[2] FD[3]} VBC5 FC8{}} VBC9{ BC4 VBC5 VBC2 BC7 vd FC6 FC7} BC10{ VBC4 VBC2 VBC6 VBC9 FC5 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC2 FD} VBC10 VBC11{ v4 v5 v6 Fi FC6 Fi Fp FC12{ VBC2 VBC5 VBC7 VBC13{ BC4 VBC5 VBC7 FD} vd FD[9] Fi FC10 Fi FL FC2 FL} Fi FL FD} v1 v2 Fp[5] FD[5] Fi FD}


void  S19117C3 ::v6(){vfunc_called(this, "_ZN8S19117C32v6Ev");}
void  S19117C3 ::v7(){vfunc_called(this, "_ZN8S19117C32v7Ev");}
S19117C3 ::~S19117C3(){ note_dtor("S19117C3", this);} // tgen
S19117C3 ::S19117C3(){ note_ctor("S19117C3", this);} // tgen

static void Test_S19117C3()
{
  extern Class_Descriptor cd_S19117C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(770,2149)];
    init_test(&cd_S19117C3, buf);
    S19117C3 *dp, &lv = *(dp=new (buf) S19117C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12304,8592), "sizeof(S19117C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C3)");
    /*is_ambiguous_... S19117C3::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*), 0, "S19117C3");
    /*is_ambiguous_... S19117C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C5*), ABISELECT(1072,720), "S19117C3");
    /*is_ambiguous_... S19117C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C8*), ABISELECT(1072,720), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(1072,720), "S19117C3");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*)(S19117C11*), ABISELECT(1072,720), "S19117C3");
    /*is_ambiguous_... S19117C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*)(S19117C5*), ABISELECT(1072,720), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*), ABISELECT(1072,720), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(1168,784), "S19117C3");
    /*is_ambiguous_... S19117C5::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C5*), ABISELECT(1168,784), "S19117C3");
    /*is_ambiguous_... S19117C8::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C8*), ABISELECT(1168,784), "S19117C3");
    /*is_ambiguous_... S19117C11::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C11*), ABISELECT(1168,784), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(1632,1108), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(1632,1108), "S19117C3");
    check_base_class_offset(lv, (S19117C9*)(S19117C8*), ABISELECT(1616,1104), "S19117C3");
    check_base_class_offset(lv, (S19117C8*)(S19117C5*), ABISELECT(1600,1096), "S19117C3");
    check_base_class_offset(lv, (S19117C8*)(S19117C12*)(S19117C5*), ABISELECT(1600,1096), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C12*), ABISELECT(1600,1096), "S19117C3");
    /*is_ambiguous_... S19117C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C11*), ABISELECT(2704,1872), "S19117C3");
    check_base_class_offset(lv, (S20507C11*)(S19117C11*), ABISELECT(4528,3152), "S19117C3");
    check_base_class_offset(lv, (S20507C11*)(S19117C12*)(S19117C5*), ABISELECT(4528,3152), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C12 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C12*), ABISELECT(4528,3152), "S19117C3");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(2176,1492), "S19117C3");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(2176,1492), "S19117C3");
    check_base_class_offset(lv, (S19117C9*)(S19117C11*), ABISELECT(2160,1488), "S19117C3");
    check_base_class_offset(lv, (S19117C11*)(S19117C5*), ABISELECT(2160,1488), "S19117C3");
    check_base_class_offset(lv, (S19117C11*)(S19117C12*)(S19117C5*), ABISELECT(2160,1488), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C12*), ABISELECT(2160,1488), "S19117C3");
    check_base_class_offset(lv, (S19117C12*)(S19117C5*), ABISELECT(128,84), "S19117C3");
    check_base_class_offset(lv, (S19117C5*), ABISELECT(128,84), "S19117C3");
    /*is_ambiguous_... S19117C3::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C12*), ABISELECT(4656,3236), "S19117C3");
    check_base_class_offset(lv, (S19117C13*), ABISELECT(5296,3680), "S19117C3");
    check_field_offset(lv, s19117c3f0, ABISELECT(912,624), "S19117C3.s19117c3f0");
    check_field_offset(lv, s19117c3f1, ABISELECT(960,644), "S19117C3.s19117c3f1");
    check_field_offset(lv, s19117c3f2, ABISELECT(1040,704), "S19117C3.s19117c3f2");
    check_field_offset(lv, s19117c3f3, ABISELECT(1056,708), "S19117C3.s19117c3f3");
    test_class_info(&lv, &cd_S19117C3);
    dp->~S19117C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C3(Test_S19117C3, "S19117C3", ABISELECT(12304,8592));

#else // __cplusplus

extern void _ZN8S19117C3C1Ev();
extern void _ZN8S19117C3D1Ev();
Name_Map name_map_S19117C3[] = {
  NSPAIR(_ZN8S19117C3C1Ev),
  NSPAIR(_ZN8S19117C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C8;
extern VTBL_ENTRY _ZTI8S19117C8[];
extern  VTBL_ENTRY _ZTV8S19117C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C11;
extern VTBL_ENTRY _ZTI9S19117C11[];
extern  VTBL_ENTRY _ZTV9S19117C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C11[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C5;
extern VTBL_ENTRY _ZTI8S19117C5[];
extern  VTBL_ENTRY _ZTV8S19117C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C5[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C13;
extern VTBL_ENTRY _ZTI9S19117C13[];
extern  VTBL_ENTRY _ZTV9S19117C13[];
static Base_Class bases_S19117C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C6,    ABISELECT(1072,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1168,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
    3, //immediately_derived
  0, 0},
  {&cd_S19117C7,    ABISELECT(1168,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
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(1616,1104), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19117C8,    ABISELECT(1600,1096), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2704,1872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4528,3152), //bcp->offset
    44, //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
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(2160,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19117C11,    ABISELECT(2160,1488), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19117C12,    ABISELECT(128,84), //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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19117C5,    ABISELECT(128,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19117C12,    ABISELECT(4656,3236), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19117C13,    ABISELECT(5296,3680), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19117C3[];
extern void _ZN8S19117C3D1Ev();
extern void _ZN8S19117C3D0Ev();
extern void _ZN8S19117C32v6Ev();
extern void _ZN8S19117C32v7Ev();
extern void ABISELECT(_ZThn128_N8S19117C3D1Ev,_ZThn84_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19117C3D0Ev,_ZThn84_N8S19117C3D0Ev)();
extern void _ZN8S19117C92v2Ev();
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn2160_N8S19117C3D1Ev,_ZThn1488_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn2160_N8S19117C3D0Ev,_ZThn1488_N8S19117C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn4528_N8S19117C3D1Ev,_ZThn3152_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn4528_N8S19117C3D0Ev,_ZThn3152_N8S19117C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn4656_N8S19117C3D1Ev,_ZThn3236_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn4656_N8S19117C3D0Ev,_ZThn3236_N8S19117C3D0Ev)() __attribute__((weak));
extern void _ZN9S19117C132v3Ev();
extern void _ZN9S19117C132v4Ev();
extern void _ZN9S19117C132v5Ev();
static  VTBL_ENTRY vtc_S19117C3[] = {
  ABISELECT(5296,3680),
  ABISELECT(4656,3236),
  ABISELECT(4528,3152),
  ABISELECT(2160,1488),
  ABISELECT(1616,1104),
  ABISELECT(1600,1096),
  ABISELECT(1168,784),
  ABISELECT(1072,720),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v7Ev,
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C3D1Ev,_ZThn84_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C3D0Ev,_ZThn84_N8S19117C3D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1600,-1096),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1616,-1104),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  ABISELECT(-2160,-1488),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2160,-1488),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev),
  ABISELECT(-4528,-3152),
  ABISELECT(-4528,-3152),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev),
  ABISELECT(-4656,-3236),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  ABISELECT(-4656,-3236),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev),
  0,
  0,
  0,
  ABISELECT(-5296,-3680),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN9S19117C132v3Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v4Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v5Ev,
};
extern VTBL_ENTRY _ZTV8S19117C3[];
extern void _ZN8S19117C5D1Ev();
extern void _ZN8S19117C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C5__8S19117C3[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C5D0Ev,
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C128S19117C5__8S19117C3[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn4400_N9S19117C12D1Ev,_ZThn3068_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn4400_N9S19117C12D0Ev,_ZThn3068_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C128S19117C5__8S19117C3[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C128S19117C5__8S19117C3[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C128S19117C5__8S19117C3[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn2032_N9S19117C12D1Ev,_ZThn1404_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn2032_N9S19117C12D0Ev,_ZThn1404_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C128S19117C5__8S19117C3[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C5__8S19117C3[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C5__8S19117C3[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn2032_N8S19117C5D1Ev,_ZThn1404_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn2032_N8S19117C5D0Ev,_ZThn1404_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C5__8S19117C3[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn4400_N8S19117C5D1Ev,_ZThn3068_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn4400_N8S19117C5D0Ev,_ZThn3068_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S19117C5__8S19117C3[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C3[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C8__8S19117C3[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C3[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void _ZN9S19117C11D1Ev();
extern void _ZN9S19117C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C3[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D0Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C99S19117C11__A1__8S19117C3[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19117C11D1Ev,_ZThn1664_N9S19117C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19117C11D0Ev,_ZThn1664_N9S19117C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C11__8S19117C3[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev),
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C12__A1__8S19117C3[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C12__A1__8S19117C3[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C12__A1__8S19117C3[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C12__A1__8S19117C3[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C12__A1__8S19117C3[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTT_ENTRY vtt_S19117C3[] = {
  {&(_ZTV8S19117C3[10]),  10,68},
  {&(_tg__ZTV8S19117C5__8S19117C3[8]),  8,10},
  {&(_tg__ZTV9S19117C128S19117C5__8S19117C3[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C128S19117C5__8S19117C3[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C128S19117C5__8S19117C3[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C128S19117C5__8S19117C3[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C128S19117C5__8S19117C3[7]),  7,10},
  {&(_tg__ZTV8S19117C8__8S19117C5__8S19117C3[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C5__8S19117C3[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C5__8S19117C3[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S19117C5__8S19117C3[3]),  3,5},
  {&(_ZTV8S19117C3[22]),  22,68},
  {&(_ZTV8S19117C3[29]),  29,68},
  {&(_ZTV8S19117C3[33]),  33,68},
  {&(_ZTV8S19117C3[41]),  41,68},
  {&(_ZTV8S19117C3[47]),  47,68},
  {&(_ZTV8S19117C3[58]),  58,68},
  {&(_ZTV8S19117C3[65]),  65,68},
  {&(_tg__ZTV8S19117C8__8S19117C3[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C8__8S19117C3[4]),  4,5},
  {&(_tg__ZTV8S19117C9__8S19117C3[3]),  3,4},
  {&(_tg__ZTV9S19117C11__8S19117C3[5]),  5,8},
  {&(_tg__ZTV8S19117C99S19117C11__A1__8S19117C3[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19117C11__8S19117C3[3]),  3,5},
  {&(_tg__ZTV9S19117C12__A1__8S19117C3[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C12__A1__8S19117C3[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C12__A1__8S19117C3[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C12__A1__8S19117C3[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C12__A1__8S19117C3[7]),  7,10},
};
extern VTBL_ENTRY _ZTI8S19117C3[];
extern  VTBL_ENTRY _ZTV8S19117C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C3[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19117C11D0Ev,_ZThn1664_N9S19117C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19117C11D1Ev,_ZThn1664_N9S19117C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S19117C5D0Ev,_ZThn3068_N8S19117C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S19117C5D1Ev,_ZThn3068_N8S19117C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S19117C5D0Ev,_ZThn1404_N8S19117C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S19117C5D1Ev,_ZThn1404_N8S19117C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S19117C12D0Ev,_ZThn1404_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S19117C12D1Ev,_ZThn1404_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S19117C12D0Ev,_ZThn3068_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S19117C12D1Ev,_ZThn3068_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19117C3D0Ev,_ZThn3236_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19117C3D1Ev,_ZThn3236_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N8S19117C3D0Ev,_ZThn3152_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N8S19117C3D1Ev,_ZThn3152_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S19117C3D0Ev,_ZThn1488_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S19117C3D1Ev,_ZThn1488_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C3 = {  "S19117C3", // class name
  bases_S19117C3, 18,
  &(vtc_S19117C3[0]), // expected_vtbl_contents
  &(vtt_S19117C3[0]), // expected_vtt_contents
  ABISELECT(12304,8592), // object size
  NSPAIRA(_ZTI8S19117C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19117C3),68, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19117C3),29, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19117C16  : virtual S20507C6 , virtual S19117C15 , S19117C14 {
  void *s19117c16f0;
  ::S19117C11 s19117c16f1;
  virtual  ~S19117C16(); // _ZN9S19117C16D2Ev
  S19117C16(); // tgen
};
//SIG(-1 S19117C16) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 VBC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC5{ BC4 VBC2 v1 FD[2] Fi[2] FD[3]} FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC5 VBC3 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC5 VBC4 FC10{}} VBC11{ BC2 VBC4 VBC7 BC5 vd FC9 FC5} FC4 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} vd Fp FC11}


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

static void Test_S19117C16()
{
  extern Class_Descriptor cd_S19117C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(556,1559)];
    init_test(&cd_S19117C16, buf);
    S19117C16 *dp, &lv = *(dp=new (buf) S19117C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8880,6232), "sizeof(S19117C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C16)");
    /*is_ambiguous_... S19117C16::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(7568,5308), "S19117C16");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(7568,5308), "S19117C16");
    /*is_ambiguous_... S19117C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C15*), ABISELECT(7672,5376), "S19117C16");
    /*is_ambiguous_... S19117C16::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(7776,5452), "S19117C16");
    /*is_ambiguous_... S19117C15::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C15*), ABISELECT(7776,5452), "S19117C16");
    /*is_ambiguous_... S19117C14::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C14*), ABISELECT(7776,5452), "S19117C16");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(8224,5768), "S19117C16");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(8224,5768), "S19117C16");
    check_base_class_offset(lv, (S19117C9*)(S19117C15*), ABISELECT(8208,5764), "S19117C16");
    check_base_class_offset(lv, (S19117C9*)(S19117C14*), ABISELECT(8208,5764), "S19117C16");
    check_base_class_offset(lv, (S19117C15*), ABISELECT(7664,5372), "S19117C16");
    check_base_class_offset(lv, (S19117C15*)(S19117C14*), ABISELECT(7664,5372), "S19117C16");
    check_base_class_offset(lv, (S20507C11*)(S19117C14*), ABISELECT(8752,6148), "S19117C16");
    check_base_class_offset(lv, (S19117C14*), 0, "S19117C16");
    check_field_offset(lv, s19117c16f0, ABISELECT(4536,3180), "S19117C16.s19117c16f0");
    check_field_offset(lv, s19117c16f1, ABISELECT(4544,3184), "S19117C16.s19117c16f1");
    test_class_info(&lv, &cd_S19117C16);
    dp->~S19117C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C16(Test_S19117C16, "S19117C16", ABISELECT(8880,6232));

#else // __cplusplus

extern void _ZN9S19117C16C1Ev();
extern void _ZN9S19117C16D2Ev();
Name_Map name_map_S19117C16[] = {
  NSPAIR(_ZN9S19117C16C1Ev),
  NSPAIR(_ZN9S19117C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C15;
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S19117C14;
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
static Base_Class bases_S19117C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(7568,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(7672,5376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(8208,5764), //bcp->offset
    14, //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
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19117C15,    ABISELECT(7664,5372), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C11,    ABISELECT(8752,6148), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19117C14,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19117C16[];
extern void _ZN9S19117C16D1Ev();
extern void _ZN9S19117C16D0Ev();
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev)();
extern void ABISELECT(_ZThn8752_N9S19117C16D1Ev,_ZThn6148_N9S19117C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev)();
extern void ABISELECT(_ZThn8752_N9S19117C16D0Ev,_ZThn6148_N9S19117C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19117C16[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&_ZN9S19117C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C16D0Ev,
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19117C16[];
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C14__9S19117C16[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn8752_N9S19117C14D1Ev,_ZThn6148_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn8752_N9S19117C14D0Ev,_ZThn6148_N9S19117C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C14__9S19117C16[] = {
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C14__9S19117C16[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C14__9S19117C16[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C16[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C15__9S19117C16[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C16[] = {
  ABISELECT(-640,-456),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTT_ENTRY vtt_S19117C16[] = {
  {&(_ZTV9S19117C16[7]),  7,24},
  {&(_tg__ZTV9S19117C14__9S19117C16[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C14__9S19117C16[3]),  3,5},
  {&(_tg__ZTV8S19117C9__9S19117C14__9S19117C16[4]),  4,5},
  {&(_tg__ZTV9S19117C15__9S19117C14__9S19117C16[5]),  5,5},
  {&(_ZTV9S19117C16[14]),  14,24},
  {&(_ZTV9S19117C16[18]),  18,24},
  {&(_ZTV9S19117C16[22]),  22,24},
  {&(_tg__ZTV9S19117C15__9S19117C16[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C15__9S19117C16[4]),  4,5},
  {&(_tg__ZTV8S19117C9__9S19117C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19117C16[];
extern  VTBL_ENTRY _ZTV9S19117C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C16[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S19117C14D0Ev,_ZThn6148_N9S19117C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S19117C14D1Ev,_ZThn6148_N9S19117C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S19117C16D0Ev,_ZThn6148_N9S19117C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N9S19117C16D1Ev,_ZThn6148_N9S19117C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C16 = {  "S19117C16", // class name
  bases_S19117C16, 10,
  &(vtc_S19117C16[0]), // expected_vtbl_contents
  &(vtt_S19117C16[0]), // expected_vtt_contents
  ABISELECT(8880,6232), // object size
  NSPAIRA(_ZTI9S19117C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19117C16),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19117C16),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19117C17  : virtual S20507C6 , virtual S19117C9 , S19117C15 , S19117C14 , virtual S19117C11 {
  int s19117c17f0;
  void *s19117c17f1;
  int s19117c17f2:9;
  char s19117c17f3;
  long double s19117c17f4;
  ::S19117C9 s19117c17f5;
  ::S19117C5 s19117c17f6;
  char s19117c17f7;
  short s19117c17f8[7];
  ::S468C20_nt s19117c17f9;
  int s19117c17f10;
  char s19117c17f11;
  long s19117c17f12;
  virtual  ~S19117C17(); // _ZN9S19117C17D2Ev
  S19117C17(); // tgen
};
//SIG(-1 S19117C17) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} BC5{ BC2 VBC4 VBC3 FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC3 VBC5 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC3 VBC4 FC10{}} VBC11{ BC2 VBC4 VBC7 BC3 vd FC9 FC3} FC4 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} VBC11 vd Fi Fp Fi:9 Fc FD FC3 FC12{ VBC2 VBC4 VBC9 VBC11 BC8 vd FC7 FD} Fc Fs[7] FC10 Fi Fc Fl}


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

static void Test_S19117C17()
{
  extern Class_Descriptor cd_S19117C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(839,2353)];
    init_test(&cd_S19117C17, buf);
    S19117C17 *dp, &lv = *(dp=new (buf) S19117C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13408,9408), "sizeof(S19117C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C17)");
    /*is_ambiguous_... S19117C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(9736,6820), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(9736,6820), "S19117C17");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*)(S19117C11*), ABISELECT(9736,6820), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(9840,6888), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(9840,6888), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C9*), ABISELECT(9824,6884), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C15*), ABISELECT(9824,6884), "S19117C17");
    check_base_class_offset(lv, (S19117C9*)(S19117C14*), ABISELECT(9824,6884), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C15*), ABISELECT(9824,6884), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C15*), ABISELECT(8,4), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(10368,7268), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C15*), ABISELECT(10368,7268), "S19117C17");
    /*is_ambiguous_... S19117C14::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C14*), ABISELECT(10368,7268), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C15*), ABISELECT(10368,7268), "S19117C17");
    /*is_ambiguous_... S19117C11::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C11*), ABISELECT(10368,7268), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C15*), 0, "S19117C17");
    check_base_class_offset(lv, (S20507C11*)(S19117C14*), ABISELECT(10800,7580), "S19117C17");
    check_base_class_offset(lv, (S20507C11*)(S19117C11*), ABISELECT(10800,7580), "S19117C17");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C15*), ABISELECT(10936,7668), "S19117C17");
    check_base_class_offset(lv, (S19117C15*)(S19117C14*), ABISELECT(10928,7664), "S19117C17");
    check_base_class_offset(lv, (S19117C14*), ABISELECT(112,80), "S19117C17");
    /*is_ambiguous_... S19117C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C11*), ABISELECT(11584,8128), "S19117C17");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(11056,7748), "S19117C17");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(11056,7748), "S19117C17");
    check_base_class_offset(lv, (S19117C9*)(S19117C11*), ABISELECT(11040,7744), "S19117C17");
    check_base_class_offset(lv, (S19117C11*), ABISELECT(11040,7744), "S19117C17");
    check_field_offset(lv, s19117c17f0, ABISELECT(4648,3260), "S19117C17.s19117c17f0");
    check_field_offset(lv, s19117c17f1, ABISELECT(4656,3264), "S19117C17.s19117c17f1");
    set_bf_and_test(lv, s19117c17f2, ABISELECT(4664,3268), 0, 9, 1, "S19117C17");
    set_bf_and_test(lv, s19117c17f2, ABISELECT(4664,3268), 0, 9, hide_sll(1LL<<8), "S19117C17");
    check_field_offset(lv, s19117c17f3, ABISELECT(4666,3270), "S19117C17.s19117c17f3");
    check_field_offset(lv, s19117c17f4, ABISELECT(4672,3272), "S19117C17.s19117c17f4");
    check_field_offset(lv, s19117c17f5, ABISELECT(4688,3284), "S19117C17.s19117c17f5");
    check_field_offset(lv, s19117c17f6, ABISELECT(5328,3732), "S19117C17.s19117c17f6");
    check_field_offset(lv, s19117c17f7, ABISELECT(9696,6788), "S19117C17.s19117c17f7");
    check_field_offset(lv, s19117c17f8, ABISELECT(9698,6790), "S19117C17.s19117c17f8");
    check_field_offset(lv, s19117c17f9, ABISELECT(9712,6804), "S19117C17.s19117c17f9");
    check_field_offset(lv, s19117c17f10, ABISELECT(9716,6808), "S19117C17.s19117c17f10");
    check_field_offset(lv, s19117c17f11, ABISELECT(9720,6812), "S19117C17.s19117c17f11");
    check_field_offset(lv, s19117c17f12, ABISELECT(9728,6816), "S19117C17.s19117c17f12");
    test_class_info(&lv, &cd_S19117C17);
    dp->~S19117C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C17(Test_S19117C17, "S19117C17", ABISELECT(13408,9408));

#else // __cplusplus

extern void _ZN9S19117C17C1Ev();
extern void _ZN9S19117C17D2Ev();
Name_Map name_map_S19117C17[] = {
  NSPAIR(_ZN9S19117C17C1Ev),
  NSPAIR(_ZN9S19117C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C15;
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C15;
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
extern Class_Descriptor cd_S19117C14;
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C11;
extern VTBL_ENTRY _ZTI9S19117C11[];
extern  VTBL_ENTRY _ZTV9S19117C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C11[];
static Base_Class bases_S19117C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(9736,6820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(9840,6888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19117C7,    ABISELECT(9840,6888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(9824,6884), //bcp->offset
    19, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(10368,7268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(10368,7268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C15,    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_S20507C11,    ABISELECT(10800,7580), //bcp->offset
    24, //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
    11, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(10936,7668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C15,    ABISELECT(10928,7664), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19117C14,    ABISELECT(112,80), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(11584,8128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(11056,7748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(11056,7748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(11040,7744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19117C11,    ABISELECT(11040,7744), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //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 _ZTI9S19117C17[];
extern void _ZN9S19117C17D1Ev();
extern void _ZN9S19117C17D0Ev();
extern void ABISELECT(_ZThn112_N9S19117C17D1Ev,_ZThn80_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S19117C17D0Ev,_ZThn80_N9S19117C17D0Ev)();
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn10800_N9S19117C17D1Ev,_ZThn7580_N9S19117C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev)();
extern void ABISELECT(_ZThn10800_N9S19117C17D0Ev,_ZThn7580_N9S19117C17D0Ev)() __attribute__((weak));
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn11040_N9S19117C17D1Ev,_ZThn7744_N9S19117C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev)();
extern void ABISELECT(_ZThn11040_N9S19117C17D0Ev,_ZThn7744_N9S19117C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19117C17[] = {
  ABISELECT(11040,7744),
  ABISELECT(10928,7664),
  ABISELECT(10800,7580),
  ABISELECT(9736,6820),
  ABISELECT(9824,6884),
  ABISELECT(10368,7268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN9S19117C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C17D0Ev,
  ABISELECT(10816,7584),
  ABISELECT(9624,6740),
  ABISELECT(9712,6804),
  ABISELECT(10256,7188),
  ABISELECT(10688,7500),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S19117C17D1Ev,_ZThn80_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S19117C17D0Ev,_ZThn80_N9S19117C17D0Ev),
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9824,-6884),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  ABISELECT(-10800,-7580),
  ABISELECT(-10800,-7580),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev),
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  ABISELECT(-10928,-7664),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  ABISELECT(-11040,-7744),
  0,
  ABISELECT(-240,-164),
  ABISELECT(-672,-476),
  ABISELECT(-1304,-924),
  ABISELECT(-11040,-7744),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19117C17[];
static  VTBL_ENTRY _tg__ZTV9S19117C15__A__9S19117C17[] = {
  ABISELECT(9736,6820),
  ABISELECT(9824,6884),
  ABISELECT(10368,7268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C15__A__9S19117C17[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9824,-6884),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C14__9S19117C17[] = {
  ABISELECT(10816,7584),
  ABISELECT(9624,6740),
  ABISELECT(9712,6804),
  ABISELECT(10256,7188),
  ABISELECT(10688,7500),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn10688_N9S19117C14D1Ev,_ZThn7500_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn10688_N9S19117C14D0Ev,_ZThn7500_N9S19117C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C14__9S19117C17[] = {
  ABISELECT(-10688,-7500),
  ABISELECT(-10688,-7500),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C14__9S19117C17[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9712,-6804),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C14__9S19117C17[] = {
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  ABISELECT(-10816,-7584),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C17[] = {
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__A1__9S19117C17[] = {
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C15__A1__9S19117C17[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(1104,780),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void _ZN9S19117C11D1Ev();
extern void _ZN9S19117C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C17[] = {
  ABISELECT(-240,-164),
  ABISELECT(-672,-476),
  ABISELECT(-1304,-924),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D0Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C99S19117C11__A1__9S19117C17[] = {
  ABISELECT(-1304,-924),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C11__9S19117C17[] = {
  ABISELECT(240,164),
  ABISELECT(240,164),
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev),
};
static  VTT_ENTRY vtt_S19117C17[] = {
  {&(_ZTV9S19117C17[8]),  8,44},
  {&(_tg__ZTV9S19117C15__A__9S19117C17[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C15__A__9S19117C17[4]),  4,5},
  {&(_tg__ZTV9S19117C14__9S19117C17[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C14__9S19117C17[3]),  3,5},
  {&(_tg__ZTV8S19117C9__9S19117C14__9S19117C17[4]),  4,5},
  {&(_tg__ZTV9S19117C15__9S19117C14__9S19117C17[5]),  5,5},
  {&(_ZTV9S19117C17[23]),  23,44},
  {&(_ZTV9S19117C17[17]),  17,44},
  {&(_ZTV9S19117C17[27]),  27,44},
  {&(_ZTV9S19117C17[34]),  34,44},
  {&(_ZTV9S19117C17[41]),  41,44},
  {&(_tg__ZTV8S19117C9__9S19117C17[3]),  3,4},
  {&(_tg__ZTV9S19117C15__A1__9S19117C17[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C15__A1__9S19117C17[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C17[5]),  5,8},
  {&(_tg__ZTV8S19117C99S19117C11__A1__9S19117C17[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19117C11__9S19117C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19117C17[];
extern  VTBL_ENTRY _ZTV9S19117C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C17[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10688_N9S19117C14D0Ev,_ZThn7500_N9S19117C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10688_N9S19117C14D1Ev,_ZThn7500_N9S19117C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11040_N9S19117C17D0Ev,_ZThn7744_N9S19117C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11040_N9S19117C17D1Ev,_ZThn7744_N9S19117C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19117C17D0Ev,_ZThn7580_N9S19117C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19117C17D1Ev,_ZThn7580_N9S19117C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C17 = {  "S19117C17", // class name
  bases_S19117C17, 17,
  &(vtc_S19117C17[0]), // expected_vtbl_contents
  &(vtt_S19117C17[0]), // expected_vtt_contents
  ABISELECT(13408,9408), // object size
  NSPAIRA(_ZTI9S19117C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19117C17),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19117C17),18, //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  S19117C2  : S19117C3 , S19117C16 , S19117C5 , S19117C17 , S19117C14 {
  int s19117c2f0[4];
  char s19117c2f1;
  ::S19117C3 s19117c2f2;
  void *s19117c2f3;
  long s19117c2f4[6];
  ::S19117C17 s19117c2f5;
  int s19117c2f6;
  virtual  ~S19117C2(); // _ZN8S19117C2D2Ev
  virtual void  v8(); // _ZN8S19117C22v8Ev
  virtual void  v9(); // _ZN8S19117C22v9Ev
  S19117C2(); // tgen
};
//SIG(-1 S19117C2) C1{ BC2{ BC3{ vd m Fp FD[5] Fp FD} BC4{ VBC5{ m Fi[10] Fp[6]} VBC6{ BC5 Fi FD Fi FC5 FC5 Fi FD[8]} VBC7{ VBC5 VBC8{ BC6 VBC5 v3 FD[2] Fi[2] FD[3]} VBC6 FC9{}} VBC10{ BC5 VBC6 VBC3 BC8 vd FC7 FC8} BC11{ VBC5 VBC3 VBC7 VBC10 FC6 FC5 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC3 FD} VBC11 VBC12{ v4 v5 v6 Fi FC7 Fi Fp FC13{ VBC3 VBC6 VBC8 VBC14{ BC5 VBC6 VBC8 FD} vd FD[9] Fi FC11 Fi FL FC3 FL} Fi FL FD} v7 v8 Fp[5] FD[5] Fi FD} BC15{ VBC5 VBC14 BC13 vd Fp FC10} BC4 BC16{ VBC5 VBC8 BC14 BC13 VBC10 vd Fi Fp Fi:9 Fc FD FC8 FC4 Fc Fs[7] FC9 Fi Fc Fl} BC13 vd v1 v2 Fi[4] Fc FC2 Fp Fl[6] FC16 Fi}


 S19117C2 ::~S19117C2(){ note_dtor("S19117C2", this);}
void  S19117C2 ::v8(){vfunc_called(this, "_ZN8S19117C22v8Ev");}
void  S19117C2 ::v9(){vfunc_called(this, "_ZN8S19117C22v9Ev");}
S19117C2 ::S19117C2(){ note_ctor("S19117C2", this);} // tgen

static void Test_S19117C2()
{
  extern Class_Descriptor cd_S19117C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3804,10644)];
    init_test(&cd_S19117C2, buf);
    S19117C2 *dp, &lv = *(dp=new (buf) S19117C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(60848,42572), "sizeof(S19117C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C2)");
    /*is_ambiguous_... S19117C3::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C3*), 0, "S19117C2");
    /*is_ambiguous_... S19117C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C5*)(S19117C3*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C8*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*)(S19117C11*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*)(S19117C5*)(S19117C3*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C16::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C16*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C5*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*)(S19117C5*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C17*), ABISELECT(49512,34620), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C5::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C5*)(S19117C3*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C8::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C8*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C11::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C11*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C15*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C14::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C14*)(S19117C16*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C5*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C15*)(S19117C17*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C14::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C14*)(S19117C17*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C14*), ABISELECT(49600,34684), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(50064,35008), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(50064,35008), "S19117C2");
    check_base_class_offset(lv, (S19117C9*)(S19117C8*), ABISELECT(50048,35004), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C15*), ABISELECT(50048,35004), "S19117C2");
    check_base_class_offset(lv, (S19117C9*)(S19117C14*)(S19117C16*), ABISELECT(50048,35004), "S19117C2");
    /*is_ambiguous_... S19117C17::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C17*), ABISELECT(50048,35004), "S19117C2");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C15*)(S19117C17*), ABISELECT(50048,35004), "S19117C2");
    check_base_class_offset(lv, (S19117C9*)(S19117C14*)(S19117C17*), ABISELECT(50048,35004), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C14*), ABISELECT(50048,35004), "S19117C2");
    check_base_class_offset(lv, (S19117C8*)(S19117C5*)(S19117C3*), ABISELECT(50032,34996), "S19117C2");
    check_base_class_offset(lv, (S19117C8*)(S19117C12*)(S19117C5*)(S19117C3*), ABISELECT(50032,34996), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C12*), ABISELECT(50032,34996), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C5*), ABISELECT(50032,34996), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C12*)(S19117C5*), ABISELECT(50032,34996), "S19117C2");
    /*is_ambiguous_... S19117C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C11*), ABISELECT(51136,35772), "S19117C2");
    check_base_class_offset(lv, (S20507C11*)(S19117C11*), ABISELECT(52960,37052), "S19117C2");
    check_base_class_offset(lv, (S20507C11*)(S19117C12*)(S19117C5*)(S19117C3*), ABISELECT(52960,37052), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C12 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C12*), ABISELECT(52960,37052), "S19117C2");
    check_base_class_offset(lv, (S20507C11*)(S19117C14*)(S19117C16*), ABISELECT(52960,37052), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C12*)(S19117C5*), ABISELECT(52960,37052), "S19117C2");
    check_base_class_offset(lv, (S20507C11*)(S19117C14*)(S19117C17*), ABISELECT(52960,37052), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C14*), ABISELECT(52960,37052), "S19117C2");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(50608,35392), "S19117C2");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(50608,35392), "S19117C2");
    check_base_class_offset(lv, (S19117C9*)(S19117C11*), ABISELECT(50592,35388), "S19117C2");
    check_base_class_offset(lv, (S19117C11*)(S19117C5*)(S19117C3*), ABISELECT(50592,35388), "S19117C2");
    check_base_class_offset(lv, (S19117C11*)(S19117C12*)(S19117C5*)(S19117C3*), ABISELECT(50592,35388), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C12*), ABISELECT(50592,35388), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C5*), ABISELECT(50592,35388), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C12*)(S19117C5*), ABISELECT(50592,35388), "S19117C2");
    check_base_class_offset(lv, (S19117C11*)(S19117C17*), ABISELECT(50592,35388), "S19117C2");
    check_base_class_offset(lv, (S19117C12*)(S19117C5*)(S19117C3*), ABISELECT(128,84), "S19117C2");
    check_base_class_offset(lv, (S19117C5*)(S19117C3*), ABISELECT(128,84), "S19117C2");
    /*is_ambiguous_... S19117C3::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C12*)(S19117C3*), ABISELECT(53088,37136), "S19117C2");
    check_base_class_offset(lv, (S19117C13*)(S19117C3*), ABISELECT(53728,37580), "S19117C2");
    check_base_class_offset(lv, (S19117C3*), 0, "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C15*), ABISELECT(60744,42496), "S19117C2");
    check_base_class_offset(lv, (S19117C15*)(S19117C16*), ABISELECT(60736,42492), "S19117C2");
    check_base_class_offset(lv, (S19117C15*)(S19117C14*)(S19117C16*), ABISELECT(60736,42492), "S19117C2");
    check_base_class_offset(lv, (S19117C15*)(S19117C14*)(S19117C17*), ABISELECT(60736,42492), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S19117C15*)(S19117C14*), ABISELECT(60736,42492), "S19117C2");
    check_base_class_offset(lv, (S19117C14*)(S19117C16*), ABISELECT(1072,720), "S19117C2");
    check_base_class_offset(lv, (S19117C16*), ABISELECT(1072,720), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C12*)(S19117C5*), ABISELECT(8640,6028), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C5*), ABISELECT(8640,6028), "S19117C2");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C15*)(S19117C17*), ABISELECT(9432,6572), "S19117C2");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C15*)(S19117C17*), ABISELECT(9424,6568), "S19117C2");
    check_base_class_offset(lv, (S19117C14*)(S19117C17*), ABISELECT(9536,6648), "S19117C2");
    check_base_class_offset(lv, (S19117C17*), ABISELECT(9424,6568), "S19117C2");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S19117C14*), ABISELECT(19168,13388), "S19117C2");
    check_field_offset(lv, s19117c2f0, ABISELECT(23704,16568), "S19117C2.s19117c2f0");
    check_field_offset(lv, s19117c2f1, ABISELECT(23720,16584), "S19117C2.s19117c2f1");
    check_field_offset(lv, s19117c2f2, ABISELECT(23728,16588), "S19117C2.s19117c2f2");
    check_field_offset(lv, s19117c2f3, ABISELECT(36032,25180), "S19117C2.s19117c2f3");
    check_field_offset(lv, s19117c2f4, ABISELECT(36040,25184), "S19117C2.s19117c2f4");
    check_field_offset(lv, s19117c2f5, ABISELECT(36096,25208), "S19117C2.s19117c2f5");
    check_field_offset(lv, s19117c2f6, ABISELECT(49504,34616), "S19117C2.s19117c2f6");
    test_class_info(&lv, &cd_S19117C2);
    dp->~S19117C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C2(Test_S19117C2, "S19117C2", ABISELECT(60848,42572));

#else // __cplusplus

extern void _ZN8S19117C2C1Ev();
extern void _ZN8S19117C2D2Ev();
Name_Map name_map_S19117C2[] = {
  NSPAIR(_ZN8S19117C2C1Ev),
  NSPAIR(_ZN8S19117C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C8;
extern VTBL_ENTRY _ZTI8S19117C8[];
extern  VTBL_ENTRY _ZTV8S19117C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C11;
extern VTBL_ENTRY _ZTI9S19117C11[];
extern  VTBL_ENTRY _ZTV9S19117C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C11[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C5;
extern VTBL_ENTRY _ZTI8S19117C5[];
extern  VTBL_ENTRY _ZTV8S19117C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C5[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C13;
extern VTBL_ENTRY _ZTI9S19117C13[];
extern  VTBL_ENTRY _ZTV9S19117C13[];
extern Class_Descriptor cd_S19117C3;
extern VTBL_ENTRY _ZTI8S19117C3[];
extern  VTBL_ENTRY _ZTV8S19117C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C3[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C15;
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
extern Class_Descriptor cd_S19117C14;
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
extern Class_Descriptor cd_S19117C16;
extern VTBL_ENTRY _ZTI9S19117C16[];
extern  VTBL_ENTRY _ZTV9S19117C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C16[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C5;
extern VTBL_ENTRY _ZTI8S19117C5[];
extern  VTBL_ENTRY _ZTV8S19117C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C15;
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
extern Class_Descriptor cd_S19117C14;
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
extern Class_Descriptor cd_S19117C17;
extern VTBL_ENTRY _ZTI9S19117C17[];
extern  VTBL_ENTRY _ZTV9S19117C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C17[];
extern Class_Descriptor cd_S19117C14;
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
static Base_Class bases_S19117C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(49512,34620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(49600,34684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(49600,34684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(50064,35008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(50064,35008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(50048,35004), //bcp->offset
    79, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19117C8,    ABISELECT(50032,34996), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(51136,35772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(52960,37052), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(50608,35392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(50608,35392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(50592,35388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19117C11,    ABISELECT(50592,35388), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19117C12,    ABISELECT(128,84), //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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19117C5,    ABISELECT(128,84), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19117C12,    ABISELECT(53088,37136), //bcp->offset
    99, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19117C13,    ABISELECT(53728,37580), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19117C3,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(60744,42496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C15,    ABISELECT(60736,42492), //bcp->offset
    118, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19117C14,    ABISELECT(1072,720), //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
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19117C16,    ABISELECT(1072,720), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19117C12,    ABISELECT(8640,6028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19117C5,    ABISELECT(8640,6028), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(9432,6572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C15,    ABISELECT(9424,6568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19117C14,    ABISELECT(9536,6648), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19117C17,    ABISELECT(9424,6568), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19117C14,    ABISELECT(19168,13388), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19117C2[];
extern void _ZN8S19117C2D1Ev();
extern void _ZN8S19117C2D0Ev();
extern void _ZN8S19117C32v6Ev();
extern void _ZN8S19117C32v7Ev();
extern void _ZN8S19117C22v8Ev();
extern void _ZN8S19117C22v9Ev();
extern void ABISELECT(_ZThn128_N8S19117C2D1Ev,_ZThn84_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S19117C2D0Ev,_ZThn84_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn1072_N8S19117C2D1Ev,_ZThn720_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn1072_N8S19117C2D0Ev,_ZThn720_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn8640_N8S19117C2D1Ev,_ZThn6028_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn8640_N8S19117C2D0Ev,_ZThn6028_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn9424_N8S19117C2D1Ev,_ZThn6568_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn9424_N8S19117C2D0Ev,_ZThn6568_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn9536_N8S19117C2D1Ev,_ZThn6648_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn9536_N8S19117C2D0Ev,_ZThn6648_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn19168_N8S19117C2D1Ev,_ZThn13388_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn19168_N8S19117C2D0Ev,_ZThn13388_N8S19117C2D0Ev)();
extern void _ZN8S19117C92v2Ev();
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C2D1Ev,_ZTv0_n28_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn50592_N8S19117C2D1Ev,_ZThn35388_N8S19117C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C2D0Ev,_ZTv0_n28_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn50592_N8S19117C2D0Ev,_ZThn35388_N8S19117C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C2D1Ev,_ZTv0_n12_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn52960_N8S19117C2D1Ev,_ZThn37052_N8S19117C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C2D0Ev,_ZTv0_n12_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn52960_N8S19117C2D0Ev,_ZThn37052_N8S19117C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C2D1Ev,_ZTv0_n36_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn53088_N8S19117C2D1Ev,_ZThn37136_N8S19117C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C2D0Ev,_ZTv0_n36_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn53088_N8S19117C2D0Ev,_ZThn37136_N8S19117C2D0Ev)() __attribute__((weak));
extern void _ZN9S19117C132v3Ev();
extern void _ZN9S19117C132v4Ev();
extern void _ZN9S19117C132v5Ev();
static  VTBL_ENTRY vtc_S19117C2[] = {
  ABISELECT(60736,42492),
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&_ZN8S19117C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19117C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19117C22v9Ev,
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C2D1Ev,_ZThn84_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C2D0Ev,_ZThn84_N8S19117C2D0Ev),
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  ABISELECT(-1072,-720),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S19117C2D1Ev,_ZThn720_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S19117C2D0Ev,_ZThn720_N8S19117C2D0Ev),
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  ABISELECT(-8640,-6028),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N8S19117C2D1Ev,_ZThn6028_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N8S19117C2D0Ev,_ZThn6028_N8S19117C2D0Ev),
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  ABISELECT(-9424,-6568),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N8S19117C2D1Ev,_ZThn6568_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N8S19117C2D0Ev,_ZThn6568_N8S19117C2D0Ev),
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-9536,-6648),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N8S19117C2D1Ev,_ZThn6648_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N8S19117C2D0Ev,_ZThn6648_N8S19117C2D0Ev),
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  ABISELECT(-19168,-13388),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N8S19117C2D1Ev,_ZThn13388_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N8S19117C2D0Ev,_ZThn13388_N8S19117C2D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50032,-34996),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50048,-35004),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  ABISELECT(-50592,-35388),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50592,-35388),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C2D1Ev,_ZTv0_n28_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C2D0Ev,_ZTv0_n28_N8S19117C2D0Ev),
  ABISELECT(-52960,-37052),
  ABISELECT(-52960,-37052),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C2D1Ev,_ZTv0_n12_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C2D0Ev,_ZTv0_n12_N8S19117C2D0Ev),
  ABISELECT(-53088,-37136),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53088,-37136),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C2D1Ev,_ZTv0_n36_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C2D0Ev,_ZTv0_n36_N8S19117C2D0Ev),
  0,
  0,
  0,
  ABISELECT(-53728,-37580),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&_ZN9S19117C132v3Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v4Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v5Ev,
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-60736,-42492),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
};
extern VTBL_ENTRY _ZTV8S19117C2[];
extern void _ZN8S19117C3D1Ev();
extern void _ZN8S19117C3D0Ev();
extern void _ZN8S19117C32v6Ev();
extern void _ZN8S19117C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C3__8S19117C2[] = {
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v7Ev,
};
extern void _ZN8S19117C5D1Ev();
extern void _ZN8S19117C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C58S19117C3__8S19117C2[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C5D0Ev,
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C128S19117C58S19117C3__8S19117C2[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn52832_N9S19117C12D1Ev,_ZThn36968_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn52832_N9S19117C12D0Ev,_ZThn36968_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C128S19117C58S19117C3__8S19117C2[] = {
  ABISELECT(-52832,-36968),
  ABISELECT(-52832,-36968),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C128S19117C58S19117C3__8S19117C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-49904,-34912),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C128S19117C58S19117C3__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-49920,-34920),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn50464_N9S19117C12D1Ev,_ZThn35304_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn50464_N9S19117C12D0Ev,_ZThn35304_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C128S19117C58S19117C3__8S19117C2[] = {
  ABISELECT(-50464,-35304),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50464,-35304),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C58S19117C3__8S19117C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-49904,-34912),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C58S19117C3__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-49920,-34920),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn50464_N8S19117C5D1Ev,_ZThn35304_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn50464_N8S19117C5D0Ev,_ZThn35304_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C58S19117C3__8S19117C2[] = {
  ABISELECT(-50464,-35304),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50464,-35304),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn52832_N8S19117C5D1Ev,_ZThn36968_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn52832_N8S19117C5D0Ev,_ZThn36968_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S19117C58S19117C3__8S19117C2[] = {
  ABISELECT(-52832,-36968),
  ABISELECT(-52832,-36968),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev),
};
extern void ABISELECT(_ZThn128_N8S19117C3D1Ev,_ZThn84_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19117C3D0Ev,_ZThn84_N8S19117C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19117C5__8S19117C3__8S19117C2[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C3D1Ev,_ZThn84_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C3D0Ev,_ZThn84_N8S19117C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C3__8S19117C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50032,-34996),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C3__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50048,-35004),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn50592_N8S19117C3D1Ev,_ZThn35388_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn50592_N8S19117C3D0Ev,_ZThn35388_N8S19117C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C3__8S19117C2[] = {
  ABISELECT(-50592,-35388),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50592,-35388),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn52960_N8S19117C3D1Ev,_ZThn37052_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn52960_N8S19117C3D0Ev,_ZThn37052_N8S19117C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__8S19117C3__8S19117C2[] = {
  ABISELECT(-52960,-37052),
  ABISELECT(-52960,-37052),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn53088_N8S19117C3D1Ev,_ZThn37136_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn53088_N8S19117C3D0Ev,_ZThn37136_N8S19117C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C12__A1__8S19117C3__8S19117C2[] = {
  ABISELECT(-53088,-37136),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53088,-37136),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev),
};
extern void _ZN9S19117C132v3Ev();
extern void _ZN9S19117C132v4Ev();
extern void _ZN9S19117C132v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C13__8S19117C3__8S19117C2[] = {
  0,
  0,
  0,
  ABISELECT(-53728,-37580),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN9S19117C132v3Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v4Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v5Ev,
};
extern void _ZN9S19117C16D1Ev();
extern void _ZN9S19117C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C16__8S19117C2[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&_ZN9S19117C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C16D0Ev,
};
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C149S19117C16__8S19117C2[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn51888_N9S19117C14D1Ev,_ZThn36332_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn51888_N9S19117C14D0Ev,_ZThn36332_N9S19117C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C149S19117C16__8S19117C2[] = {
  ABISELECT(-51888,-36332),
  ABISELECT(-51888,-36332),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C149S19117C16__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-48976,-34284),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C149S19117C16__8S19117C2[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-59664,-41772),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C16__8S19117C2[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-59664,-41772),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C16__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-48976,-34284),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev)();
extern void ABISELECT(_ZThn51888_N9S19117C16D1Ev,_ZThn36332_N9S19117C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev)();
extern void ABISELECT(_ZThn51888_N9S19117C16D0Ev,_ZThn36332_N9S19117C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C16__8S19117C2[] = {
  ABISELECT(-51888,-36332),
  ABISELECT(-51888,-36332),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev),
};
extern void _ZN8S19117C5D1Ev();
extern void _ZN8S19117C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C5__A1__8S19117C2[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C5D0Ev,
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C128S19117C5__A2__8S19117C2[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn44320_N9S19117C12D1Ev,_ZThn31024_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn44320_N9S19117C12D0Ev,_ZThn31024_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C128S19117C5__A2__8S19117C2[] = {
  ABISELECT(-44320,-31024),
  ABISELECT(-44320,-31024),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C128S19117C5__A2__8S19117C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-41392,-28968),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C128S19117C5__A2__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-41408,-28976),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn41952_N9S19117C12D1Ev,_ZThn29360_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn41952_N9S19117C12D0Ev,_ZThn29360_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C128S19117C5__A2__8S19117C2[] = {
  ABISELECT(-41952,-29360),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41952,-29360),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C5__A1__8S19117C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-41392,-28968),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C5__A1__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-41408,-28976),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn41952_N8S19117C5D1Ev,_ZThn29360_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn41952_N8S19117C5D0Ev,_ZThn29360_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C5__A1__8S19117C2[] = {
  ABISELECT(-41952,-29360),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41952,-29360),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn44320_N8S19117C5D1Ev,_ZThn31024_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn44320_N8S19117C5D0Ev,_ZThn31024_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S19117C5__A1__8S19117C2[] = {
  ABISELECT(-44320,-31024),
  ABISELECT(-44320,-31024),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev),
};
extern void _ZN9S19117C17D1Ev();
extern void _ZN9S19117C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C17__8S19117C2[] = {
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN9S19117C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C159S19117C17__A1__8S19117C2[] = {
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C159S19117C17__A1__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40624,-28436),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C149S19117C17__A1__8S19117C2[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn43424_N9S19117C14D1Ev,_ZThn30404_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn43424_N9S19117C14D0Ev,_ZThn30404_N9S19117C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C149S19117C17__A1__8S19117C2[] = {
  ABISELECT(-43424,-30404),
  ABISELECT(-43424,-30404),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C149S19117C17__A1__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40512,-28356),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C149S19117C17__A1__8S19117C2[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-51200,-35844),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C17__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40624,-28436),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZThn112_N9S19117C17D1Ev,_ZThn80_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S19117C17D0Ev,_ZThn80_N9S19117C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C14__9S19117C17__8S19117C2[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S19117C17D1Ev,_ZThn80_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S19117C17D0Ev,_ZThn80_N9S19117C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn43536_N9S19117C17D1Ev,_ZThn30484_N9S19117C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev)();
extern void ABISELECT(_ZThn43536_N9S19117C17D0Ev,_ZThn30484_N9S19117C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C17__8S19117C2[] = {
  ABISELECT(-43536,-30484),
  ABISELECT(-43536,-30484),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__A1__9S19117C17__8S19117C2[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-51312,-35924),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn41168_N9S19117C17D1Ev,_ZThn28820_N9S19117C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev)();
extern void ABISELECT(_ZThn41168_N9S19117C17D0Ev,_ZThn28820_N9S19117C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C17__8S19117C2[] = {
  ABISELECT(-41168,-28820),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41168,-28820),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev),
};
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C14__A2__8S19117C2[] = {
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn33792_N9S19117C14D1Ev,_ZThn23664_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn33792_N9S19117C14D0Ev,_ZThn23664_N9S19117C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C14__A2__8S19117C2[] = {
  ABISELECT(-33792,-23664),
  ABISELECT(-33792,-23664),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C14__A2__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-30880,-21616),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C14__A2__8S19117C2[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-41568,-29104),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C8__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C2[] = {
  ABISELECT(-536,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void _ZN9S19117C11D1Ev();
extern void _ZN9S19117C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C2[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D0Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C99S19117C11__A1__8S19117C2[] = {
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19117C11D1Ev,_ZThn1664_N9S19117C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19117C11D0Ev,_ZThn1664_N9S19117C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C11__8S19117C2[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev),
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C12__A1__8S19117C2[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C12__A1__8S19117C2[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C12__A1__8S19117C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C12__A1__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C12__A1__8S19117C2[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__8S19117C2[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C15__8S19117C2[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(10688,7488),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTT_ENTRY vtt_S19117C2[] = {
  {&(_ZTV8S19117C2[11]),  11,123},
  {&(_tg__ZTV8S19117C3__8S19117C2[10]),  10,14},
  {&(_tg__ZTV8S19117C58S19117C3__8S19117C2[8]),  8,10},
  {&(_tg__ZTV9S19117C128S19117C58S19117C3__8S19117C2[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C128S19117C58S19117C3__8S19117C2[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C128S19117C58S19117C3__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C128S19117C58S19117C3__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C128S19117C58S19117C3__8S19117C2[7]),  7,10},
  {&(_tg__ZTV8S19117C8__8S19117C58S19117C3__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C58S19117C3__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C58S19117C3__8S19117C2[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S19117C58S19117C3__8S19117C2[3]),  3,5},
  {&(_tg__ZTV8S19117C5__8S19117C3__8S19117C2[8]),  8,10},
  {&(_tg__ZTV8S19117C8__8S19117C3__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C3__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C3__8S19117C2[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__8S19117C3__8S19117C2[3]),  3,5},
  {&(_tg__ZTV9S19117C12__A1__8S19117C3__8S19117C2[9]),  9,11},
  {&(_tg__ZTV9S19117C13__8S19117C3__8S19117C2[5]),  5,8},
  {&(_tg__ZTV9S19117C16__8S19117C2[7]),  7,9},
  {&(_tg__ZTV9S19117C149S19117C16__8S19117C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C149S19117C16__8S19117C2[3]),  3,5},
  {&(_tg__ZTV8S19117C9__9S19117C149S19117C16__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C15__9S19117C149S19117C16__8S19117C2[5]),  5,5},
  {&(_tg__ZTV9S19117C15__9S19117C16__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C16__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S20507C11__9S19117C16__8S19117C2[3]),  3,5},
  {&(_tg__ZTV8S19117C5__A1__8S19117C2[8]),  8,10},
  {&(_tg__ZTV9S19117C128S19117C5__A2__8S19117C2[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C128S19117C5__A2__8S19117C2[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C128S19117C5__A2__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C128S19117C5__A2__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C128S19117C5__A2__8S19117C2[7]),  7,10},
  {&(_tg__ZTV8S19117C8__8S19117C5__A1__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C5__A1__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C5__A1__8S19117C2[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S19117C5__A1__8S19117C2[3]),  3,5},
  {&(_tg__ZTV9S19117C17__8S19117C2[8]),  8,10},
  {&(_tg__ZTV9S19117C159S19117C17__A1__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C159S19117C17__A1__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C149S19117C17__A1__8S19117C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C149S19117C17__A1__8S19117C2[3]),  3,5},
  {&(_tg__ZTV8S19117C9__9S19117C149S19117C17__A1__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C15__9S19117C149S19117C17__A1__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C17__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C14__9S19117C17__8S19117C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C17__8S19117C2[3]),  3,5},
  {&(_tg__ZTV9S19117C15__A1__9S19117C17__8S19117C2[5]),  5,5},
  {&(_tg__ZTV9S19117C11__9S19117C17__8S19117C2[7]),  7,10},
  {&(_tg__ZTV9S19117C14__A2__8S19117C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C14__A2__8S19117C2[3]),  3,5},
  {&(_tg__ZTV8S19117C9__9S19117C14__A2__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C15__9S19117C14__A2__8S19117C2[5]),  5,5},
  {&(_ZTV8S19117C2[25]),  25,123},
  {&(_ZTV8S19117C2[79]),  79,123},
  {&(_ZTV8S19117C2[83]),  83,123},
  {&(_ZTV8S19117C2[91]),  91,123},
  {&(_ZTV8S19117C2[97]),  97,123},
  {&(_ZTV8S19117C2[108]),  108,123},
  {&(_ZTV8S19117C2[115]),  115,123},
  {&(_ZTV8S19117C2[34]),  34,123},
  {&(_ZTV8S19117C2[123]),  123,123},
  {&(_ZTV8S19117C2[44]),  44,123},
  {&(_ZTV8S19117C2[54]),  54,123},
  {&(_ZTV8S19117C2[63]),  63,123},
  {&(_ZTV8S19117C2[72]),  72,123},
  {&(_tg__ZTV8S19117C8__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C8__8S19117C2[4]),  4,5},
  {&(_tg__ZTV8S19117C9__8S19117C2[3]),  3,4},
  {&(_tg__ZTV9S19117C11__8S19117C2[5]),  5,8},
  {&(_tg__ZTV8S19117C99S19117C11__A1__8S19117C2[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19117C11__8S19117C2[3]),  3,5},
  {&(_tg__ZTV9S19117C12__A1__8S19117C2[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C12__A1__8S19117C2[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C12__A1__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C12__A1__8S19117C2[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C12__A1__8S19117C2[7]),  7,10},
  {&(_tg__ZTV9S19117C15__8S19117C2[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C15__8S19117C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19117C2[];
extern  VTBL_ENTRY _ZTV8S19117C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C2[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19117C11D0Ev,_ZThn1664_N9S19117C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19117C11D1Ev,_ZThn1664_N9S19117C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41168_N9S19117C17D0Ev,_ZThn28820_N9S19117C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41168_N9S19117C17D1Ev,_ZThn28820_N9S19117C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43536_N9S19117C17D0Ev,_ZThn30484_N9S19117C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43536_N9S19117C17D1Ev,_ZThn30484_N9S19117C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S19117C16D0Ev,_ZThn36332_N9S19117C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S19117C16D1Ev,_ZThn36332_N9S19117C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S19117C14D0Ev,_ZThn23664_N9S19117C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn43424_N9S19117C14D0Ev,_ZThn30404_N9S19117C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S19117C14D0Ev,_ZThn36332_N9S19117C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S19117C14D1Ev,_ZThn23664_N9S19117C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn43424_N9S19117C14D1Ev,_ZThn30404_N9S19117C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S19117C14D1Ev,_ZThn36332_N9S19117C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N8S19117C3D0Ev,_ZThn37136_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N8S19117C3D1Ev,_ZThn37136_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S19117C3D0Ev,_ZThn37052_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S19117C3D1Ev,_ZThn37052_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N8S19117C3D0Ev,_ZThn35388_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N8S19117C3D1Ev,_ZThn35388_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N8S19117C5D0Ev,_ZThn31024_N8S19117C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N8S19117C5D0Ev,_ZThn36968_N8S19117C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N8S19117C5D1Ev,_ZThn31024_N8S19117C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N8S19117C5D1Ev,_ZThn36968_N8S19117C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N8S19117C5D0Ev,_ZThn29360_N8S19117C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N8S19117C5D0Ev,_ZThn35304_N8S19117C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N8S19117C5D1Ev,_ZThn29360_N8S19117C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N8S19117C5D1Ev,_ZThn35304_N8S19117C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S19117C12D0Ev,_ZThn29360_N9S19117C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S19117C12D0Ev,_ZThn35304_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S19117C12D1Ev,_ZThn29360_N9S19117C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S19117C12D1Ev,_ZThn35304_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S19117C12D0Ev,_ZThn31024_N9S19117C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S19117C12D0Ev,_ZThn36968_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S19117C12D1Ev,_ZThn31024_N9S19117C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S19117C12D1Ev,_ZThn36968_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C2D0Ev,_ZTv0_n36_N8S19117C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N8S19117C2D0Ev,_ZThn37136_N8S19117C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C2D1Ev,_ZTv0_n36_N8S19117C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N8S19117C2D1Ev,_ZThn37136_N8S19117C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C2D0Ev,_ZTv0_n12_N8S19117C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S19117C2D0Ev,_ZThn37052_N8S19117C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C2D1Ev,_ZTv0_n12_N8S19117C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S19117C2D1Ev,_ZThn37052_N8S19117C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C2D0Ev,_ZTv0_n28_N8S19117C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N8S19117C2D0Ev,_ZThn35388_N8S19117C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C2D1Ev,_ZTv0_n28_N8S19117C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N8S19117C2D1Ev,_ZThn35388_N8S19117C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C2 = {  "S19117C2", // class name
  bases_S19117C2, 30,
  &(vtc_S19117C2[0]), // expected_vtbl_contents
  &(vtt_S19117C2[0]), // expected_vtt_contents
  ABISELECT(60848,42572), // object size
  NSPAIRA(_ZTI8S19117C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19117C2),123, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19117C2),79, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19117C1  : virtual S19117C2 , virtual S19117C5 , S20507C11 {
  ::S468C20_nt s19117c1f0;
  void *s19117c1f1;
  unsigned int s19117c1f2:1;
  __tsi64 s19117c1f3;
  ::S468C20_nt s19117c1f4;
  virtual void  v1(); // _ZN8S19117C12v1Ev
  ~S19117C1(); // tgen
  S19117C1(); // tgen
};
//SIG(1 S19117C1) C1{ VBC2{ BC3{ BC4{ vd m Fp FD[5] Fp FD} BC5{ VBC6{ m Fi[10] Fp[6]} VBC7{ BC6 Fi FD Fi FC6 FC6 Fi FD[8]} VBC8{ VBC6 VBC9{ BC7 VBC6 v2 FD[2] Fi[2] FD[3]} VBC7 FC10{}} VBC11{ BC6 VBC7 VBC4 BC9 vd FC8 FC9} BC12{ VBC6 VBC4 VBC8 VBC11 FC7 FC6 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC4 FD} VBC12 VBC13{ v3 v4 v5 Fi FC8 Fi Fp FC14{ VBC4 VBC7 VBC9 VBC15{ BC6 VBC7 VBC9 FD} vd FD[9] Fi FC12 Fi FL FC4 FL} Fi FL FD} v6 v7 Fp[5] FD[5] Fi FD} BC16{ VBC6 VBC15 BC14 vd Fp FC11} BC5 BC17{ VBC6 VBC9 BC15 BC14 VBC11 vd Fi Fp Fi:9 Fc FD FC9 FC5 Fc Fs[7] FC10 Fi Fc Fl} BC14 vd v8 v9 Fi[4] Fc FC3 Fp Fl[6] FC17 Fi} VBC5 BC4 v1 FC10 Fp Fi:1 FL FC10}


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

static void Test_S19117C1()
{
  extern Class_Descriptor cd_S19117C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3864,10806)];
    init_test(&cd_S19117C1, buf);
    S19117C1 *dp, &lv = *(dp=new (buf) S19117C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(61808,43220), "sizeof(S19117C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19117C1)");
    /*is_ambiguous_... S19117C3::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C3*)(S19117C2*), ABISELECT(176,108), "S19117C1");
    /*is_ambiguous_... S19117C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C8*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C9*)(S19117C11*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C12 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C16::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C16*)(S19117C2*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C5*)(S19117C2*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*)(S19117C5*)(S19117C2*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C17::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C17*)(S19117C2*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C5*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C12*)(S19117C5*), ABISELECT(49688,34728), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C7 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C5::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C8::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C8*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C11::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C11*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C15*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C14::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C14*)(S19117C16*)(S19117C2*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C5*)(S19117C2*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C15*)(S19117C17*)(S19117C2*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C14::S19117C7 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C14*)(S19117C17*)(S19117C2*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C14*)(S19117C2*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C5*), ABISELECT(49776,34792), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*), ABISELECT(50240,35116), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C7*)(S19117C9*), ABISELECT(50240,35116), "S19117C1");
    check_base_class_offset(lv, (S19117C9*)(S19117C8*), ABISELECT(50224,35112), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C15*), ABISELECT(50224,35112), "S19117C1");
    check_base_class_offset(lv, (S19117C9*)(S19117C14*)(S19117C16*)(S19117C2*), ABISELECT(50224,35112), "S19117C1");
    /*is_ambiguous_... S19117C17::S19117C9 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C17*)(S19117C2*), ABISELECT(50224,35112), "S19117C1");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C15*)(S19117C17*)(S19117C2*), ABISELECT(50224,35112), "S19117C1");
    check_base_class_offset(lv, (S19117C9*)(S19117C14*)(S19117C17*)(S19117C2*), ABISELECT(50224,35112), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S19117C9*)(S19117C14*)(S19117C2*), ABISELECT(50224,35112), "S19117C1");
    check_base_class_offset(lv, (S19117C8*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(50208,35104), "S19117C1");
    check_base_class_offset(lv, (S19117C8*)(S19117C12*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(50208,35104), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C12*), ABISELECT(50208,35104), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C5*)(S19117C2*), ABISELECT(50208,35104), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C12*)(S19117C5*)(S19117C2*), ABISELECT(50208,35104), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C5*), ABISELECT(50208,35104), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C8*)(S19117C12*)(S19117C5*), ABISELECT(50208,35104), "S19117C1");
    /*is_ambiguous_... S19117C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C11*), ABISELECT(51312,35880), "S19117C1");
    check_base_class_offset(lv, (S20507C11*)(S19117C11*), ABISELECT(53136,37160), "S19117C1");
    check_base_class_offset(lv, (S20507C11*)(S19117C12*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(53136,37160), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C12 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C12*), ABISELECT(53136,37160), "S19117C1");
    check_base_class_offset(lv, (S20507C11*)(S19117C14*)(S19117C16*)(S19117C2*), ABISELECT(53136,37160), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C12*)(S19117C5*)(S19117C2*), ABISELECT(53136,37160), "S19117C1");
    check_base_class_offset(lv, (S20507C11*)(S19117C14*)(S19117C17*)(S19117C2*), ABISELECT(53136,37160), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C14*)(S19117C2*), ABISELECT(53136,37160), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19117C12*)(S19117C5*), ABISELECT(53136,37160), "S19117C1");
    check_base_class_offset(lv, (S20507C6*)(S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(50784,35500), "S19117C1");
    check_base_class_offset(lv, (S19117C7*)(S19117C9*)(S19117C11*), ABISELECT(50784,35500), "S19117C1");
    check_base_class_offset(lv, (S19117C9*)(S19117C11*), ABISELECT(50768,35496), "S19117C1");
    check_base_class_offset(lv, (S19117C11*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(50768,35496), "S19117C1");
    check_base_class_offset(lv, (S19117C11*)(S19117C12*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(50768,35496), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C12*), ABISELECT(50768,35496), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C5*)(S19117C2*), ABISELECT(50768,35496), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C12*)(S19117C5*)(S19117C2*), ABISELECT(50768,35496), "S19117C1");
    check_base_class_offset(lv, (S19117C11*)(S19117C17*)(S19117C2*), ABISELECT(50768,35496), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C5*), ABISELECT(50768,35496), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C11*)(S19117C12*)(S19117C5*), ABISELECT(50768,35496), "S19117C1");
    check_base_class_offset(lv, (S19117C12*)(S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(304,192), "S19117C1");
    check_base_class_offset(lv, (S19117C5*)(S19117C3*)(S19117C2*), ABISELECT(304,192), "S19117C1");
    /*is_ambiguous_... S19117C3::S19117C12 */ AMB_check_base_class_offset(lv, (S19117C12*)(S19117C3*)(S19117C2*), ABISELECT(53264,37244), "S19117C1");
    check_base_class_offset(lv, (S19117C13*)(S19117C3*)(S19117C2*), ABISELECT(53904,37688), "S19117C1");
    check_base_class_offset(lv, (S19117C3*)(S19117C2*), ABISELECT(176,108), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C15*), ABISELECT(60920,42604), "S19117C1");
    check_base_class_offset(lv, (S19117C15*)(S19117C16*)(S19117C2*), ABISELECT(60912,42600), "S19117C1");
    check_base_class_offset(lv, (S19117C15*)(S19117C14*)(S19117C16*)(S19117C2*), ABISELECT(60912,42600), "S19117C1");
    check_base_class_offset(lv, (S19117C15*)(S19117C14*)(S19117C17*)(S19117C2*), ABISELECT(60912,42600), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S19117C15*)(S19117C14*)(S19117C2*), ABISELECT(60912,42600), "S19117C1");
    check_base_class_offset(lv, (S19117C14*)(S19117C16*)(S19117C2*), ABISELECT(1248,828), "S19117C1");
    check_base_class_offset(lv, (S19117C16*)(S19117C2*), ABISELECT(1248,828), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C12*)(S19117C5*)(S19117C2*), ABISELECT(8816,6136), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C5*)(S19117C2*), ABISELECT(8816,6136), "S19117C1");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19117C15*)(S19117C17*)(S19117C2*), ABISELECT(9608,6680), "S19117C1");
    /*is_ambiguous_... S19117C17::S19117C15 */ AMB_check_base_class_offset(lv, (S19117C15*)(S19117C17*)(S19117C2*), ABISELECT(9600,6676), "S19117C1");
    check_base_class_offset(lv, (S19117C14*)(S19117C17*)(S19117C2*), ABISELECT(9712,6756), "S19117C1");
    check_base_class_offset(lv, (S19117C17*)(S19117C2*), ABISELECT(9600,6676), "S19117C1");
    /*is_ambiguous_... S19117C2::S19117C14 */ AMB_check_base_class_offset(lv, (S19117C14*)(S19117C2*), ABISELECT(19344,13496), "S19117C1");
    check_base_class_offset(lv, (S19117C2*), ABISELECT(176,108), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C12*)(S19117C5*), ABISELECT(61024,42680), "S19117C1");
    /*is_ambiguous_... S19117C1::S19117C5 */ AMB_check_base_class_offset(lv, (S19117C5*), ABISELECT(61024,42680), "S19117C1");
    /*is_ambiguous_... S19117C1::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*), 0, "S19117C1");
    check_field_offset(lv, s19117c1f0, ABISELECT(128,84), "S19117C1.s19117c1f0");
    check_field_offset(lv, s19117c1f1, ABISELECT(136,88), "S19117C1.s19117c1f1");
    set_bf_and_test(lv, s19117c1f2, ABISELECT(144,92), 0, 1, 1, "S19117C1");
    check_field_offset(lv, s19117c1f3, ABISELECT(152,96), "S19117C1.s19117c1f3");
    check_field_offset(lv, s19117c1f4, ABISELECT(160,104), "S19117C1.s19117c1f4");
    test_class_info(&lv, &cd_S19117C1);
    dp->~S19117C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19117C1(Test_S19117C1, "S19117C1", ABISELECT(61808,43220));

#else // __cplusplus

extern void _ZN8S19117C1C1Ev();
extern void _ZN8S19117C1D1Ev();
Name_Map name_map_S19117C1[] = {
  NSPAIR(_ZN8S19117C1C1Ev),
  NSPAIR(_ZN8S19117C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C8;
extern VTBL_ENTRY _ZTI8S19117C8[];
extern  VTBL_ENTRY _ZTV8S19117C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C7;
extern VTBL_ENTRY _ZTI8S19117C7[];
extern Class_Descriptor cd_S19117C9;
extern VTBL_ENTRY _ZTI8S19117C9[];
extern  VTBL_ENTRY _ZTV8S19117C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C9[];
extern Class_Descriptor cd_S19117C11;
extern VTBL_ENTRY _ZTI9S19117C11[];
extern  VTBL_ENTRY _ZTV9S19117C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C11[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C5;
extern VTBL_ENTRY _ZTI8S19117C5[];
extern  VTBL_ENTRY _ZTV8S19117C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C5[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C13;
extern VTBL_ENTRY _ZTI9S19117C13[];
extern  VTBL_ENTRY _ZTV9S19117C13[];
extern Class_Descriptor cd_S19117C3;
extern VTBL_ENTRY _ZTI8S19117C3[];
extern  VTBL_ENTRY _ZTV8S19117C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C3[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C15;
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
extern Class_Descriptor cd_S19117C14;
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
extern Class_Descriptor cd_S19117C16;
extern VTBL_ENTRY _ZTI9S19117C16[];
extern  VTBL_ENTRY _ZTV9S19117C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C16[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C5;
extern VTBL_ENTRY _ZTI8S19117C5[];
extern  VTBL_ENTRY _ZTV8S19117C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19117C15;
extern VTBL_ENTRY _ZTI9S19117C15[];
extern  VTBL_ENTRY _ZTV9S19117C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C15[];
extern Class_Descriptor cd_S19117C14;
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
extern Class_Descriptor cd_S19117C17;
extern VTBL_ENTRY _ZTI9S19117C17[];
extern  VTBL_ENTRY _ZTV9S19117C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C17[];
extern Class_Descriptor cd_S19117C14;
extern VTBL_ENTRY _ZTI9S19117C14[];
extern  VTBL_ENTRY _ZTV9S19117C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C14[];
extern Class_Descriptor cd_S19117C2;
extern VTBL_ENTRY _ZTI8S19117C2[];
extern  VTBL_ENTRY _ZTV8S19117C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C2[];
extern Class_Descriptor cd_S19117C12;
extern VTBL_ENTRY _ZTI9S19117C12[];
extern  VTBL_ENTRY _ZTV9S19117C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19117C12[];
extern Class_Descriptor cd_S19117C5;
extern VTBL_ENTRY _ZTI8S19117C5[];
extern  VTBL_ENTRY _ZTV8S19117C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C5[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
static Base_Class bases_S19117C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(176,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
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(49688,34728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(49776,34792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(49776,34792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(50240,35116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(50240,35116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(50224,35112), //bcp->offset
    100, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19117C8,    ABISELECT(50208,35104), //bcp->offset
    95, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(51312,35880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(53136,37160), //bcp->offset
    115, //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
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(50784,35500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C7,    ABISELECT(50784,35500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C9,    ABISELECT(50768,35496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19117C11,    ABISELECT(50768,35496), //bcp->offset
    105, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19117C12,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19117C5,    ABISELECT(304,192), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19117C12,    ABISELECT(53264,37244), //bcp->offset
    120, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19117C13,    ABISELECT(53904,37688), //bcp->offset
    131, //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
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19117C3,    ABISELECT(176,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(60920,42604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C15,    ABISELECT(60912,42600), //bcp->offset
    139, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19117C14,    ABISELECT(1248,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19117C16,    ABISELECT(1248,828), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19117C12,    ABISELECT(8816,6136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19117C5,    ABISELECT(8816,6136), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(9608,6680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19117C15,    ABISELECT(9600,6676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19117C14,    ABISELECT(9712,6756), //bcp->offset
    77, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19117C17,    ABISELECT(9600,6676), //bcp->offset
    67, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19117C14,    ABISELECT(19344,13496), //bcp->offset
    86, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19117C2,    ABISELECT(176,108), //bcp->offset
    16, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19117C12,    ABISELECT(61024,42680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19117C5,    ABISELECT(61024,42680), //bcp->offset
    144, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19117C1[];
extern void _ZN8S19117C1D1Ev();
extern void _ZN8S19117C1D0Ev();
extern void _ZN8S19117C12v1Ev();
extern void ABISELECT(_ZTv0_n96_N8S19117C1D1Ev,_ZTv0_n48_N8S19117C1D1Ev)();
extern void ABISELECT(_ZThn176_N8S19117C1D1Ev,_ZThn108_N8S19117C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19117C1D0Ev,_ZTv0_n48_N8S19117C1D0Ev)();
extern void ABISELECT(_ZThn176_N8S19117C1D0Ev,_ZThn108_N8S19117C1D0Ev)() __attribute__((weak));
extern void _ZN8S19117C32v6Ev();
extern void _ZN8S19117C32v7Ev();
extern void _ZN8S19117C22v8Ev();
extern void _ZN8S19117C22v9Ev();
extern void ABISELECT(_ZTvn128_n96_N8S19117C1D1Ev,_ZTvn84_n48_N8S19117C1D1Ev)();
extern void ABISELECT(_ZTvn128_n96_N8S19117C1D0Ev,_ZTvn84_n48_N8S19117C1D0Ev)();
extern void ABISELECT(_ZTvn1072_n96_N8S19117C1D1Ev,_ZTvn720_n48_N8S19117C1D1Ev)();
extern void ABISELECT(_ZTvn1072_n96_N8S19117C1D0Ev,_ZTvn720_n48_N8S19117C1D0Ev)();
extern void ABISELECT(_ZTvn8640_n96_N8S19117C1D1Ev,_ZTvn6028_n48_N8S19117C1D1Ev)();
extern void ABISELECT(_ZTvn8640_n96_N8S19117C1D0Ev,_ZTvn6028_n48_N8S19117C1D0Ev)();
extern void ABISELECT(_ZTvn9424_n96_N8S19117C1D1Ev,_ZTvn6568_n48_N8S19117C1D1Ev)();
extern void ABISELECT(_ZTvn9424_n96_N8S19117C1D0Ev,_ZTvn6568_n48_N8S19117C1D0Ev)();
extern void ABISELECT(_ZTvn9536_n96_N8S19117C1D1Ev,_ZTvn6648_n48_N8S19117C1D1Ev)();
extern void ABISELECT(_ZTvn9536_n96_N8S19117C1D0Ev,_ZTvn6648_n48_N8S19117C1D0Ev)();
extern void ABISELECT(_ZTvn19168_n96_N8S19117C1D1Ev,_ZTvn13388_n48_N8S19117C1D1Ev)();
extern void ABISELECT(_ZTvn19168_n96_N8S19117C1D0Ev,_ZTvn13388_n48_N8S19117C1D0Ev)();
extern void _ZN8S19117C92v2Ev();
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C1D1Ev,_ZTv0_n28_N8S19117C1D1Ev)();
extern void ABISELECT(_ZThn50768_N8S19117C1D1Ev,_ZThn35496_N8S19117C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C1D0Ev,_ZTv0_n28_N8S19117C1D0Ev)();
extern void ABISELECT(_ZThn50768_N8S19117C1D0Ev,_ZThn35496_N8S19117C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C1D1Ev,_ZTv0_n12_N8S19117C1D1Ev)();
extern void ABISELECT(_ZThn53136_N8S19117C1D1Ev,_ZThn37160_N8S19117C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C1D0Ev,_ZTv0_n12_N8S19117C1D0Ev)();
extern void ABISELECT(_ZThn53136_N8S19117C1D0Ev,_ZThn37160_N8S19117C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C1D1Ev,_ZTv0_n36_N8S19117C1D1Ev)();
extern void ABISELECT(_ZThn53264_N8S19117C1D1Ev,_ZThn37244_N8S19117C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C1D0Ev,_ZTv0_n36_N8S19117C1D0Ev)();
extern void ABISELECT(_ZThn53264_N8S19117C1D0Ev,_ZThn37244_N8S19117C1D0Ev)() __attribute__((weak));
extern void _ZN9S19117C132v3Ev();
extern void _ZN9S19117C132v4Ev();
extern void _ZN9S19117C132v5Ev();
extern void ABISELECT(_ZTv0_n72_N8S19117C1D1Ev,_ZTv0_n36_N8S19117C1D1Ev)();
extern void ABISELECT(_ZThn61024_N8S19117C1D1Ev,_ZThn42680_N8S19117C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C1D0Ev,_ZTv0_n36_N8S19117C1D0Ev)();
extern void ABISELECT(_ZThn61024_N8S19117C1D0Ev,_ZThn42680_N8S19117C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19117C1[] = {
  ABISELECT(61024,42680),
  ABISELECT(60912,42600),
  ABISELECT(53904,37688),
  ABISELECT(53264,37244),
  ABISELECT(53136,37160),
  ABISELECT(50768,35496),
  ABISELECT(50224,35112),
  ABISELECT(50208,35104),
  ABISELECT(49776,34792),
  ABISELECT(49688,34728),
  ABISELECT(176,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&_ZN8S19117C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19117C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-108),
  ABISELECT(60736,42492),
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19117C1D1Ev,_ZTv0_n48_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19117C1D0Ev,_ZTv0_n48_N8S19117C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19117C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19117C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19117C22v9Ev,
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-304,-192),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn128_n96_N8S19117C1D1Ev,_ZTvn84_n48_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn128_n96_N8S19117C1D0Ev,_ZTvn84_n48_N8S19117C1D0Ev),
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  ABISELECT(-1248,-828),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n96_N8S19117C1D1Ev,_ZTvn720_n48_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n96_N8S19117C1D0Ev,_ZTvn720_n48_N8S19117C1D0Ev),
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  ABISELECT(-8816,-6136),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8640_n96_N8S19117C1D1Ev,_ZTvn6028_n48_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8640_n96_N8S19117C1D0Ev,_ZTvn6028_n48_N8S19117C1D0Ev),
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  ABISELECT(-9600,-6676),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9424_n96_N8S19117C1D1Ev,_ZTvn6568_n48_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9424_n96_N8S19117C1D0Ev,_ZTvn6568_n48_N8S19117C1D0Ev),
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-9712,-6756),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9536_n96_N8S19117C1D1Ev,_ZTvn6648_n48_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn9536_n96_N8S19117C1D0Ev,_ZTvn6648_n48_N8S19117C1D0Ev),
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  ABISELECT(-19344,-13496),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn19168_n96_N8S19117C1D1Ev,_ZTvn13388_n48_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn19168_n96_N8S19117C1D0Ev,_ZTvn13388_n48_N8S19117C1D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50208,-35104),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50224,-35112),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  ABISELECT(-50768,-35496),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50768,-35496),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C1D1Ev,_ZTv0_n28_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C1D0Ev,_ZTv0_n28_N8S19117C1D0Ev),
  ABISELECT(-53136,-37160),
  ABISELECT(-53136,-37160),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C1D1Ev,_ZTv0_n12_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C1D0Ev,_ZTv0_n12_N8S19117C1D0Ev),
  ABISELECT(-53264,-37244),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53264,-37244),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C1D1Ev,_ZTv0_n36_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C1D0Ev,_ZTv0_n36_N8S19117C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-53904,-37688),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&_ZN9S19117C132v3Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v4Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v5Ev,
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-60912,-42600),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  ABISELECT(-61024,-42680),
  ABISELECT(-10256,-7184),
  ABISELECT(-11248,-7888),
  ABISELECT(-10800,-7568),
  ABISELECT(-10816,-7576),
  ABISELECT(-7888,-5520),
  ABISELECT(-11336,-7952),
  ABISELECT(-61024,-42680),
  (VTBL_ENTRY)&(_ZTI8S19117C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C1D1Ev,_ZTv0_n36_N8S19117C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C1D0Ev,_ZTv0_n36_N8S19117C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19117C1[];
extern void _ZN8S19117C2D1Ev();
extern void _ZN8S19117C2D0Ev();
extern void _ZN8S19117C32v6Ev();
extern void _ZN8S19117C32v7Ev();
extern void _ZN8S19117C22v8Ev();
extern void _ZN8S19117C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C2__8S19117C1[] = {
  ABISELECT(60736,42492),
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&_ZN8S19117C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19117C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19117C22v9Ev,
};
extern void _ZN8S19117C3D1Ev();
extern void _ZN8S19117C3D0Ev();
extern void _ZN8S19117C32v6Ev();
extern void _ZN8S19117C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(53728,37580),
  ABISELECT(53088,37136),
  ABISELECT(52960,37052),
  ABISELECT(50592,35388),
  ABISELECT(50048,35004),
  ABISELECT(50032,34996),
  ABISELECT(49600,34684),
  ABISELECT(49512,34620),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19117C32v7Ev,
};
extern void _ZN8S19117C5D1Ev();
extern void _ZN8S19117C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C58S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C5D0Ev,
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C128S19117C58S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn52832_N9S19117C12D1Ev,_ZThn36968_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn52832_N9S19117C12D0Ev,_ZThn36968_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C128S19117C58S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-52832,-36968),
  ABISELECT(-52832,-36968),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C128S19117C58S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-49904,-34912),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C128S19117C58S19117C38S19117C2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-49920,-34920),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn50464_N9S19117C12D1Ev,_ZThn35304_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn50464_N9S19117C12D0Ev,_ZThn35304_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C128S19117C58S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-50464,-35304),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50464,-35304),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C58S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-49904,-34912),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C58S19117C38S19117C2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-49920,-34920),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn50464_N8S19117C5D1Ev,_ZThn35304_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn50464_N8S19117C5D0Ev,_ZThn35304_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C58S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-50464,-35304),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50464,-35304),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn52832_N8S19117C5D1Ev,_ZThn36968_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn52832_N8S19117C5D0Ev,_ZThn36968_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S19117C58S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-52832,-36968),
  ABISELECT(-52832,-36968),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev),
};
extern void ABISELECT(_ZThn128_N8S19117C3D1Ev,_ZThn84_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn128_N8S19117C3D0Ev,_ZThn84_N8S19117C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19117C5__8S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C3D1Ev,_ZThn84_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C3D0Ev,_ZThn84_N8S19117C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50032,-34996),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C38S19117C2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50048,-35004),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn50592_N8S19117C3D1Ev,_ZThn35388_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn50592_N8S19117C3D0Ev,_ZThn35388_N8S19117C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-50592,-35388),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50592,-35388),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn52960_N8S19117C3D1Ev,_ZThn37052_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn52960_N8S19117C3D0Ev,_ZThn37052_N8S19117C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__8S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-52960,-37052),
  ABISELECT(-52960,-37052),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev)();
extern void ABISELECT(_ZThn53088_N8S19117C3D1Ev,_ZThn37136_N8S19117C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev)();
extern void ABISELECT(_ZThn53088_N8S19117C3D0Ev,_ZThn37136_N8S19117C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C12__A1__8S19117C38S19117C2__8S19117C1[] = {
  ABISELECT(-53088,-37136),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53088,-37136),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev),
};
extern void _ZN9S19117C132v3Ev();
extern void _ZN9S19117C132v4Ev();
extern void _ZN9S19117C132v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C13__8S19117C38S19117C2__8S19117C1[] = {
  0,
  0,
  0,
  ABISELECT(-53728,-37580),
  (VTBL_ENTRY)&(_ZTI8S19117C3[0]),
  (VTBL_ENTRY)&_ZN9S19117C132v3Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v4Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v5Ev,
};
extern void _ZN9S19117C16D1Ev();
extern void _ZN9S19117C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C168S19117C2__8S19117C1[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&_ZN9S19117C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C16D0Ev,
};
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C149S19117C168S19117C2__8S19117C1[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn51888_N9S19117C14D1Ev,_ZThn36332_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn51888_N9S19117C14D0Ev,_ZThn36332_N9S19117C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C149S19117C168S19117C2__8S19117C1[] = {
  ABISELECT(-51888,-36332),
  ABISELECT(-51888,-36332),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C149S19117C168S19117C2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-48976,-34284),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C149S19117C168S19117C2__8S19117C1[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-59664,-41772),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C168S19117C2__8S19117C1[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-59664,-41772),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C168S19117C2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-48976,-34284),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev)();
extern void ABISELECT(_ZThn51888_N9S19117C16D1Ev,_ZThn36332_N9S19117C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev)();
extern void ABISELECT(_ZThn51888_N9S19117C16D0Ev,_ZThn36332_N9S19117C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C168S19117C2__8S19117C1[] = {
  ABISELECT(-51888,-36332),
  ABISELECT(-51888,-36332),
  (VTBL_ENTRY)&(_ZTI9S19117C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev),
};
extern void _ZN8S19117C5D1Ev();
extern void _ZN8S19117C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C58S19117C2__A1__8S19117C1[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C5D0Ev,
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C128S19117C58S19117C2__A2__8S19117C1[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn44320_N9S19117C12D1Ev,_ZThn31024_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn44320_N9S19117C12D0Ev,_ZThn31024_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C128S19117C58S19117C2__A2__8S19117C1[] = {
  ABISELECT(-44320,-31024),
  ABISELECT(-44320,-31024),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C128S19117C58S19117C2__A2__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-41392,-28968),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C128S19117C58S19117C2__A2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-41408,-28976),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZThn41952_N9S19117C12D1Ev,_ZThn29360_N9S19117C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
extern void ABISELECT(_ZThn41952_N9S19117C12D0Ev,_ZThn29360_N9S19117C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C128S19117C58S19117C2__A2__8S19117C1[] = {
  ABISELECT(-41952,-29360),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41952,-29360),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C58S19117C2__A1__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-41392,-28968),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C58S19117C2__A1__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-41408,-28976),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn41952_N8S19117C5D1Ev,_ZThn29360_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn41952_N8S19117C5D0Ev,_ZThn29360_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C58S19117C2__A1__8S19117C1[] = {
  ABISELECT(-41952,-29360),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41952,-29360),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev)();
extern void ABISELECT(_ZThn44320_N8S19117C5D1Ev,_ZThn31024_N8S19117C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev)();
extern void ABISELECT(_ZThn44320_N8S19117C5D0Ev,_ZThn31024_N8S19117C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S19117C58S19117C2__A1__8S19117C1[] = {
  ABISELECT(-44320,-31024),
  ABISELECT(-44320,-31024),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev),
};
extern void _ZN9S19117C17D1Ev();
extern void _ZN9S19117C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C178S19117C2__8S19117C1[] = {
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN9S19117C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C159S19117C178S19117C2__A1__8S19117C1[] = {
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C159S19117C178S19117C2__A1__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40624,-28436),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C149S19117C178S19117C2__A1__8S19117C1[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn43424_N9S19117C14D1Ev,_ZThn30404_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn43424_N9S19117C14D0Ev,_ZThn30404_N9S19117C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C149S19117C178S19117C2__A1__8S19117C1[] = {
  ABISELECT(-43424,-30404),
  ABISELECT(-43424,-30404),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C149S19117C178S19117C2__A1__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40512,-28356),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C149S19117C178S19117C2__A1__8S19117C1[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-51200,-35844),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C178S19117C2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-40624,-28436),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZThn112_N9S19117C17D1Ev,_ZThn80_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S19117C17D0Ev,_ZThn80_N9S19117C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C14__9S19117C178S19117C2__8S19117C1[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S19117C17D1Ev,_ZThn80_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N9S19117C17D0Ev,_ZThn80_N9S19117C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn43536_N9S19117C17D1Ev,_ZThn30484_N9S19117C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev)();
extern void ABISELECT(_ZThn43536_N9S19117C17D0Ev,_ZThn30484_N9S19117C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C178S19117C2__8S19117C1[] = {
  ABISELECT(-43536,-30484),
  ABISELECT(-43536,-30484),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__A1__9S19117C178S19117C2__8S19117C1[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-51312,-35924),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev)();
extern void ABISELECT(_ZThn41168_N9S19117C17D1Ev,_ZThn28820_N9S19117C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev)();
extern void ABISELECT(_ZThn41168_N9S19117C17D0Ev,_ZThn28820_N9S19117C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C178S19117C2__8S19117C1[] = {
  ABISELECT(-41168,-28820),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-41168,-28820),
  (VTBL_ENTRY)&(_ZTI9S19117C17[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev),
};
extern void _ZN9S19117C14D1Ev();
extern void _ZN9S19117C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C148S19117C2__A2__8S19117C1[] = {
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN9S19117C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev)();
extern void ABISELECT(_ZThn33792_N9S19117C14D1Ev,_ZThn23664_N9S19117C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev)();
extern void ABISELECT(_ZThn33792_N9S19117C14D0Ev,_ZThn23664_N9S19117C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C148S19117C2__A2__8S19117C1[] = {
  ABISELECT(-33792,-23664),
  ABISELECT(-33792,-23664),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C148S19117C2__A2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-30880,-21616),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__9S19117C148S19117C2__A2__8S19117C1[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-41568,-29104),
  (VTBL_ENTRY)&(_ZTI9S19117C14[0]),
};
extern void ABISELECT(_ZThn128_N8S19117C2D1Ev,_ZThn84_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S19117C2D0Ev,_ZThn84_N8S19117C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19117C58S19117C3__8S19117C2__8S19117C1[] = {
  ABISELECT(50464,35304),
  ABISELECT(49472,34600),
  ABISELECT(49920,34920),
  ABISELECT(49904,34912),
  ABISELECT(52832,36968),
  ABISELECT(49384,34536),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C2D1Ev,_ZThn84_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19117C2D0Ev,_ZThn84_N8S19117C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C2__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(-50032,-34996),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-50048,-35004),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C2D1Ev,_ZTv0_n28_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn50592_N8S19117C2D1Ev,_ZThn35388_N8S19117C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19117C2D0Ev,_ZTv0_n28_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn50592_N8S19117C2D0Ev,_ZThn35388_N8S19117C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C2__8S19117C1[] = {
  ABISELECT(-50592,-35388),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(-50592,-35388),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C2D1Ev,_ZTv0_n28_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C2D0Ev,_ZTv0_n28_N8S19117C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C2D1Ev,_ZTv0_n12_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn52960_N8S19117C2D1Ev,_ZThn37052_N8S19117C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19117C2D0Ev,_ZTv0_n12_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn52960_N8S19117C2D0Ev,_ZThn37052_N8S19117C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__8S19117C2__8S19117C1[] = {
  ABISELECT(-52960,-37052),
  ABISELECT(-52960,-37052),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C2D1Ev,_ZTv0_n12_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C2D0Ev,_ZTv0_n12_N8S19117C2D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S19117C2D1Ev,_ZTv0_n36_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn53088_N8S19117C2D1Ev,_ZThn37136_N8S19117C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19117C2D0Ev,_ZTv0_n36_N8S19117C2D0Ev)();
extern void ABISELECT(_ZThn53088_N8S19117C2D0Ev,_ZThn37136_N8S19117C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19117C12__A1__8S19117C2__8S19117C1[] = {
  ABISELECT(-53088,-37136),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  ABISELECT(-53088,-37136),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C2D1Ev,_ZTv0_n36_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19117C2D0Ev,_ZTv0_n36_N8S19117C2D0Ev),
};
extern void _ZN9S19117C132v3Ev();
extern void _ZN9S19117C132v4Ev();
extern void _ZN9S19117C132v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C13__8S19117C2__8S19117C1[] = {
  0,
  0,
  0,
  ABISELECT(-53728,-37580),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&_ZN9S19117C132v3Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v4Ev,
  (VTBL_ENTRY)&_ZN9S19117C132v5Ev,
};
extern void ABISELECT(_ZThn1072_N8S19117C2D1Ev,_ZThn720_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn1072_N8S19117C2D0Ev,_ZThn720_N8S19117C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C16__8S19117C2__8S19117C1[] = {
  ABISELECT(59664,41772),
  ABISELECT(48440,33900),
  ABISELECT(48976,34284),
  ABISELECT(48528,33964),
  ABISELECT(51888,36332),
  ABISELECT(-1072,-720),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S19117C2D1Ev,_ZThn720_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S19117C2D0Ev,_ZThn720_N8S19117C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__8S19117C2__8S19117C1[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  ABISELECT(-60736,-42492),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
};
extern void ABISELECT(_ZThn8640_N8S19117C2D1Ev,_ZThn6028_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn8640_N8S19117C2D0Ev,_ZThn6028_N8S19117C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19117C5__A1__8S19117C2__8S19117C1[] = {
  ABISELECT(41952,29360),
  ABISELECT(40960,28656),
  ABISELECT(41408,28976),
  ABISELECT(41392,28968),
  ABISELECT(44320,31024),
  ABISELECT(40872,28592),
  ABISELECT(-8640,-6028),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N8S19117C2D1Ev,_ZThn6028_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8640_N8S19117C2D0Ev,_ZThn6028_N8S19117C2D0Ev),
};
extern void ABISELECT(_ZThn9424_N8S19117C2D1Ev,_ZThn6568_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn9424_N8S19117C2D0Ev,_ZThn6568_N8S19117C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C17__8S19117C2__8S19117C1[] = {
  ABISELECT(41168,28820),
  ABISELECT(51312,35924),
  ABISELECT(43536,30484),
  ABISELECT(40088,28052),
  ABISELECT(40624,28436),
  ABISELECT(40176,28116),
  ABISELECT(-9424,-6568),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N8S19117C2D1Ev,_ZThn6568_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9424_N8S19117C2D0Ev,_ZThn6568_N8S19117C2D0Ev),
};
extern void ABISELECT(_ZThn9536_N8S19117C2D1Ev,_ZThn6648_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn9536_N8S19117C2D0Ev,_ZThn6648_N8S19117C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C149S19117C17__A1__8S19117C2__8S19117C1[] = {
  ABISELECT(51200,35844),
  ABISELECT(39976,27972),
  ABISELECT(40512,28356),
  ABISELECT(40064,28036),
  ABISELECT(43424,30404),
  ABISELECT(-9536,-6648),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N8S19117C2D1Ev,_ZThn6648_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9536_N8S19117C2D0Ev,_ZThn6648_N8S19117C2D0Ev),
};
extern void ABISELECT(_ZThn19168_N8S19117C2D1Ev,_ZThn13388_N8S19117C2D1Ev)();
extern void ABISELECT(_ZThn19168_N8S19117C2D0Ev,_ZThn13388_N8S19117C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C14__A2__8S19117C2__8S19117C1[] = {
  ABISELECT(41568,29104),
  ABISELECT(30344,21232),
  ABISELECT(30880,21616),
  ABISELECT(30432,21296),
  ABISELECT(33792,23664),
  ABISELECT(-19168,-13388),
  (VTBL_ENTRY)&(_ZTI8S19117C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N8S19117C2D1Ev,_ZThn13388_N8S19117C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn19168_N8S19117C2D0Ev,_ZThn13388_N8S19117C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C8__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19117C8[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C1[] = {
  ABISELECT(-536,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void _ZN9S19117C11D1Ev();
extern void _ZN9S19117C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C1[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C11D0Ev,
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C99S19117C11__A1__8S19117C1[] = {
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C9[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19117C11D1Ev,_ZThn1664_N9S19117C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19117C11D0Ev,_ZThn1664_N9S19117C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C11__8S19117C1[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S19117C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev),
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C12__A1__8S19117C1[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3576,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C12__A1__8S19117C1[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C12__A1__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C12__A1__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C12__A1__8S19117C1[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19117C15__8S19117C1[] = {
  ABISELECT(-11224,-7872),
  ABISELECT(-10688,-7488),
  ABISELECT(-11136,-7808),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C15__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(10688,7488),
  (VTBL_ENTRY)&(_ZTI9S19117C15[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C5D1Ev();
extern void _ZN8S19117C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C5__A2__8S19117C1[] = {
  ABISELECT(-10256,-7184),
  ABISELECT(-11248,-7888),
  ABISELECT(-10800,-7568),
  ABISELECT(-10816,-7576),
  ABISELECT(-7888,-5520),
  ABISELECT(-11336,-7952),
  0,
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19117C5D0Ev,
};
extern void _ZN9S19117C12D1Ev();
extern void _ZN9S19117C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19117C128S19117C5__A3__8S19117C1[] = {
  ABISELECT(-10256,-7184),
  ABISELECT(-11248,-7888),
  ABISELECT(-10800,-7568),
  ABISELECT(-10816,-7576),
  ABISELECT(-7888,-5520),
  ABISELECT(-11336,-7952),
  0,
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN9S19117C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19117C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19117C128S19117C5__A3__8S19117C1[] = {
  ABISELECT(7888,5520),
  ABISELECT(7888,5520),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__9S19117C128S19117C5__A3__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(10816,7576),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__9S19117C128S19117C5__A3__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(10800,7568),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C11__9S19117C128S19117C5__A3__8S19117C1[] = {
  ABISELECT(10256,7184),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(10256,7184),
  (VTBL_ENTRY)&(_ZTI9S19117C12[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19117C8__8S19117C5__A2__8S19117C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-520,-376),
  ABISELECT(10816,7576),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
};
extern void _ZN8S19117C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19117C9__8S19117C5__A2__8S19117C1[] = {
  0,
  ABISELECT(-536,-384),
  ABISELECT(10800,7568),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
};
extern void _ZN8S19117C92v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19117C11__8S19117C5__A2__8S19117C1[] = {
  ABISELECT(10256,7184),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1080,-768),
  ABISELECT(10256,7184),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&_ZN8S19117C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S19117C5__A2__8S19117C1[] = {
  ABISELECT(7888,5520),
  ABISELECT(7888,5520),
  (VTBL_ENTRY)&(_ZTI8S19117C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev),
};
static  VTT_ENTRY vtt_S19117C1[] = {
  {&(_ZTV8S19117C1[13]),  13,155},
  {&(_ZTV8S19117C1[32]),  32,155},
  {&(_ZTV8S19117C1[46]),  46,155},
  {&(_ZTV8S19117C1[100]),  100,155},
  {&(_ZTV8S19117C1[104]),  104,155},
  {&(_ZTV8S19117C1[112]),  112,155},
  {&(_ZTV8S19117C1[118]),  118,155},
  {&(_ZTV8S19117C1[129]),  129,155},
  {&(_ZTV8S19117C1[136]),  136,155},
  {&(_ZTV8S19117C1[55]),  55,155},
  {&(_ZTV8S19117C1[144]),  144,155},
  {&(_ZTV8S19117C1[65]),  65,155},
  {&(_ZTV8S19117C1[75]),  75,155},
  {&(_ZTV8S19117C1[84]),  84,155},
  {&(_ZTV8S19117C1[93]),  93,155},
  {&(_ZTV8S19117C1[153]),  153,155},
  {&(_tg__ZTV8S19117C2__8S19117C1[11]),  11,17},
  {&(_tg__ZTV8S19117C38S19117C2__8S19117C1[10]),  10,14},
  {&(_tg__ZTV8S19117C58S19117C38S19117C2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S19117C128S19117C58S19117C38S19117C2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C128S19117C58S19117C38S19117C2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C128S19117C58S19117C38S19117C2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C128S19117C58S19117C38S19117C2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C128S19117C58S19117C38S19117C2__8S19117C1[7]),  7,10},
  {&(_tg__ZTV8S19117C8__8S19117C58S19117C38S19117C2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C58S19117C38S19117C2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C58S19117C38S19117C2__8S19117C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S19117C58S19117C38S19117C2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C5__8S19117C38S19117C2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV8S19117C8__8S19117C38S19117C2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C38S19117C2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C38S19117C2__8S19117C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__8S19117C38S19117C2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV9S19117C12__A1__8S19117C38S19117C2__8S19117C1[9]),  9,11},
  {&(_tg__ZTV9S19117C13__8S19117C38S19117C2__8S19117C1[5]),  5,8},
  {&(_tg__ZTV9S19117C168S19117C2__8S19117C1[7]),  7,9},
  {&(_tg__ZTV9S19117C149S19117C168S19117C2__8S19117C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C149S19117C168S19117C2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C9__9S19117C149S19117C168S19117C2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C15__9S19117C149S19117C168S19117C2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV9S19117C15__9S19117C168S19117C2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C168S19117C2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__9S19117C168S19117C2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C58S19117C2__A1__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S19117C128S19117C58S19117C2__A2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C128S19117C58S19117C2__A2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C128S19117C58S19117C2__A2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C128S19117C58S19117C2__A2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C128S19117C58S19117C2__A2__8S19117C1[7]),  7,10},
  {&(_tg__ZTV8S19117C8__8S19117C58S19117C2__A1__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C58S19117C2__A1__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C58S19117C2__A1__8S19117C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S19117C58S19117C2__A1__8S19117C1[3]),  3,5},
  {&(_tg__ZTV9S19117C178S19117C2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S19117C159S19117C178S19117C2__A1__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C159S19117C178S19117C2__A1__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C149S19117C178S19117C2__A1__8S19117C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C149S19117C178S19117C2__A1__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C9__9S19117C149S19117C178S19117C2__A1__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C15__9S19117C149S19117C178S19117C2__A1__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C178S19117C2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C14__9S19117C178S19117C2__8S19117C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C178S19117C2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV9S19117C15__A1__9S19117C178S19117C2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV9S19117C11__9S19117C178S19117C2__8S19117C1[7]),  7,10},
  {&(_tg__ZTV9S19117C148S19117C2__A2__8S19117C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S19117C148S19117C2__A2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C9__9S19117C148S19117C2__A2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C15__9S19117C148S19117C2__A2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C58S19117C3__8S19117C2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV8S19117C8__8S19117C2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C2__8S19117C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__8S19117C2__8S19117C1[3]),  3,5},
  {&(_tg__ZTV9S19117C12__A1__8S19117C2__8S19117C1[9]),  9,11},
  {&(_tg__ZTV9S19117C13__8S19117C2__8S19117C1[5]),  5,8},
  {&(_tg__ZTV9S19117C16__8S19117C2__8S19117C1[7]),  7,9},
  {&(_tg__ZTV9S19117C15__8S19117C2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C5__A1__8S19117C2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S19117C17__8S19117C2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S19117C149S19117C17__A1__8S19117C2__8S19117C1[7]),  7,9},
  {&(_tg__ZTV9S19117C14__A2__8S19117C2__8S19117C1[7]),  7,9},
  {&(_tg__ZTV8S19117C8__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C8__8S19117C1[4]),  4,5},
  {&(_tg__ZTV8S19117C9__8S19117C1[3]),  3,4},
  {&(_tg__ZTV9S19117C11__8S19117C1[5]),  5,8},
  {&(_tg__ZTV8S19117C99S19117C11__A1__8S19117C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19117C11__8S19117C1[3]),  3,5},
  {&(_tg__ZTV9S19117C12__A1__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C12__A1__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C12__A1__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C12__A1__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C12__A1__8S19117C1[7]),  7,10},
  {&(_tg__ZTV9S19117C15__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C15__8S19117C1[4]),  4,5},
  {&(_tg__ZTV8S19117C5__A2__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S19117C128S19117C5__A3__8S19117C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19117C128S19117C5__A3__8S19117C1[3]),  3,5},
  {&(_tg__ZTV8S19117C8__9S19117C128S19117C5__A3__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__9S19117C128S19117C5__A3__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__9S19117C128S19117C5__A3__8S19117C1[7]),  7,10},
  {&(_tg__ZTV8S19117C8__8S19117C5__A2__8S19117C1[5]),  5,5},
  {&(_tg__ZTV8S19117C9__8S19117C5__A2__8S19117C1[4]),  4,5},
  {&(_tg__ZTV9S19117C11__8S19117C5__A2__8S19117C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S19117C5__A2__8S19117C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19117C1[];
extern  VTBL_ENTRY _ZTV8S19117C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19117C1[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D0Ev,_ZTv0_n12_N9S19117C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19117C11D0Ev,_ZThn1664_N9S19117C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C11D1Ev,_ZTv0_n12_N9S19117C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19117C11D1Ev,_ZThn1664_N9S19117C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C2D0Ev,_ZTv0_n36_N8S19117C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N8S19117C2D0Ev,_ZThn37136_N8S19117C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C2D1Ev,_ZTv0_n36_N8S19117C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N8S19117C2D1Ev,_ZThn37136_N8S19117C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C2D0Ev,_ZTv0_n12_N8S19117C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S19117C2D0Ev,_ZThn37052_N8S19117C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C2D1Ev,_ZTv0_n12_N8S19117C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S19117C2D1Ev,_ZThn37052_N8S19117C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C2D0Ev,_ZTv0_n28_N8S19117C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N8S19117C2D0Ev,_ZThn35388_N8S19117C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C2D1Ev,_ZTv0_n28_N8S19117C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N8S19117C2D1Ev,_ZThn35388_N8S19117C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C17D0Ev,_ZTv0_n28_N9S19117C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41168_N9S19117C17D0Ev,_ZThn28820_N9S19117C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C17D1Ev,_ZTv0_n28_N9S19117C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41168_N9S19117C17D1Ev,_ZThn28820_N9S19117C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C17D0Ev,_ZTv0_n12_N9S19117C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43536_N9S19117C17D0Ev,_ZThn30484_N9S19117C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C17D1Ev,_ZTv0_n12_N9S19117C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43536_N9S19117C17D1Ev,_ZThn30484_N9S19117C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C16D0Ev,_ZTv0_n12_N9S19117C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S19117C16D0Ev,_ZThn36332_N9S19117C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C16D1Ev,_ZTv0_n12_N9S19117C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S19117C16D1Ev,_ZThn36332_N9S19117C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D0Ev,_ZTv0_n12_N9S19117C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S19117C14D0Ev,_ZThn23664_N9S19117C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn43424_N9S19117C14D0Ev,_ZThn30404_N9S19117C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S19117C14D0Ev,_ZThn36332_N9S19117C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C14D1Ev,_ZTv0_n12_N9S19117C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S19117C14D1Ev,_ZThn23664_N9S19117C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn43424_N9S19117C14D1Ev,_ZThn30404_N9S19117C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51888_N9S19117C14D1Ev,_ZThn36332_N9S19117C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C3D0Ev,_ZTv0_n36_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N8S19117C3D0Ev,_ZThn37136_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C3D1Ev,_ZTv0_n36_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53088_N8S19117C3D1Ev,_ZThn37136_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C3D0Ev,_ZTv0_n12_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S19117C3D0Ev,_ZThn37052_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C3D1Ev,_ZTv0_n12_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52960_N8S19117C3D1Ev,_ZThn37052_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C3D0Ev,_ZTv0_n28_N8S19117C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N8S19117C3D0Ev,_ZThn35388_N8S19117C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C3D1Ev,_ZTv0_n28_N8S19117C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50592_N8S19117C3D1Ev,_ZThn35388_N8S19117C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C5D0Ev,_ZTv0_n12_N8S19117C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N8S19117C5D0Ev,_ZThn31024_N8S19117C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N8S19117C5D0Ev,_ZThn36968_N8S19117C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C5D1Ev,_ZTv0_n12_N8S19117C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N8S19117C5D1Ev,_ZThn31024_N8S19117C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N8S19117C5D1Ev,_ZThn36968_N8S19117C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C5D0Ev,_ZTv0_n28_N8S19117C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N8S19117C5D0Ev,_ZThn29360_N8S19117C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N8S19117C5D0Ev,_ZThn35304_N8S19117C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C5D1Ev,_ZTv0_n28_N8S19117C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N8S19117C5D1Ev,_ZThn29360_N8S19117C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N8S19117C5D1Ev,_ZThn35304_N8S19117C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D0Ev,_ZTv0_n28_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S19117C12D0Ev,_ZThn29360_N9S19117C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S19117C12D0Ev,_ZThn35304_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19117C12D1Ev,_ZTv0_n28_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41952_N9S19117C12D1Ev,_ZThn29360_N9S19117C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50464_N9S19117C12D1Ev,_ZThn35304_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D0Ev,_ZTv0_n12_N9S19117C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S19117C12D0Ev,_ZThn31024_N9S19117C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S19117C12D0Ev,_ZThn36968_N9S19117C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19117C12D1Ev,_ZTv0_n12_N9S19117C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44320_N9S19117C12D1Ev,_ZThn31024_N9S19117C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn52832_N9S19117C12D1Ev,_ZThn36968_N9S19117C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C1D0Ev,_ZTv0_n36_N8S19117C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn61024_N8S19117C1D0Ev,_ZThn42680_N8S19117C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn53264_N8S19117C1D0Ev,_ZThn37244_N8S19117C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19117C1D1Ev,_ZTv0_n36_N8S19117C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn61024_N8S19117C1D1Ev,_ZThn42680_N8S19117C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn53264_N8S19117C1D1Ev,_ZThn37244_N8S19117C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C1D0Ev,_ZTv0_n12_N8S19117C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53136_N8S19117C1D0Ev,_ZThn37160_N8S19117C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19117C1D1Ev,_ZTv0_n12_N8S19117C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53136_N8S19117C1D1Ev,_ZThn37160_N8S19117C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C1D0Ev,_ZTv0_n28_N8S19117C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50768_N8S19117C1D0Ev,_ZThn35496_N8S19117C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19117C1D1Ev,_ZTv0_n28_N8S19117C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50768_N8S19117C1D1Ev,_ZThn35496_N8S19117C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19117C1D0Ev,_ZTv0_n48_N8S19117C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19117C1D0Ev,_ZThn108_N8S19117C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19117C1D1Ev,_ZTv0_n48_N8S19117C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19117C1D1Ev,_ZThn108_N8S19117C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19117C1 = {  "S19117C1", // class name
  bases_S19117C1, 34,
  &(vtc_S19117C1[0]), // expected_vtbl_contents
  &(vtt_S19117C1[0]), // expected_vtt_contents
  ABISELECT(61808,43220), // object size
  NSPAIRA(_ZTI8S19117C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19117C1),155, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19117C1),105, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21199C6  : S20507C6 {
  int s21199c6f0;
  long double s21199c6f1;
  int s21199c6f2;
  ::S20507C6 s21199c6f3;
  ::S20507C6 s21199c6f4;
  int s21199c6f5;
  long double s21199c6f6[8];
};
//SIG(-1 S21199C6) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S21199C6()
{
  extern Class_Descriptor cd_S21199C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S21199C6, buf);
    S21199C6 &lv = *(new (buf) S21199C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S21199C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C6)");
    check_base_class_offset(lv, (S20507C6*), 0, "S21199C6");
    check_field_offset(lv, s21199c6f0, ABISELECT(88,64), "S21199C6.s21199c6f0");
    check_field_offset(lv, s21199c6f1, ABISELECT(96,68), "S21199C6.s21199c6f1");
    check_field_offset(lv, s21199c6f2, ABISELECT(112,80), "S21199C6.s21199c6f2");
    check_field_offset(lv, s21199c6f3, ABISELECT(120,84), "S21199C6.s21199c6f3");
    check_field_offset(lv, s21199c6f4, ABISELECT(208,148), "S21199C6.s21199c6f4");
    check_field_offset(lv, s21199c6f5, ABISELECT(296,212), "S21199C6.s21199c6f5");
    check_field_offset(lv, s21199c6f6, ABISELECT(304,216), "S21199C6.s21199c6f6");
    test_class_info(&lv, &cd_S21199C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C6(Test_S21199C6, "S21199C6", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S21199C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21199C6[];
Class_Descriptor cd_S21199C6 = {  "S21199C6", // class name
  bases_S21199C6, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI8S21199C6),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  S21199C5  : S21199C6 , virtual S20507C6 {
  long double s21199c5f0[2];
  int s21199c5f1[2];
  long double s21199c5f2[3];
  virtual void  v1(); // _ZN8S21199C52v1Ev
  ~S21199C5(); // tgen
  S21199C5(); // tgen
};
//SIG(-1 S21199C5) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S21199C5()
{
  extern Class_Descriptor cd_S21199C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S21199C5, buf);
    S21199C5 *dp, &lv = *(dp=new (buf) S21199C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S21199C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C5)");
    check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(16,4), "S21199C5");
    check_base_class_offset(lv, (S21199C6*), ABISELECT(16,4), "S21199C5");
    /*is_ambiguous_... S21199C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S21199C5");
    check_field_offset(lv, s21199c5f0, ABISELECT(448,316), "S21199C5.s21199c5f0");
    check_field_offset(lv, s21199c5f1, ABISELECT(480,340), "S21199C5.s21199c5f1");
    check_field_offset(lv, s21199c5f2, ABISELECT(496,348), "S21199C5.s21199c5f2");
    test_class_info(&lv, &cd_S21199C5);
    dp->~S21199C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C5(Test_S21199C5, "S21199C5", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN8S21199C5C1Ev();
extern void _ZN8S21199C5D1Ev();
Name_Map name_map_S21199C5[] = {
  NSPAIR(_ZN8S21199C5C1Ev),
  NSPAIR(_ZN8S21199C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S21199C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21199C6,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21199C5[];
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY vtc_S21199C5[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern VTBL_ENTRY _ZTV8S21199C5[];
static  VTT_ENTRY vtt_S21199C5[] = {
  {&(_ZTV8S21199C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
Class_Descriptor cd_S21199C5 = {  "S21199C5", // class name
  bases_S21199C5, 3,
  &(vtc_S21199C5[0]), // expected_vtbl_contents
  &(vtt_S21199C5[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI8S21199C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21199C5),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21199C5),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  S21199C3  : virtual S20507C6 , virtual S21199C5 , virtual S21199C6 {
  ::S468C20_nt s21199c3f0;
  ~S21199C3(); // tgen
  S21199C3(); // tgen
};
//SIG(-1 S21199C3) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S21199C3()
{
  extern Class_Descriptor cd_S21199C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S21199C3, buf);
    S21199C3 *dp, &lv = *(dp=new (buf) S21199C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S21199C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C3)");
    /*is_ambiguous_... S21199C3::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S21199C3");
    /*is_ambiguous_... S21199C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*), ABISELECT(16,8), "S21199C3");
    check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*), ABISELECT(128,76), "S21199C3");
    check_base_class_offset(lv, (S21199C6*)(S21199C5*), ABISELECT(128,76), "S21199C3");
    check_base_class_offset(lv, (S21199C5*), ABISELECT(112,72), "S21199C3");
    /*is_ambiguous_... S21199C3::S21199C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(656,456), "S21199C3");
    /*is_ambiguous_... S21199C3::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*), ABISELECT(656,456), "S21199C3");
    check_field_offset(lv, s21199c3f0, ABISELECT(8,4), "S21199C3.s21199c3f0");
    test_class_info(&lv, &cd_S21199C3);
    dp->~S21199C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C3(Test_S21199C3, "S21199C3", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S21199C3C1Ev();
extern void _ZN8S21199C3D1Ev();
Name_Map name_map_S21199C3[] = {
  NSPAIR(_ZN8S21199C3C1Ev),
  NSPAIR(_ZN8S21199C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
static Base_Class bases_S21199C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S21199C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S21199C5,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S21199C3[];
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY vtc_S21199C3[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern VTBL_ENTRY _ZTV8S21199C3[];
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C3[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
static  VTT_ENTRY vtt_S21199C3[] = {
  {&(_ZTV8S21199C3[5]),  5,10},
  {&(_ZTV8S21199C3[9]),  9,10},
  {&(_tg__ZTV8S21199C5__8S21199C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S21199C3[];
extern  VTBL_ENTRY _ZTV8S21199C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C3[];
Class_Descriptor cd_S21199C3 = {  "S21199C3", // class name
  bases_S21199C3, 6,
  &(vtc_S21199C3[0]), // expected_vtbl_contents
  &(vtt_S21199C3[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S21199C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21199C3),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21199C3),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  S21199C10  : S20507C6 , virtual S21199C6 , virtual S20507C11 , S21199C5 {
  ::S21199C3 s21199c10f0;
  ::S21199C5 s21199c10f1;
  virtual  ~S21199C10(); // _ZN9S21199C10D2Ev
  S21199C10(); // tgen
};
//SIG(-1 S21199C10) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ vd m Fp FD[5] Fp FD} BC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} vd FC6{ VBC2 VBC5 VBC3 FC7{}} FC5}


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

static void Test_S21199C10()
{
  extern Class_Descriptor cd_S21199C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(190,532)];
    init_test(&cd_S21199C10, buf);
    S21199C10 *dp, &lv = *(dp=new (buf) S21199C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3024,2124), "sizeof(S21199C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C10)");
    /*is_ambiguous_... S21199C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S21199C10");
    /*is_ambiguous_... S21199C10::S21199C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(2368,1664), "S21199C10");
    /*is_ambiguous_... S21199C10::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*), ABISELECT(2368,1664), "S21199C10");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2800,1976), "S21199C10");
    check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*), ABISELECT(16,4), "S21199C10");
    check_base_class_offset(lv, (S21199C6*)(S21199C5*), ABISELECT(16,4), "S21199C10");
    /*is_ambiguous_... S21199C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*), ABISELECT(2928,2060), "S21199C10");
    check_base_class_offset(lv, (S21199C5*), 0, "S21199C10");
    check_field_offset(lv, s21199c10f0, ABISELECT(640,448), "S21199C10.s21199c10f0");
    check_field_offset(lv, s21199c10f1, ABISELECT(1728,1216), "S21199C10.s21199c10f1");
    test_class_info(&lv, &cd_S21199C10);
    dp->~S21199C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C10(Test_S21199C10, "S21199C10", ABISELECT(3024,2124));

#else // __cplusplus

extern void _ZN9S21199C10C1Ev();
extern void _ZN9S21199C10D2Ev();
Name_Map name_map_S21199C10[] = {
  NSPAIR(_ZN9S21199C10C1Ev),
  NSPAIR(_ZN9S21199C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
static Base_Class bases_S21199C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21199C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C11,    ABISELECT(2800,1976), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    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_S21199C6,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(2928,2060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    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 _ZTI9S21199C10[];
extern void _ZN8S21199C52v1Ev();
extern void _ZN9S21199C10D1Ev();
extern void _ZN9S21199C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev)();
extern void ABISELECT(_ZThn2800_N9S21199C10D1Ev,_ZThn1976_N9S21199C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev)();
extern void ABISELECT(_ZThn2800_N9S21199C10D0Ev,_ZThn1976_N9S21199C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21199C10[] = {
  ABISELECT(2800,1976),
  ABISELECT(2368,1664),
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D0Ev,
  ABISELECT(-2800,-1976),
  ABISELECT(-2800,-1976),
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S21199C10[];
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C10[] = {
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
static  VTT_ENTRY vtt_S21199C10[] = {
  {&(_ZTV9S21199C10[5]),  5,13},
  {&(_tg__ZTV8S21199C5__9S21199C10[3]),  3,4},
  {&(_ZTV9S21199C10[11]),  11,13},
};
extern VTBL_ENTRY _ZTI9S21199C10[];
extern  VTBL_ENTRY _ZTV9S21199C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C10[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S21199C10D0Ev,_ZThn1976_N9S21199C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S21199C10D1Ev,_ZThn1976_N9S21199C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21199C10 = {  "S21199C10", // class name
  bases_S21199C10, 8,
  &(vtc_S21199C10[0]), // expected_vtbl_contents
  &(vtt_S21199C10[0]), // expected_vtt_contents
  ABISELECT(3024,2124), // object size
  NSPAIRA(_ZTI9S21199C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21199C10),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21199C10),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21199C11  : virtual S20507C6 , virtual S20507C11 , virtual S21199C3 , virtual S21199C10 {
  ::S21199C6 s21199c11f0;
  ::S20507C6 s21199c11f1;
  short s21199c11f2;
  void *s21199c11f3[2];
  __tsi64 s21199c11f4;
  long double s21199c11f5[2];
  __tsi64 s21199c11f6;
  int s21199c11f7[2];
  char s21199c11f8;
  ~S21199C11(); // tgen
  S21199C11(); // tgen
};
//SIG(-1 S21199C11) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ vd m Fp FD[5] Fp FD} VBC4{ VBC2 VBC5{ BC6{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC6 FC7{}} VBC8{ BC2 VBC6 VBC3 BC5 vd FC4 FC5} FC6 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc}


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

static void Test_S21199C11()
{
  extern Class_Descriptor cd_S21199C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,741)];
    init_test(&cd_S21199C11, buf);
    S21199C11 *dp, &lv = *(dp=new (buf) S21199C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,2960), "sizeof(S21199C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C11)");
    /*is_ambiguous_... S21199C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(632,444), "S21199C11");
    /*is_ambiguous_... S21199C3::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C3*), ABISELECT(632,444), "S21199C11");
    /*is_ambiguous_... S21199C11::S21199C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*), ABISELECT(632,444), "S21199C11");
    /*is_ambiguous_... S21199C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*)(S21199C10*), ABISELECT(632,444), "S21199C11");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(720,508), "S21199C11");
    check_base_class_offset(lv, (S20507C11*)(S21199C10*), ABISELECT(720,508), "S21199C11");
    /*is_ambiguous_... S21199C11::S21199C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*), ABISELECT(880,604), "S21199C11");
    /*is_ambiguous_... S21199C11::S21199C5 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C5*), ABISELECT(880,604), "S21199C11");
    check_base_class_offset(lv, (S21199C5*)(S21199C3*), ABISELECT(864,600), "S21199C11");
    /*is_ambiguous_... S21199C11::S21199C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(1408,984), "S21199C11");
    /*is_ambiguous_... S21199C3::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C3*), ABISELECT(1408,984), "S21199C11");
    /*is_ambiguous_... S21199C10::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C10*), ABISELECT(1408,984), "S21199C11");
    check_base_class_offset(lv, (S21199C3*), ABISELECT(848,592), "S21199C11");
    /*is_ambiguous_... S21199C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C10*), ABISELECT(2384,1680), "S21199C11");
    check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(1856,1300), "S21199C11");
    check_base_class_offset(lv, (S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(1856,1300), "S21199C11");
    check_base_class_offset(lv, (S21199C5*)(S21199C10*), ABISELECT(1840,1296), "S21199C11");
    check_base_class_offset(lv, (S21199C10*), ABISELECT(1840,1296), "S21199C11");
    check_field_offset(lv, s21199c11f0, ABISELECT(16,4), "S21199C11.s21199c11f0");
    check_field_offset(lv, s21199c11f1, ABISELECT(448,316), "S21199C11.s21199c11f1");
    check_field_offset(lv, s21199c11f2, ABISELECT(536,380), "S21199C11.s21199c11f2");
    check_field_offset(lv, s21199c11f3, ABISELECT(544,384), "S21199C11.s21199c11f3");
    check_field_offset(lv, s21199c11f4, ABISELECT(560,392), "S21199C11.s21199c11f4");
    check_field_offset(lv, s21199c11f5, ABISELECT(576,400), "S21199C11.s21199c11f5");
    check_field_offset(lv, s21199c11f6, ABISELECT(608,424), "S21199C11.s21199c11f6");
    check_field_offset(lv, s21199c11f7, ABISELECT(616,432), "S21199C11.s21199c11f7");
    check_field_offset(lv, s21199c11f8, ABISELECT(624,440), "S21199C11.s21199c11f8");
    test_class_info(&lv, &cd_S21199C11);
    dp->~S21199C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C11(Test_S21199C11, "S21199C11", ABISELECT(4208,2960));

#else // __cplusplus

extern void _ZN9S21199C11C1Ev();
extern void _ZN9S21199C11D1Ev();
Name_Map name_map_S21199C11[] = {
  NSPAIR(_ZN9S21199C11C1Ev),
  NSPAIR(_ZN9S21199C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C3;
extern VTBL_ENTRY _ZTI8S21199C3[];
extern  VTBL_ENTRY _ZTV8S21199C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C3[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S21199C10;
extern VTBL_ENTRY _ZTI9S21199C10[];
extern  VTBL_ENTRY _ZTV9S21199C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C10[];
static Base_Class bases_S21199C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(632,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
  1, 1},
  {&cd_S20507C11,    ABISELECT(720,508), //bcp->offset
    10, //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_S20507C6,    ABISELECT(880,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
    3, //immediately_derived
  0, 0},
  {&cd_S21199C6,    ABISELECT(880,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
    4, //immediately_derived
  0, 0},
  {&cd_S21199C5,    ABISELECT(864,600), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C3,    ABISELECT(848,592), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2384,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(1840,1296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21199C10,    ABISELECT(1840,1296), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21199C11[];
extern void _ZN9S21199C11D1Ev();
extern void _ZN9S21199C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev)();
extern void ABISELECT(_ZThn720_N9S21199C11D1Ev,_ZThn508_N9S21199C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev)();
extern void ABISELECT(_ZThn720_N9S21199C11D0Ev,_ZThn508_N9S21199C11D0Ev)() __attribute__((weak));
extern void _ZN8S21199C52v1Ev();
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev)();
extern void ABISELECT(_ZThn1840_N9S21199C11D1Ev,_ZThn1296_N9S21199C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev)();
extern void ABISELECT(_ZThn1840_N9S21199C11D0Ev,_ZThn1296_N9S21199C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21199C11[] = {
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN9S21199C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C11D0Ev,
  ABISELECT(-720,-508),
  ABISELECT(-720,-508),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev),
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(-848,-592),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  0,
  ABISELECT(-232,-156),
  ABISELECT(-864,-600),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  ABISELECT(-1840,-1296),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(-1840,-1296),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21199C11[];
static  VTBL_ENTRY _tg__ZTV8S21199C3__9S21199C11[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C3__9S21199C11[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C11[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void _ZN9S21199C10D1Ev();
extern void _ZN9S21199C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C10__9S21199C11[] = {
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D0Ev,
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C59S21199C10__A1__9S21199C11[] = {
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C10__9S21199C11[] = {
  ABISELECT(1120,788),
  ABISELECT(1120,788),
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev),
};
static  VTT_ENTRY vtt_S21199C11[] = {
  {&(_ZTV9S21199C11[8]),  8,35},
  {&(_ZTV9S21199C11[13]),  13,35},
  {&(_ZTV9S21199C11[20]),  20,35},
  {&(_ZTV9S21199C11[24]),  24,35},
  {&(_ZTV9S21199C11[32]),  32,35},
  {&(_tg__ZTV8S21199C3__9S21199C11[5]),  5,5},
  {&(_tg__ZTV8S21199C5__8S21199C3__9S21199C11[4]),  4,5},
  {&(_tg__ZTV8S21199C5__9S21199C11[3]),  3,4},
  {&(_tg__ZTV9S21199C10__9S21199C11[5]),  5,8},
  {&(_tg__ZTV8S21199C59S21199C10__A1__9S21199C11[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S21199C10__9S21199C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21199C11[];
extern  VTBL_ENTRY _ZTV9S21199C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C11[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N9S21199C11D0Ev,_ZThn1296_N9S21199C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N9S21199C11D1Ev,_ZThn1296_N9S21199C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S21199C11D0Ev,_ZThn508_N9S21199C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S21199C11D1Ev,_ZThn508_N9S21199C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21199C11 = {  "S21199C11", // class name
  bases_S21199C11, 13,
  &(vtc_S21199C11[0]), // expected_vtbl_contents
  &(vtt_S21199C11[0]), // expected_vtt_contents
  ABISELECT(4208,2960), // object size
  NSPAIRA(_ZTI9S21199C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21199C11),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21199C11),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21199C9  : virtual S20507C6 , virtual S21199C6 , virtual S21199C3 , virtual S21199C10 , S21199C11 {
  ::S20507C11 s21199c9f0;
  long double s21199c9f1;
  virtual  ~S21199C9(); // _ZN8S21199C9D2Ev
  S21199C9(); // tgen
};
//SIG(-1 S21199C9) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ VBC2 VBC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} VBC3 FC6{}} VBC7{ BC2 VBC3 VBC8{ vd m Fp FD[5] Fp FD} BC5 vd FC4 FC5} BC9{ VBC2 VBC8 VBC4 VBC7 FC3 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC8 FD}


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

static void Test_S21199C9()
{
  extern Class_Descriptor cd_S21199C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(274,765)];
    init_test(&cd_S21199C9, buf);
    S21199C9 *dp, &lv = *(dp=new (buf) S21199C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4368,3056), "sizeof(S21199C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C9)");
    /*is_ambiguous_... S21199C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(784,540), "S21199C9");
    /*is_ambiguous_... S21199C3::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C3*), ABISELECT(784,540), "S21199C9");
    /*is_ambiguous_... S21199C9::S21199C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*), ABISELECT(784,540), "S21199C9");
    /*is_ambiguous_... S21199C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*)(S21199C10*), ABISELECT(784,540), "S21199C9");
    /*is_ambiguous_... S21199C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C11*), ABISELECT(784,540), "S21199C9");
    /*is_ambiguous_... S21199C9::S21199C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(880,604), "S21199C9");
    /*is_ambiguous_... S21199C9::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*), ABISELECT(880,604), "S21199C9");
    /*is_ambiguous_... S21199C3::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C3*), ABISELECT(880,604), "S21199C9");
    /*is_ambiguous_... S21199C10::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C10*), ABISELECT(880,604), "S21199C9");
    /*is_ambiguous_... S21199C9::S21199C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*), ABISELECT(1344,928), "S21199C9");
    /*is_ambiguous_... S21199C9::S21199C5 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C5*), ABISELECT(1344,928), "S21199C9");
    check_base_class_offset(lv, (S21199C5*)(S21199C3*), ABISELECT(1328,924), "S21199C9");
    check_base_class_offset(lv, (S21199C3*), ABISELECT(1312,916), "S21199C9");
    check_base_class_offset(lv, (S21199C3*)(S21199C11*), ABISELECT(1312,916), "S21199C9");
    /*is_ambiguous_... S21199C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C10*), ABISELECT(2416,1692), "S21199C9");
    check_base_class_offset(lv, (S20507C11*)(S21199C10*), ABISELECT(4240,2972), "S21199C9");
    check_base_class_offset(lv, (S20507C11*)(S21199C11*), ABISELECT(4240,2972), "S21199C9");
    check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(1888,1312), "S21199C9");
    check_base_class_offset(lv, (S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(1888,1312), "S21199C9");
    check_base_class_offset(lv, (S21199C5*)(S21199C10*), ABISELECT(1872,1308), "S21199C9");
    check_base_class_offset(lv, (S21199C10*), ABISELECT(1872,1308), "S21199C9");
    check_base_class_offset(lv, (S21199C10*)(S21199C11*), ABISELECT(1872,1308), "S21199C9");
    check_base_class_offset(lv, (S21199C11*), 0, "S21199C9");
    check_field_offset(lv, s21199c9f0, ABISELECT(640,444), "S21199C9.s21199c9f0");
    check_field_offset(lv, s21199c9f1, ABISELECT(768,528), "S21199C9.s21199c9f1");
    test_class_info(&lv, &cd_S21199C9);
    dp->~S21199C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C9(Test_S21199C9, "S21199C9", ABISELECT(4368,3056));

#else // __cplusplus

extern void _ZN8S21199C9C1Ev();
extern void _ZN8S21199C9D2Ev();
Name_Map name_map_S21199C9[] = {
  NSPAIR(_ZN8S21199C9C1Ev),
  NSPAIR(_ZN8S21199C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S21199C3;
extern VTBL_ENTRY _ZTI8S21199C3[];
extern  VTBL_ENTRY _ZTV8S21199C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C3[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S21199C10;
extern VTBL_ENTRY _ZTI9S21199C10[];
extern  VTBL_ENTRY _ZTV9S21199C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C10[];
extern Class_Descriptor cd_S21199C11;
extern VTBL_ENTRY _ZTI9S21199C11[];
extern  VTBL_ENTRY _ZTV9S21199C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C11[];
static Base_Class bases_S21199C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(784,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(880,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
    2, //immediately_derived
  0, 0},
  {&cd_S21199C6,    ABISELECT(880,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(1328,924), //bcp->offset
    15, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S21199C3,    ABISELECT(1312,916), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2416,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4240,2972), //bcp->offset
    30, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(1872,1308), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21199C10,    ABISELECT(1872,1308), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S21199C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21199C9[];
extern void _ZN8S21199C9D1Ev();
extern void _ZN8S21199C9D0Ev();
extern void _ZN8S21199C52v1Ev();
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev)();
extern void ABISELECT(_ZThn1872_N8S21199C9D1Ev,_ZThn1308_N8S21199C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev)();
extern void ABISELECT(_ZThn1872_N8S21199C9D0Ev,_ZThn1308_N8S21199C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev)();
extern void ABISELECT(_ZThn4240_N8S21199C9D1Ev,_ZThn2972_N8S21199C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev)();
extern void ABISELECT(_ZThn4240_N8S21199C9D0Ev,_ZThn2972_N8S21199C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21199C9[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21199C9D0Ev,
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev),
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S21199C9[];
extern void _ZN9S21199C11D1Ev();
extern void _ZN9S21199C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C11__8S21199C9[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN9S21199C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev)();
extern void ABISELECT(_ZThn4240_N9S21199C11D1Ev,_ZThn2972_N9S21199C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev)();
extern void ABISELECT(_ZThn4240_N9S21199C11D0Ev,_ZThn2972_N9S21199C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C11__8S21199C9[] = {
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__9S21199C11__8S21199C9[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C11__8S21199C9[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev)();
extern void ABISELECT(_ZThn1872_N9S21199C11D1Ev,_ZThn1308_N9S21199C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev)();
extern void ABISELECT(_ZThn1872_N9S21199C11D0Ev,_ZThn1308_N9S21199C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21199C10__9S21199C11__8S21199C9[] = {
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__8S21199C9[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C3__8S21199C9[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C9[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void _ZN9S21199C10D1Ev();
extern void _ZN9S21199C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C10__8S21199C9[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D0Ev,
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C59S21199C10__A1__8S21199C9[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev)();
extern void ABISELECT(_ZThn2368_N9S21199C10D1Ev,_ZThn1664_N9S21199C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev)();
extern void ABISELECT(_ZThn2368_N9S21199C10D0Ev,_ZThn1664_N9S21199C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C10__8S21199C9[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev),
};
static  VTT_ENTRY vtt_S21199C9[] = {
  {&(_ZTV8S21199C9[8]),  8,35},
  {&(_tg__ZTV9S21199C11__8S21199C9[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S21199C11__8S21199C9[3]),  3,5},
  {&(_tg__ZTV8S21199C3__9S21199C11__8S21199C9[5]),  5,5},
  {&(_tg__ZTV8S21199C5__9S21199C11__8S21199C9[4]),  4,5},
  {&(_tg__ZTV9S21199C10__9S21199C11__8S21199C9[7]),  7,10},
  {&(_ZTV8S21199C9[15]),  15,35},
  {&(_ZTV8S21199C9[19]),  19,35},
  {&(_ZTV8S21199C9[27]),  27,35},
  {&(_ZTV8S21199C9[33]),  33,35},
  {&(_tg__ZTV8S21199C3__8S21199C9[5]),  5,5},
  {&(_tg__ZTV8S21199C5__8S21199C3__8S21199C9[4]),  4,5},
  {&(_tg__ZTV8S21199C5__8S21199C9[3]),  3,4},
  {&(_tg__ZTV9S21199C10__8S21199C9[5]),  5,8},
  {&(_tg__ZTV8S21199C59S21199C10__A1__8S21199C9[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S21199C10__8S21199C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21199C9[];
extern  VTBL_ENTRY _ZTV8S21199C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C9[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S21199C10D0Ev,_ZThn1664_N9S21199C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S21199C10D1Ev,_ZThn1664_N9S21199C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S21199C11D0Ev,_ZThn1308_N9S21199C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S21199C11D1Ev,_ZThn1308_N9S21199C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S21199C11D0Ev,_ZThn2972_N9S21199C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S21199C11D1Ev,_ZThn2972_N9S21199C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S21199C9D0Ev,_ZThn2972_N8S21199C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S21199C9D1Ev,_ZThn2972_N8S21199C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S21199C9D0Ev,_ZThn1308_N8S21199C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S21199C9D1Ev,_ZThn1308_N8S21199C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21199C9 = {  "S21199C9", // class name
  bases_S21199C9, 14,
  &(vtc_S21199C9[0]), // expected_vtbl_contents
  &(vtt_S21199C9[0]), // expected_vtt_contents
  ABISELECT(4368,3056), // object size
  NSPAIRA(_ZTI8S21199C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21199C9),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21199C9),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21199C14  : S20507C6 , virtual S21199C6 , virtual S21199C5 {
  long double s21199c14f0;
  ~S21199C14(); // tgen
  S21199C14(); // tgen
};
//SIG(-1 S21199C14) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S21199C14()
{
  extern Class_Descriptor cd_S21199C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S21199C14, buf);
    S21199C14 *dp, &lv = *(dp=new (buf) S21199C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S21199C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C14)");
    /*is_ambiguous_... S21199C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S21199C14");
    /*is_ambiguous_... S21199C14::S21199C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(112,80), "S21199C14");
    /*is_ambiguous_... S21199C14::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*), ABISELECT(112,80), "S21199C14");
    check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*), ABISELECT(560,396), "S21199C14");
    check_base_class_offset(lv, (S21199C6*)(S21199C5*), ABISELECT(560,396), "S21199C14");
    /*is_ambiguous_... S21199C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*), ABISELECT(1088,776), "S21199C14");
    check_base_class_offset(lv, (S21199C5*), ABISELECT(544,392), "S21199C14");
    check_field_offset(lv, s21199c14f0, ABISELECT(96,68), "S21199C14.s21199c14f0");
    test_class_info(&lv, &cd_S21199C14);
    dp->~S21199C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C14(Test_S21199C14, "S21199C14", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN9S21199C14C1Ev();
extern void _ZN9S21199C14D1Ev();
Name_Map name_map_S21199C14[] = {
  NSPAIR(_ZN9S21199C14C1Ev),
  NSPAIR(_ZN9S21199C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
static Base_Class bases_S21199C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S21199C6,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S21199C6,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S21199C14[];
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY vtc_S21199C14[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C14[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S21199C14[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern VTBL_ENTRY _ZTV9S21199C14[];
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C14[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
static  VTT_ENTRY vtt_S21199C14[] = {
  {&(_ZTV9S21199C14[5]),  5,10},
  {&(_ZTV9S21199C14[9]),  9,10},
  {&(_tg__ZTV8S21199C5__9S21199C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S21199C14[];
extern  VTBL_ENTRY _ZTV9S21199C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C14[];
Class_Descriptor cd_S21199C14 = {  "S21199C14", // class name
  bases_S21199C14, 7,
  &(vtc_S21199C14[0]), // expected_vtbl_contents
  &(vtt_S21199C14[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI9S21199C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21199C14),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21199C14),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  S21199C13  : virtual S20507C11 , virtual S21199C6 , virtual S21199C5 , virtual S21199C14 {
  long double s21199c13f0[9];
  int s21199c13f1;
  ::S21199C11 s21199c13f2;
  int s21199c13f3;
  __tsi64 s21199c13f4;
  ::S20507C11 s21199c13f5;
  __tsi64 s21199c13f6;
  virtual  ~S21199C13(); // _ZN9S21199C13D2Ev
  S21199C13(); // tgen
};
//SIG(-1 S21199C13) C1{ VBC2{ vd m Fp FD[5] Fp FD} VBC3{ BC4{ m Fi[10] Fp[6]} Fi FD Fi FC4 FC4 Fi FD[8]} VBC5{ BC3 VBC4 v1 FD[2] Fi[2] FD[3]} VBC6{ BC4 VBC3 VBC5 FD} vd FD[9] Fi FC7{ VBC4 VBC2 VBC8{ VBC4 VBC5 VBC3 FC9{}} VBC10{ BC4 VBC3 VBC2 BC5 vd FC8 FC5} FC3 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL}


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

static void Test_S21199C13()
{
  extern Class_Descriptor cd_S21199C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(367,1027)];
    init_test(&cd_S21199C13, buf);
    S21199C13 *dp, &lv = *(dp=new (buf) S21199C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5856,4104), "sizeof(S21199C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C13)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(4544,3180), "S21199C13");
    /*is_ambiguous_... S21199C13::S21199C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(4672,3264), "S21199C13");
    /*is_ambiguous_... S21199C13::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*), ABISELECT(4672,3264), "S21199C13");
    /*is_ambiguous_... S21199C14::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C14*), ABISELECT(4672,3264), "S21199C13");
    check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*), ABISELECT(5120,3580), "S21199C13");
    check_base_class_offset(lv, (S21199C6*)(S21199C5*), ABISELECT(5120,3580), "S21199C13");
    /*is_ambiguous_... S21199C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*), ABISELECT(5648,3960), "S21199C13");
    check_base_class_offset(lv, (S21199C5*), ABISELECT(5104,3576), "S21199C13");
    check_base_class_offset(lv, (S21199C5*)(S21199C14*), ABISELECT(5104,3576), "S21199C13");
    /*is_ambiguous_... S21199C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C14*), ABISELECT(5752,4028), "S21199C13");
    check_base_class_offset(lv, (S21199C14*), ABISELECT(5744,4024), "S21199C13");
    check_field_offset(lv, s21199c13f0, ABISELECT(16,4), "S21199C13.s21199c13f0");
    check_field_offset(lv, s21199c13f1, ABISELECT(160,112), "S21199C13.s21199c13f1");
    check_field_offset(lv, s21199c13f2, ABISELECT(176,116), "S21199C13.s21199c13f2");
    check_field_offset(lv, s21199c13f3, ABISELECT(4384,3076), "S21199C13.s21199c13f3");
    check_field_offset(lv, s21199c13f4, ABISELECT(4392,3080), "S21199C13.s21199c13f4");
    check_field_offset(lv, s21199c13f5, ABISELECT(4400,3088), "S21199C13.s21199c13f5");
    check_field_offset(lv, s21199c13f6, ABISELECT(4528,3172), "S21199C13.s21199c13f6");
    test_class_info(&lv, &cd_S21199C13);
    dp->~S21199C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C13(Test_S21199C13, "S21199C13", ABISELECT(5856,4104));

#else // __cplusplus

extern void _ZN9S21199C13C1Ev();
extern void _ZN9S21199C13D2Ev();
Name_Map name_map_S21199C13[] = {
  NSPAIR(_ZN9S21199C13C1Ev),
  NSPAIR(_ZN9S21199C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C14;
extern VTBL_ENTRY _ZTI9S21199C14[];
extern  VTBL_ENTRY _ZTV9S21199C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C14[];
static Base_Class bases_S21199C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(4544,3180), //bcp->offset
    9, //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_S20507C6,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21199C6,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21199C6,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(5648,3960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(5104,3576), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(5752,4028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C14,    ABISELECT(5744,4024), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21199C13[];
extern void _ZN9S21199C13D1Ev();
extern void _ZN9S21199C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21199C13D1Ev,_ZTv0_n12_N9S21199C13D1Ev)();
extern void ABISELECT(_ZThn4544_N9S21199C13D1Ev,_ZThn3180_N9S21199C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C13D0Ev,_ZTv0_n12_N9S21199C13D0Ev)();
extern void ABISELECT(_ZThn4544_N9S21199C13D0Ev,_ZThn3180_N9S21199C13D0Ev)() __attribute__((weak));
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY vtc_S21199C13[] = {
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C13[0]),
  (VTBL_ENTRY)&_ZN9S21199C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C13D0Ev,
  ABISELECT(-4544,-3180),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI9S21199C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C13D1Ev,_ZTv0_n12_N9S21199C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C13D0Ev,_ZTv0_n12_N9S21199C13D0Ev),
  0,
  ABISELECT(544,384),
  ABISELECT(-5104,-3576),
  (VTBL_ENTRY)&(_ZTI9S21199C13[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-5744,-4024),
  (VTBL_ENTRY)&(_ZTI9S21199C13[0]),
};
extern VTBL_ENTRY _ZTV9S21199C13[];
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C13[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S21199C14__9S21199C13[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C14[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C14__9S21199C13[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S21199C14[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
static  VTT_ENTRY vtt_S21199C13[] = {
  {&(_ZTV9S21199C13[7]),  7,24},
  {&(_ZTV9S21199C13[12]),  12,24},
  {&(_ZTV9S21199C13[18]),  18,24},
  {&(_ZTV9S21199C13[24]),  24,24},
  {&(_tg__ZTV8S21199C5__9S21199C13[3]),  3,4},
  {&(_tg__ZTV9S21199C14__9S21199C13[5]),  5,5},
  {&(_tg__ZTV8S21199C5__9S21199C14__9S21199C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S21199C13[];
extern  VTBL_ENTRY _ZTV9S21199C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C13[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C13D0Ev,_ZTv0_n12_N9S21199C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S21199C13D0Ev,_ZThn3180_N9S21199C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C13D1Ev,_ZTv0_n12_N9S21199C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S21199C13D1Ev,_ZThn3180_N9S21199C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21199C13 = {  "S21199C13", // class name
  bases_S21199C13, 9,
  &(vtc_S21199C13[0]), // expected_vtbl_contents
  &(vtt_S21199C13[0]), // expected_vtt_contents
  ABISELECT(5856,4104), // object size
  NSPAIRA(_ZTI9S21199C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21199C13),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21199C13),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21199C12  {
  int s21199c12f0;
  ::S21199C3 s21199c12f1;
  int s21199c12f2;
  void *s21199c12f3;
  ::S21199C13 s21199c12f4;
  int s21199c12f5;
  __tsi64 s21199c12f6;
  long double s21199c12f7;
  virtual void  v2(); // _ZN9S21199C122v2Ev
  virtual void  v3(); // _ZN9S21199C122v3Ev
  virtual void  v4(); // _ZN9S21199C122v4Ev
  ~S21199C12(); // tgen
  S21199C12(); // tgen
};
//SIG(-1 S21199C12) C1{ v1 v2 v3 Fi FC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ BC5{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v4 FD[2] Fi[2] FD[3]} VBC5 FC6{}} Fi Fp FC7{ VBC8{ vd m Fp FD[5] Fp FD} VBC5 VBC4 VBC9{ BC3 VBC5 VBC4 FD} vd FD[9] Fi FC10{ VBC3 VBC8 VBC2 VBC11{ BC3 VBC5 VBC8 BC4 vd FC2 FC4} FC5 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC8 FL} Fi FL FD}


void  S21199C12 ::v2(){vfunc_called(this, "_ZN9S21199C122v2Ev");}
void  S21199C12 ::v3(){vfunc_called(this, "_ZN9S21199C122v3Ev");}
void  S21199C12 ::v4(){vfunc_called(this, "_ZN9S21199C122v4Ev");}
S21199C12 ::~S21199C12(){ note_dtor("S21199C12", this);} // tgen
S21199C12 ::S21199C12(){ note_ctor("S21199C12", this);} // tgen

static void Test_S21199C12()
{
  extern Class_Descriptor cd_S21199C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(439,1229)];
    init_test(&cd_S21199C12, buf);
    S21199C12 *dp, &lv = *(dp=new (buf) S21199C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7008,4912), "sizeof(S21199C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C12)");
    check_field_offset(lv, s21199c12f0, ABISELECT(8,4), "S21199C12.s21199c12f0");
    check_field_offset(lv, s21199c12f1, ABISELECT(16,8), "S21199C12.s21199c12f1");
    check_field_offset(lv, s21199c12f2, ABISELECT(1104,776), "S21199C12.s21199c12f2");
    check_field_offset(lv, s21199c12f3, ABISELECT(1112,780), "S21199C12.s21199c12f3");
    check_field_offset(lv, s21199c12f4, ABISELECT(1120,784), "S21199C12.s21199c12f4");
    check_field_offset(lv, s21199c12f5, ABISELECT(6976,4888), "S21199C12.s21199c12f5");
    check_field_offset(lv, s21199c12f6, ABISELECT(6984,4892), "S21199C12.s21199c12f6");
    check_field_offset(lv, s21199c12f7, ABISELECT(6992,4900), "S21199C12.s21199c12f7");
    test_class_info(&lv, &cd_S21199C12);
    dp->~S21199C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C12(Test_S21199C12, "S21199C12", ABISELECT(7008,4912));

#else // __cplusplus

extern void _ZN9S21199C12C1Ev();
extern void _ZN9S21199C12D1Ev();
Name_Map name_map_S21199C12[] = {
  NSPAIR(_ZN9S21199C12C1Ev),
  NSPAIR(_ZN9S21199C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21199C12[];
extern void _ZN9S21199C122v2Ev();
extern void _ZN9S21199C122v3Ev();
extern void _ZN9S21199C122v4Ev();
static  VTBL_ENTRY vtc_S21199C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C12[0]),
  (VTBL_ENTRY)&_ZN9S21199C122v2Ev,
  (VTBL_ENTRY)&_ZN9S21199C122v3Ev,
  (VTBL_ENTRY)&_ZN9S21199C122v4Ev,
};
extern VTBL_ENTRY _ZTI9S21199C12[];
extern  VTBL_ENTRY _ZTV9S21199C12[];
Class_Descriptor cd_S21199C12 = {  "S21199C12", // class name
  0,0,//no base classes
  &(vtc_S21199C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7008,4912), // object size
  NSPAIRA(_ZTI9S21199C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21199C12),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  S21199C8  : S20507C11 , S21199C9 , virtual S21199C11 , virtual S21199C12 {
  void *s21199c8f0[5];
  long double s21199c8f1[5];
  int s21199c8f2;
  long double s21199c8f3;
  virtual void  v5(); // _ZN8S21199C82v5Ev
  virtual void  v6(); // _ZN8S21199C82v6Ev
  ~S21199C8(); // tgen
  S21199C8(); // tgen
};
//SIG(-1 S21199C8) C1{ BC2{ vd m Fp FD[5] Fp FD} BC3{ VBC4{ m Fi[10] Fp[6]} VBC5{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC6{ VBC4 VBC7{ BC5 VBC4 v3 FD[2] Fi[2] FD[3]} VBC5 FC8{}} VBC9{ BC4 VBC5 VBC2 BC7 vd FC6 FC7} BC10{ VBC4 VBC2 VBC6 VBC9 FC5 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC2 FD} VBC10 VBC11{ v4 v5 v6 Fi FC6 Fi Fp FC12{ VBC2 VBC5 VBC7 VBC13{ BC4 VBC5 VBC7 FD} vd FD[9] Fi FC10 Fi FL FC2 FL} Fi FL FD} v1 v2 Fp[5] FD[5] Fi FD}


void  S21199C8 ::v5(){vfunc_called(this, "_ZN8S21199C82v5Ev");}
void  S21199C8 ::v6(){vfunc_called(this, "_ZN8S21199C82v6Ev");}
S21199C8 ::~S21199C8(){ note_dtor("S21199C8", this);} // tgen
S21199C8 ::S21199C8(){ note_ctor("S21199C8", this);} // tgen

static void Test_S21199C8()
{
  extern Class_Descriptor cd_S21199C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(770,2149)];
    init_test(&cd_S21199C8, buf);
    S21199C8 *dp, &lv = *(dp=new (buf) S21199C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12304,8592), "sizeof(S21199C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C8)");
    /*is_ambiguous_... S21199C8::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*), 0, "S21199C8");
    /*is_ambiguous_... S21199C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C9*), ABISELECT(1072,720), "S21199C8");
    /*is_ambiguous_... S21199C3::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C3*), ABISELECT(1072,720), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*), ABISELECT(1072,720), "S21199C8");
    /*is_ambiguous_... S21199C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*)(S21199C10*), ABISELECT(1072,720), "S21199C8");
    /*is_ambiguous_... S21199C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C11*)(S21199C9*), ABISELECT(1072,720), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C11*), ABISELECT(1072,720), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(1168,784), "S21199C8");
    /*is_ambiguous_... S21199C9::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C9*), ABISELECT(1168,784), "S21199C8");
    /*is_ambiguous_... S21199C3::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C3*), ABISELECT(1168,784), "S21199C8");
    /*is_ambiguous_... S21199C10::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C10*), ABISELECT(1168,784), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*), ABISELECT(1632,1108), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C5 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C5*), ABISELECT(1632,1108), "S21199C8");
    check_base_class_offset(lv, (S21199C5*)(S21199C3*), ABISELECT(1616,1104), "S21199C8");
    check_base_class_offset(lv, (S21199C3*)(S21199C9*), ABISELECT(1600,1096), "S21199C8");
    check_base_class_offset(lv, (S21199C3*)(S21199C11*)(S21199C9*), ABISELECT(1600,1096), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C11 */ AMB_check_base_class_offset(lv, (S21199C3*)(S21199C11*), ABISELECT(1600,1096), "S21199C8");
    /*is_ambiguous_... S21199C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C10*), ABISELECT(2704,1872), "S21199C8");
    check_base_class_offset(lv, (S20507C11*)(S21199C10*), ABISELECT(4528,3152), "S21199C8");
    check_base_class_offset(lv, (S20507C11*)(S21199C11*)(S21199C9*), ABISELECT(4528,3152), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S21199C11*), ABISELECT(4528,3152), "S21199C8");
    check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(2176,1492), "S21199C8");
    check_base_class_offset(lv, (S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(2176,1492), "S21199C8");
    check_base_class_offset(lv, (S21199C5*)(S21199C10*), ABISELECT(2160,1488), "S21199C8");
    check_base_class_offset(lv, (S21199C10*)(S21199C9*), ABISELECT(2160,1488), "S21199C8");
    check_base_class_offset(lv, (S21199C10*)(S21199C11*)(S21199C9*), ABISELECT(2160,1488), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C11 */ AMB_check_base_class_offset(lv, (S21199C10*)(S21199C11*), ABISELECT(2160,1488), "S21199C8");
    check_base_class_offset(lv, (S21199C11*)(S21199C9*), ABISELECT(128,84), "S21199C8");
    check_base_class_offset(lv, (S21199C9*), ABISELECT(128,84), "S21199C8");
    /*is_ambiguous_... S21199C8::S21199C11 */ AMB_check_base_class_offset(lv, (S21199C11*), ABISELECT(4656,3236), "S21199C8");
    check_base_class_offset(lv, (S21199C12*), ABISELECT(5296,3680), "S21199C8");
    check_field_offset(lv, s21199c8f0, ABISELECT(912,624), "S21199C8.s21199c8f0");
    check_field_offset(lv, s21199c8f1, ABISELECT(960,644), "S21199C8.s21199c8f1");
    check_field_offset(lv, s21199c8f2, ABISELECT(1040,704), "S21199C8.s21199c8f2");
    check_field_offset(lv, s21199c8f3, ABISELECT(1056,708), "S21199C8.s21199c8f3");
    test_class_info(&lv, &cd_S21199C8);
    dp->~S21199C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C8(Test_S21199C8, "S21199C8", ABISELECT(12304,8592));

#else // __cplusplus

extern void _ZN8S21199C8C1Ev();
extern void _ZN8S21199C8D1Ev();
Name_Map name_map_S21199C8[] = {
  NSPAIR(_ZN8S21199C8C1Ev),
  NSPAIR(_ZN8S21199C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S21199C3;
extern VTBL_ENTRY _ZTI8S21199C3[];
extern  VTBL_ENTRY _ZTV8S21199C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C3[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S21199C10;
extern VTBL_ENTRY _ZTI9S21199C10[];
extern  VTBL_ENTRY _ZTV9S21199C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C10[];
extern Class_Descriptor cd_S21199C11;
extern VTBL_ENTRY _ZTI9S21199C11[];
extern  VTBL_ENTRY _ZTV9S21199C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C11[];
extern Class_Descriptor cd_S21199C9;
extern VTBL_ENTRY _ZTI8S21199C9[];
extern  VTBL_ENTRY _ZTV8S21199C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C9[];
extern Class_Descriptor cd_S21199C11;
extern VTBL_ENTRY _ZTI9S21199C11[];
extern  VTBL_ENTRY _ZTV9S21199C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C11[];
extern Class_Descriptor cd_S21199C12;
extern VTBL_ENTRY _ZTI9S21199C12[];
extern  VTBL_ENTRY _ZTV9S21199C12[];
static Base_Class bases_S21199C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C6,    ABISELECT(1072,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1168,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
    3, //immediately_derived
  0, 0},
  {&cd_S21199C6,    ABISELECT(1168,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
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(1616,1104), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21199C3,    ABISELECT(1600,1096), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2704,1872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4528,3152), //bcp->offset
    44, //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
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(2160,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21199C10,    ABISELECT(2160,1488), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S21199C11,    ABISELECT(128,84), //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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21199C9,    ABISELECT(128,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21199C11,    ABISELECT(4656,3236), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21199C12,    ABISELECT(5296,3680), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21199C8[];
extern void _ZN8S21199C8D1Ev();
extern void _ZN8S21199C8D0Ev();
extern void _ZN8S21199C82v5Ev();
extern void _ZN8S21199C82v6Ev();
extern void ABISELECT(_ZThn128_N8S21199C8D1Ev,_ZThn84_N8S21199C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S21199C8D0Ev,_ZThn84_N8S21199C8D0Ev)();
extern void _ZN8S21199C52v1Ev();
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S21199C8D1Ev,_ZTv0_n28_N8S21199C8D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21199C8D1Ev,_ZThn1488_N8S21199C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21199C8D0Ev,_ZTv0_n28_N8S21199C8D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21199C8D0Ev,_ZThn1488_N8S21199C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21199C8D1Ev,_ZTv0_n12_N8S21199C8D1Ev)();
extern void ABISELECT(_ZThn4528_N8S21199C8D1Ev,_ZThn3152_N8S21199C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21199C8D0Ev,_ZTv0_n12_N8S21199C8D0Ev)();
extern void ABISELECT(_ZThn4528_N8S21199C8D0Ev,_ZThn3152_N8S21199C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21199C8D1Ev,_ZTv0_n36_N8S21199C8D1Ev)();
extern void ABISELECT(_ZThn4656_N8S21199C8D1Ev,_ZThn3236_N8S21199C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21199C8D0Ev,_ZTv0_n36_N8S21199C8D0Ev)();
extern void ABISELECT(_ZThn4656_N8S21199C8D0Ev,_ZThn3236_N8S21199C8D0Ev)() __attribute__((weak));
extern void _ZN9S21199C122v2Ev();
extern void _ZN9S21199C122v3Ev();
extern void _ZN9S21199C122v4Ev();
static  VTBL_ENTRY vtc_S21199C8[] = {
  ABISELECT(5296,3680),
  ABISELECT(4656,3236),
  ABISELECT(4528,3152),
  ABISELECT(2160,1488),
  ABISELECT(1616,1104),
  ABISELECT(1600,1096),
  ABISELECT(1168,784),
  ABISELECT(1072,720),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&_ZN8S21199C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21199C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21199C82v5Ev,
  (VTBL_ENTRY)&_ZN8S21199C82v6Ev,
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S21199C8D1Ev,_ZThn84_N8S21199C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S21199C8D0Ev,_ZThn84_N8S21199C8D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1600,-1096),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1616,-1104),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  ABISELECT(-2160,-1488),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2160,-1488),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C8D1Ev,_ZTv0_n28_N8S21199C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C8D0Ev,_ZTv0_n28_N8S21199C8D0Ev),
  ABISELECT(-4528,-3152),
  ABISELECT(-4528,-3152),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C8D1Ev,_ZTv0_n12_N8S21199C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C8D0Ev,_ZTv0_n12_N8S21199C8D0Ev),
  ABISELECT(-4656,-3236),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  ABISELECT(-4656,-3236),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21199C8D1Ev,_ZTv0_n36_N8S21199C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21199C8D0Ev,_ZTv0_n36_N8S21199C8D0Ev),
  0,
  0,
  0,
  ABISELECT(-5296,-3680),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&_ZN9S21199C122v2Ev,
  (VTBL_ENTRY)&_ZN9S21199C122v3Ev,
  (VTBL_ENTRY)&_ZN9S21199C122v4Ev,
};
extern VTBL_ENTRY _ZTV8S21199C8[];
extern void _ZN8S21199C9D1Ev();
extern void _ZN8S21199C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C9__8S21199C8[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21199C9D0Ev,
};
extern void _ZN9S21199C11D1Ev();
extern void _ZN9S21199C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C118S21199C9__8S21199C8[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN9S21199C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev)();
extern void ABISELECT(_ZThn4400_N9S21199C11D1Ev,_ZThn3068_N9S21199C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev)();
extern void ABISELECT(_ZThn4400_N9S21199C11D0Ev,_ZThn3068_N9S21199C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C118S21199C9__8S21199C8[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__9S21199C118S21199C9__8S21199C8[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C118S21199C9__8S21199C8[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev)();
extern void ABISELECT(_ZThn2032_N9S21199C11D1Ev,_ZThn1404_N9S21199C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev)();
extern void ABISELECT(_ZThn2032_N9S21199C11D0Ev,_ZThn1404_N9S21199C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21199C10__9S21199C118S21199C9__8S21199C8[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__8S21199C9__8S21199C8[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C9__8S21199C8[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev)();
extern void ABISELECT(_ZThn2032_N8S21199C9D1Ev,_ZThn1404_N8S21199C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev)();
extern void ABISELECT(_ZThn2032_N8S21199C9D0Ev,_ZThn1404_N8S21199C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21199C10__8S21199C9__8S21199C8[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev)();
extern void ABISELECT(_ZThn4400_N8S21199C9D1Ev,_ZThn3068_N8S21199C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev)();
extern void ABISELECT(_ZThn4400_N8S21199C9D0Ev,_ZThn3068_N8S21199C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S21199C9__8S21199C8[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__8S21199C8[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C3__8S21199C8[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C8[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void _ZN9S21199C10D1Ev();
extern void _ZN9S21199C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C10__8S21199C8[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D0Ev,
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C59S21199C10__A1__8S21199C8[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev)();
extern void ABISELECT(_ZThn2368_N9S21199C10D1Ev,_ZThn1664_N9S21199C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev)();
extern void ABISELECT(_ZThn2368_N9S21199C10D0Ev,_ZThn1664_N9S21199C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C10__8S21199C8[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev),
};
extern void _ZN9S21199C11D1Ev();
extern void _ZN9S21199C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C11__A1__8S21199C8[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN9S21199C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C11__A1__8S21199C8[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__9S21199C11__A1__8S21199C8[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C11__A1__8S21199C8[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21199C10__9S21199C11__A1__8S21199C8[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev),
};
static  VTT_ENTRY vtt_S21199C8[] = {
  {&(_ZTV8S21199C8[10]),  10,68},
  {&(_tg__ZTV8S21199C9__8S21199C8[8]),  8,10},
  {&(_tg__ZTV9S21199C118S21199C9__8S21199C8[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S21199C118S21199C9__8S21199C8[3]),  3,5},
  {&(_tg__ZTV8S21199C3__9S21199C118S21199C9__8S21199C8[5]),  5,5},
  {&(_tg__ZTV8S21199C5__9S21199C118S21199C9__8S21199C8[4]),  4,5},
  {&(_tg__ZTV9S21199C10__9S21199C118S21199C9__8S21199C8[7]),  7,10},
  {&(_tg__ZTV8S21199C3__8S21199C9__8S21199C8[5]),  5,5},
  {&(_tg__ZTV8S21199C5__8S21199C9__8S21199C8[4]),  4,5},
  {&(_tg__ZTV9S21199C10__8S21199C9__8S21199C8[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S21199C9__8S21199C8[3]),  3,5},
  {&(_ZTV8S21199C8[22]),  22,68},
  {&(_ZTV8S21199C8[29]),  29,68},
  {&(_ZTV8S21199C8[33]),  33,68},
  {&(_ZTV8S21199C8[41]),  41,68},
  {&(_ZTV8S21199C8[47]),  47,68},
  {&(_ZTV8S21199C8[58]),  58,68},
  {&(_ZTV8S21199C8[65]),  65,68},
  {&(_tg__ZTV8S21199C3__8S21199C8[5]),  5,5},
  {&(_tg__ZTV8S21199C5__8S21199C3__8S21199C8[4]),  4,5},
  {&(_tg__ZTV8S21199C5__8S21199C8[3]),  3,4},
  {&(_tg__ZTV9S21199C10__8S21199C8[5]),  5,8},
  {&(_tg__ZTV8S21199C59S21199C10__A1__8S21199C8[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S21199C10__8S21199C8[3]),  3,5},
  {&(_tg__ZTV9S21199C11__A1__8S21199C8[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S21199C11__A1__8S21199C8[3]),  3,5},
  {&(_tg__ZTV8S21199C3__9S21199C11__A1__8S21199C8[5]),  5,5},
  {&(_tg__ZTV8S21199C5__9S21199C11__A1__8S21199C8[4]),  4,5},
  {&(_tg__ZTV9S21199C10__9S21199C11__A1__8S21199C8[7]),  7,10},
};
extern VTBL_ENTRY _ZTI8S21199C8[];
extern  VTBL_ENTRY _ZTV8S21199C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C8[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S21199C10D0Ev,_ZThn1664_N9S21199C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S21199C10D1Ev,_ZThn1664_N9S21199C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S21199C9D0Ev,_ZThn3068_N8S21199C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S21199C9D1Ev,_ZThn3068_N8S21199C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S21199C9D0Ev,_ZThn1404_N8S21199C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S21199C9D1Ev,_ZThn1404_N8S21199C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S21199C11D0Ev,_ZThn1404_N9S21199C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S21199C11D1Ev,_ZThn1404_N9S21199C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S21199C11D0Ev,_ZThn3068_N9S21199C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S21199C11D1Ev,_ZThn3068_N9S21199C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21199C8D0Ev,_ZTv0_n36_N8S21199C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S21199C8D0Ev,_ZThn3236_N8S21199C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21199C8D1Ev,_ZTv0_n36_N8S21199C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S21199C8D1Ev,_ZThn3236_N8S21199C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C8D0Ev,_ZTv0_n12_N8S21199C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N8S21199C8D0Ev,_ZThn3152_N8S21199C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C8D1Ev,_ZTv0_n12_N8S21199C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N8S21199C8D1Ev,_ZThn3152_N8S21199C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C8D0Ev,_ZTv0_n28_N8S21199C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21199C8D0Ev,_ZThn1488_N8S21199C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C8D1Ev,_ZTv0_n28_N8S21199C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21199C8D1Ev,_ZThn1488_N8S21199C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21199C8 = {  "S21199C8", // class name
  bases_S21199C8, 18,
  &(vtc_S21199C8[0]), // expected_vtbl_contents
  &(vtt_S21199C8[0]), // expected_vtt_contents
  ABISELECT(12304,8592), // object size
  NSPAIRA(_ZTI8S21199C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21199C8),68, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21199C8),29, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21199C1  : virtual S20507C11 , S21199C3 , S21199C8 , S21199C10 {
  ::S20628C13 s21199c1f0[2];
  ~S21199C1(); // tgen
  S21199C1(); // tgen
};
//SIG(1 S21199C1) C1{ VBC2{ vd m Fp FD[5] Fp FD} BC3{ VBC4{ m Fi[10] Fp[6]} VBC5{ BC6{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v1 FD[2] Fi[2] FD[3]} VBC6 FC7{}} BC8{ BC2 BC9{ VBC4 VBC6 VBC3 VBC10{ BC4 VBC6 VBC2 BC5 vd FC3 FC5} BC11{ VBC4 VBC2 VBC3 VBC10 FC6 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC2 FD} VBC11 VBC12{ v2 v3 v4 Fi FC3 Fi Fp FC13{ VBC2 VBC6 VBC5 VBC14{ BC4 VBC6 VBC5 FD} vd FD[9] Fi FC11 Fi FL FC2 FL} Fi FL FD} v5 v6 Fp[5] FD[5] Fi FD} BC10 FC15{ BC16{ BC2 BC17{ VBC4 VBC18{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC19{ VBC4 VBC20{ BC18 VBC4 v9 FD[2] Fi[2] FD[3]} VBC18 FC7} VBC21{ BC4 VBC18 VBC2 BC20 vd FC19 FC20} BC22{ VBC4 VBC2 VBC19 VBC21 FC18 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC2 FD} VBC22 VBC23{ v10 v11 v12 Fi FC19 Fi Fp FC24{ VBC2 VBC18 VBC20 VBC25{ BC4 VBC18 VBC20 FD} vd FD[9] Fi FC22 Fi FL FC2 FL} Fi FL FD} v13 v14 Fp[5] FD[5] Fi FD} BC26{ VBC4 VBC25 BC24 vd Fp FC21} BC17 BC27{ VBC4 VBC20 BC25 BC24 VBC21 vd Fi Fp Fi:9 Fc FD FC20 FC17 Fc Fs[7] FC7 Fi Fc Fl} BC24 vd v7 v8 Fi[4] Fc FC16 Fp Fl[6] FC27 Fi}[2]}


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

static void Test_S21199C1()
{
  extern Class_Descriptor cd_S21199C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8525,23853)];
    init_test(&cd_S21199C1, buf);
    S21199C1 *dp, &lv = *(dp=new (buf) S21199C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136384,95408), "sizeof(S21199C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21199C1)");
    /*is_ambiguous_... S21199C1::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*), ABISELECT(125152,87536), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S20507C11*)(S21199C10*), ABISELECT(125152,87536), "S21199C1");
    check_base_class_offset(lv, (S20507C11*)(S21199C11*)(S21199C9*)(S21199C8*), ABISELECT(125152,87536), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S21199C11*), ABISELECT(125152,87536), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S20507C11*)(S21199C10*), ABISELECT(125152,87536), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C3 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C3*), ABISELECT(125280,87620), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*), ABISELECT(125280,87620), "S21199C1");
    /*is_ambiguous_... S21199C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C9*)(S21199C8*), ABISELECT(125280,87620), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C3 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C3*), ABISELECT(125280,87620), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*)(S21199C10*), ABISELECT(125280,87620), "S21199C1");
    /*is_ambiguous_... S21199C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C11*)(S21199C9*)(S21199C8*), ABISELECT(125280,87620), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C11*), ABISELECT(125280,87620), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C5*)(S21199C10*), ABISELECT(125280,87620), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*), ABISELECT(125392,87688), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C5 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C5*), ABISELECT(125392,87688), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C3 */ AMB_check_base_class_offset(lv, (S21199C5*)(S21199C3*), ABISELECT(125376,87684), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C3 */ AMB_check_base_class_offset(lv, (S21199C5*)(S21199C3*), ABISELECT(125376,87684), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*), ABISELECT(125920,88068), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C3 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C3*), ABISELECT(125920,88068), "S21199C1");
    /*is_ambiguous_... S21199C9::S21199C6 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C9*)(S21199C8*), ABISELECT(125920,88068), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C3 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C3*), ABISELECT(125920,88068), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C10*), ABISELECT(125920,88068), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C10*), ABISELECT(125920,88068), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C3 */ AMB_check_base_class_offset(lv, (S21199C3*), 0, "S21199C1");
    /*is_ambiguous_... S21199C8::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S21199C8*), ABISELECT(16,8), "S21199C1");
    check_base_class_offset(lv, (S21199C3*)(S21199C9*)(S21199C8*), ABISELECT(126352,88380), "S21199C1");
    check_base_class_offset(lv, (S21199C3*)(S21199C11*)(S21199C9*)(S21199C8*), ABISELECT(126352,88380), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C11 */ AMB_check_base_class_offset(lv, (S21199C3*)(S21199C11*), ABISELECT(126352,88380), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C10*), ABISELECT(126912,88772), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(126384,88392), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(126384,88392), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S21199C5*)(S21199C10*), ABISELECT(126368,88388), "S21199C1");
    check_base_class_offset(lv, (S21199C10*)(S21199C9*)(S21199C8*), ABISELECT(126368,88388), "S21199C1");
    check_base_class_offset(lv, (S21199C10*)(S21199C11*)(S21199C9*)(S21199C8*), ABISELECT(126368,88388), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C11 */ AMB_check_base_class_offset(lv, (S21199C10*)(S21199C11*), ABISELECT(126368,88388), "S21199C1");
    check_base_class_offset(lv, (S21199C11*)(S21199C9*)(S21199C8*), ABISELECT(144,92), "S21199C1");
    check_base_class_offset(lv, (S21199C9*)(S21199C8*), ABISELECT(144,92), "S21199C1");
    /*is_ambiguous_... S21199C8::S21199C11 */ AMB_check_base_class_offset(lv, (S21199C11*)(S21199C8*), ABISELECT(128736,90052), "S21199C1");
    check_base_class_offset(lv, (S21199C12*)(S21199C8*), ABISELECT(129376,90496), "S21199C1");
    check_base_class_offset(lv, (S21199C8*), ABISELECT(16,8), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C10*), ABISELECT(1632,1112), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(1104,732), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S21199C6*)(S21199C5*)(S21199C10*), ABISELECT(1104,732), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S21199C5*)(S21199C10*), ABISELECT(1088,728), "S21199C1");
    /*is_ambiguous_... S21199C1::S21199C10 */ AMB_check_base_class_offset(lv, (S21199C10*), ABISELECT(1088,728), "S21199C1");
    check_field_offset(lv, s21199c1f0, ABISELECT(3456,2392), "S21199C1.s21199c1f0");
    test_class_info(&lv, &cd_S21199C1);
    dp->~S21199C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21199C1(Test_S21199C1, "S21199C1", ABISELECT(136384,95408));

#else // __cplusplus

extern void _ZN8S21199C1C1Ev();
extern void _ZN8S21199C1D1Ev();
Name_Map name_map_S21199C1[] = {
  NSPAIR(_ZN8S21199C1C1Ev),
  NSPAIR(_ZN8S21199C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C3;
extern VTBL_ENTRY _ZTI8S21199C3[];
extern  VTBL_ENTRY _ZTV8S21199C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C3[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S21199C3;
extern VTBL_ENTRY _ZTI8S21199C3[];
extern  VTBL_ENTRY _ZTV8S21199C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C3[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S21199C10;
extern VTBL_ENTRY _ZTI9S21199C10[];
extern  VTBL_ENTRY _ZTV9S21199C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C10[];
extern Class_Descriptor cd_S21199C11;
extern VTBL_ENTRY _ZTI9S21199C11[];
extern  VTBL_ENTRY _ZTV9S21199C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C11[];
extern Class_Descriptor cd_S21199C9;
extern VTBL_ENTRY _ZTI8S21199C9[];
extern  VTBL_ENTRY _ZTV8S21199C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C9[];
extern Class_Descriptor cd_S21199C11;
extern VTBL_ENTRY _ZTI9S21199C11[];
extern  VTBL_ENTRY _ZTV9S21199C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C11[];
extern Class_Descriptor cd_S21199C12;
extern VTBL_ENTRY _ZTI9S21199C12[];
extern  VTBL_ENTRY _ZTV9S21199C12[];
extern Class_Descriptor cd_S21199C8;
extern VTBL_ENTRY _ZTI8S21199C8[];
extern  VTBL_ENTRY _ZTV8S21199C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21199C6;
extern VTBL_ENTRY _ZTI8S21199C6[];
extern Class_Descriptor cd_S21199C5;
extern VTBL_ENTRY _ZTI8S21199C5[];
extern  VTBL_ENTRY _ZTV8S21199C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C5[];
extern Class_Descriptor cd_S21199C10;
extern VTBL_ENTRY _ZTI9S21199C10[];
extern  VTBL_ENTRY _ZTV9S21199C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21199C10[];
static Base_Class bases_S21199C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(125152,87536), //bcp->offset
    44, //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_S20507C6,    ABISELECT(125280,87620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(125392,87688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(125392,87688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(125376,87684), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(125920,88068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(125920,88068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C3,    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_S20507C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S21199C3,    ABISELECT(126352,88380), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(126912,88772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(126384,88392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C6,    ABISELECT(126384,88392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21199C5,    ABISELECT(126368,88388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21199C10,    ABISELECT(126368,88388), //bcp->offset
    59, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21199C11,    ABISELECT(144,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S21199C9,    ABISELECT(144,92), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S21199C11,    ABISELECT(128736,90052), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S21199C12,    ABISELECT(129376,90496), //bcp->offset
    80, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S21199C8,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(1632,1112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1104,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S21199C6,    ABISELECT(1104,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S21199C5,    ABISELECT(1088,728), //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
    13, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21199C10,    ABISELECT(1088,728), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21199C1[];
extern void _ZN8S21199C1D1Ev();
extern void _ZN8S21199C1D0Ev();
extern void ABISELECT(_ZThn16_N8S21199C1D1Ev,_ZThn8_N8S21199C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21199C1D0Ev,_ZThn8_N8S21199C1D0Ev)();
extern void _ZN8S21199C82v5Ev();
extern void _ZN8S21199C82v6Ev();
extern void ABISELECT(_ZThn144_N8S21199C1D1Ev,_ZThn92_N8S21199C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S21199C1D0Ev,_ZThn92_N8S21199C1D0Ev)();
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZThn1088_N8S21199C1D1Ev,_ZThn728_N8S21199C1D1Ev)();
extern void ABISELECT(_ZThn1088_N8S21199C1D0Ev,_ZThn728_N8S21199C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21199C1D1Ev,_ZTv0_n12_N8S21199C1D1Ev)();
extern void ABISELECT(_ZThn125152_N8S21199C1D1Ev,_ZThn87536_N8S21199C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21199C1D0Ev,_ZTv0_n12_N8S21199C1D0Ev)();
extern void ABISELECT(_ZThn125152_N8S21199C1D0Ev,_ZThn87536_N8S21199C1D0Ev)() __attribute__((weak));
extern void _ZN8S21199C52v1Ev();
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S21199C1D1Ev,_ZTv0_n28_N8S21199C1D1Ev)();
extern void ABISELECT(_ZThn126368_N8S21199C1D1Ev,_ZThn88388_N8S21199C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21199C1D0Ev,_ZTv0_n28_N8S21199C1D0Ev)();
extern void ABISELECT(_ZThn126368_N8S21199C1D0Ev,_ZThn88388_N8S21199C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21199C1D1Ev,_ZTv0_n36_N8S21199C1D1Ev)();
extern void ABISELECT(_ZThn128736_N8S21199C1D1Ev,_ZThn90052_N8S21199C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21199C1D0Ev,_ZTv0_n36_N8S21199C1D0Ev)();
extern void ABISELECT(_ZThn128736_N8S21199C1D0Ev,_ZThn90052_N8S21199C1D0Ev)() __attribute__((weak));
extern void _ZN9S21199C122v2Ev();
extern void _ZN9S21199C122v3Ev();
extern void _ZN9S21199C122v4Ev();
static  VTBL_ENTRY vtc_S21199C1[] = {
  ABISELECT(129376,90496),
  ABISELECT(128736,90052),
  ABISELECT(126368,88388),
  ABISELECT(126352,88380),
  ABISELECT(125152,87536),
  ABISELECT(125920,88068),
  ABISELECT(125376,87684),
  ABISELECT(125280,87620),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&_ZN8S21199C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21199C1D0Ev,
  ABISELECT(129360,90488),
  ABISELECT(128720,90044),
  ABISELECT(125136,87528),
  ABISELECT(126352,88380),
  ABISELECT(125360,87676),
  ABISELECT(126336,88372),
  ABISELECT(125904,88060),
  ABISELECT(125264,87612),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21199C1D1Ev,_ZThn8_N8S21199C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21199C1D0Ev,_ZThn8_N8S21199C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21199C82v5Ev,
  (VTBL_ENTRY)&_ZN8S21199C82v6Ev,
  ABISELECT(126224,88296),
  ABISELECT(125776,87976),
  ABISELECT(125232,87592),
  ABISELECT(126208,88288),
  ABISELECT(125008,87444),
  ABISELECT(125136,87528),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S21199C1D1Ev,_ZThn92_N8S21199C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S21199C1D0Ev,_ZThn92_N8S21199C1D0Ev),
  ABISELECT(124064,86808),
  ABISELECT(124832,87340),
  ABISELECT(124192,86892),
  ABISELECT(-1088,-728),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1088_N8S21199C1D1Ev,_ZThn728_N8S21199C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1088_N8S21199C1D0Ev,_ZThn728_N8S21199C1D0Ev),
  ABISELECT(-125152,-87536),
  ABISELECT(-125152,-87536),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C1D1Ev,_ZTv0_n12_N8S21199C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C1D0Ev,_ZTv0_n12_N8S21199C1D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-125376,-87684),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  ABISELECT(-432,-312),
  ABISELECT(-976,-696),
  ABISELECT(-1072,-760),
  ABISELECT(-126352,-88380),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  ABISELECT(-126368,-88388),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-448,-320),
  ABISELECT(-1088,-768),
  ABISELECT(-126368,-88388),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C1D1Ev,_ZTv0_n28_N8S21199C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C1D0Ev,_ZTv0_n28_N8S21199C1D0Ev),
  ABISELECT(-128736,-90052),
  ABISELECT(-2368,-1664),
  ABISELECT(-2816,-1984),
  ABISELECT(-3360,-2368),
  ABISELECT(-2384,-1672),
  ABISELECT(-3584,-2516),
  ABISELECT(-3456,-2432),
  ABISELECT(-128736,-90052),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21199C1D1Ev,_ZTv0_n36_N8S21199C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21199C1D0Ev,_ZTv0_n36_N8S21199C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-129376,-90496),
  (VTBL_ENTRY)&(_ZTI8S21199C1[0]),
  (VTBL_ENTRY)&_ZN9S21199C122v2Ev,
  (VTBL_ENTRY)&_ZN9S21199C122v3Ev,
  (VTBL_ENTRY)&_ZN9S21199C122v4Ev,
};
extern VTBL_ENTRY _ZTV8S21199C1[];
static  VTBL_ENTRY _tg__ZTV8S21199C3__A__8S21199C1[] = {
  ABISELECT(125920,88068),
  ABISELECT(125376,87684),
  ABISELECT(125280,87620),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C3__A__8S21199C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(-125376,-87684),
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C8D1Ev();
extern void _ZN8S21199C8D0Ev();
extern void _ZN8S21199C82v5Ev();
extern void _ZN8S21199C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C8__8S21199C1[] = {
  ABISELECT(129360,90488),
  ABISELECT(128720,90044),
  ABISELECT(125136,87528),
  ABISELECT(126352,88380),
  ABISELECT(125360,87676),
  ABISELECT(126336,88372),
  ABISELECT(125904,88060),
  ABISELECT(125264,87612),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&_ZN8S21199C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21199C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21199C82v5Ev,
  (VTBL_ENTRY)&_ZN8S21199C82v6Ev,
};
extern void _ZN8S21199C9D1Ev();
extern void _ZN8S21199C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C98S21199C8__8S21199C1[] = {
  ABISELECT(126224,88296),
  ABISELECT(125776,87976),
  ABISELECT(125232,87592),
  ABISELECT(126208,88288),
  ABISELECT(125008,87444),
  ABISELECT(125136,87528),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21199C9D0Ev,
};
extern void _ZN9S21199C11D1Ev();
extern void _ZN9S21199C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C118S21199C98S21199C8__8S21199C1[] = {
  ABISELECT(126224,88296),
  ABISELECT(125776,87976),
  ABISELECT(125232,87592),
  ABISELECT(126208,88288),
  ABISELECT(125008,87444),
  ABISELECT(125136,87528),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN9S21199C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev)();
extern void ABISELECT(_ZThn125008_N9S21199C11D1Ev,_ZThn87444_N9S21199C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev)();
extern void ABISELECT(_ZThn125008_N9S21199C11D0Ev,_ZThn87444_N9S21199C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C118S21199C98S21199C8__8S21199C1[] = {
  ABISELECT(-125008,-87444),
  ABISELECT(-125008,-87444),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__9S21199C118S21199C98S21199C8__8S21199C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(-976,-696),
  ABISELECT(-1072,-760),
  ABISELECT(-126208,-88288),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C118S21199C98S21199C8__8S21199C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(-125232,-87592),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev)();
extern void ABISELECT(_ZThn126224_N9S21199C11D1Ev,_ZThn88296_N9S21199C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev)();
extern void ABISELECT(_ZThn126224_N9S21199C11D0Ev,_ZThn88296_N9S21199C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21199C10__9S21199C118S21199C98S21199C8__8S21199C1[] = {
  ABISELECT(-126224,-88296),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-448,-320),
  ABISELECT(-1088,-768),
  ABISELECT(-126224,-88296),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__8S21199C98S21199C8__8S21199C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(-976,-696),
  ABISELECT(-1072,-760),
  ABISELECT(-126208,-88288),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C98S21199C8__8S21199C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(-125232,-87592),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev)();
extern void ABISELECT(_ZThn126224_N8S21199C9D1Ev,_ZThn88296_N8S21199C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev)();
extern void ABISELECT(_ZThn126224_N8S21199C9D0Ev,_ZThn88296_N8S21199C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21199C10__8S21199C98S21199C8__8S21199C1[] = {
  ABISELECT(-126224,-88296),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-448,-320),
  ABISELECT(-1088,-768),
  ABISELECT(-126224,-88296),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev)();
extern void ABISELECT(_ZThn125008_N8S21199C9D1Ev,_ZThn87444_N8S21199C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev)();
extern void ABISELECT(_ZThn125008_N8S21199C9D0Ev,_ZThn87444_N8S21199C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S21199C98S21199C8__8S21199C1[] = {
  ABISELECT(-125008,-87444),
  ABISELECT(-125008,-87444),
  (VTBL_ENTRY)&(_ZTI8S21199C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev),
};
extern void ABISELECT(_ZThn128_N8S21199C8D1Ev,_ZThn84_N8S21199C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S21199C8D0Ev,_ZThn84_N8S21199C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21199C9__8S21199C8__8S21199C1[] = {
  ABISELECT(126224,88296),
  ABISELECT(125776,87976),
  ABISELECT(125232,87592),
  ABISELECT(126208,88288),
  ABISELECT(125008,87444),
  ABISELECT(125136,87528),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S21199C8D1Ev,_ZThn84_N8S21199C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S21199C8D0Ev,_ZThn84_N8S21199C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__8S21199C8__8S21199C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(-976,-696),
  ABISELECT(-1072,-760),
  ABISELECT(-126336,-88372),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C8__8S21199C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(-125360,-87676),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S21199C8D1Ev,_ZTv0_n28_N8S21199C8D1Ev)();
extern void ABISELECT(_ZThn126352_N8S21199C8D1Ev,_ZThn88380_N8S21199C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21199C8D0Ev,_ZTv0_n28_N8S21199C8D0Ev)();
extern void ABISELECT(_ZThn126352_N8S21199C8D0Ev,_ZThn88380_N8S21199C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21199C10__8S21199C8__8S21199C1[] = {
  ABISELECT(-126352,-88380),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-448,-320),
  ABISELECT(-1088,-768),
  ABISELECT(-126352,-88380),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C8D1Ev,_ZTv0_n28_N8S21199C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21199C8D0Ev,_ZTv0_n28_N8S21199C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21199C8D1Ev,_ZTv0_n12_N8S21199C8D1Ev)();
extern void ABISELECT(_ZThn125136_N8S21199C8D1Ev,_ZThn87528_N8S21199C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21199C8D0Ev,_ZTv0_n12_N8S21199C8D0Ev)();
extern void ABISELECT(_ZThn125136_N8S21199C8D0Ev,_ZThn87528_N8S21199C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__8S21199C8__8S21199C1[] = {
  ABISELECT(-125136,-87528),
  ABISELECT(-125136,-87528),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C8D1Ev,_ZTv0_n12_N8S21199C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21199C8D0Ev,_ZTv0_n12_N8S21199C8D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S21199C8D1Ev,_ZTv0_n36_N8S21199C8D1Ev)();
extern void ABISELECT(_ZThn128720_N8S21199C8D1Ev,_ZThn90044_N8S21199C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21199C8D0Ev,_ZTv0_n36_N8S21199C8D0Ev)();
extern void ABISELECT(_ZThn128720_N8S21199C8D0Ev,_ZThn90044_N8S21199C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21199C11__A1__8S21199C8__8S21199C1[] = {
  ABISELECT(-128720,-90044),
  ABISELECT(-2368,-1664),
  ABISELECT(-2816,-1984),
  ABISELECT(-3360,-2368),
  ABISELECT(-2384,-1672),
  ABISELECT(-3584,-2516),
  ABISELECT(-3456,-2432),
  ABISELECT(-128720,-90044),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21199C8D1Ev,_ZTv0_n36_N8S21199C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21199C8D0Ev,_ZTv0_n36_N8S21199C8D0Ev),
};
extern void _ZN9S21199C122v2Ev();
extern void _ZN9S21199C122v3Ev();
extern void _ZN9S21199C122v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C12__8S21199C8__8S21199C1[] = {
  0,
  0,
  0,
  ABISELECT(-129360,-90488),
  (VTBL_ENTRY)&(_ZTI8S21199C8[0]),
  (VTBL_ENTRY)&_ZN9S21199C122v2Ev,
  (VTBL_ENTRY)&_ZN9S21199C122v3Ev,
  (VTBL_ENTRY)&_ZN9S21199C122v4Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void _ZN9S21199C10D1Ev();
extern void _ZN9S21199C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C10__A__8S21199C1[] = {
  ABISELECT(124064,86808),
  ABISELECT(124832,87340),
  ABISELECT(124192,86892),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D0Ev,
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C59S21199C10__A2__8S21199C1[] = {
  ABISELECT(124192,86892),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev)();
extern void ABISELECT(_ZThn124064_N9S21199C10D1Ev,_ZThn86808_N9S21199C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev)();
extern void ABISELECT(_ZThn124064_N9S21199C10D0Ev,_ZThn86808_N9S21199C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C10__A__8S21199C1[] = {
  ABISELECT(-124064,-86808),
  ABISELECT(-124064,-86808),
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C1[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__A1__8S21199C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(-976,-696),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__8S21199C3__A1__8S21199C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(976,696),
  (VTBL_ENTRY)&(_ZTI8S21199C3[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void _ZN9S21199C10D1Ev();
extern void _ZN9S21199C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C10__8S21199C1[] = {
  ABISELECT(-1216,-852),
  ABISELECT(-448,-320),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C10D0Ev,
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C59S21199C10__A1__8S21199C1[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S21199C5[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C10__8S21199C1[] = {
  ABISELECT(1216,852),
  ABISELECT(1216,852),
  (VTBL_ENTRY)&(_ZTI9S21199C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev),
};
extern void _ZN9S21199C11D1Ev();
extern void _ZN9S21199C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21199C11__A1__8S21199C1[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2816,-1984),
  ABISELECT(-3360,-2368),
  ABISELECT(-2384,-1672),
  ABISELECT(-3584,-2516),
  ABISELECT(-3456,-2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN9S21199C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21199C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21199C11__A1__8S21199C1[] = {
  ABISELECT(3584,2516),
  ABISELECT(3584,2516),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21199C3__9S21199C11__A1__8S21199C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(-976,-696),
  ABISELECT(-1072,-760),
  ABISELECT(2384,1672),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
};
extern void _ZN8S21199C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21199C5__9S21199C11__A1__8S21199C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(3360,2368),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
};
extern void _ZN8S21199C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21199C10__9S21199C11__A1__8S21199C1[] = {
  ABISELECT(2368,1664),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-448,-320),
  ABISELECT(-1088,-768),
  ABISELECT(2368,1664),
  (VTBL_ENTRY)&(_ZTI9S21199C11[0]),
  (VTBL_ENTRY)&_ZN8S21199C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev),
};
static  VTT_ENTRY vtt_S21199C1[] = {
  {&(_ZTV8S21199C1[10]),  10,88},
  {&(_tg__ZTV8S21199C3__A__8S21199C1[5]),  5,5},
  {&(_tg__ZTV8S21199C5__8S21199C3__A__8S21199C1[4]),  4,5},
  {&(_tg__ZTV8S21199C8__8S21199C1[10]),  10,14},
  {&(_tg__ZTV8S21199C98S21199C8__8S21199C1[8]),  8,10},
  {&(_tg__ZTV9S21199C118S21199C98S21199C8__8S21199C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S21199C118S21199C98S21199C8__8S21199C1[3]),  3,5},
  {&(_tg__ZTV8S21199C3__9S21199C118S21199C98S21199C8__8S21199C1[5]),  5,5},
  {&(_tg__ZTV8S21199C5__9S21199C118S21199C98S21199C8__8S21199C1[4]),  4,5},
  {&(_tg__ZTV9S21199C10__9S21199C118S21199C98S21199C8__8S21199C1[7]),  7,10},
  {&(_tg__ZTV8S21199C3__8S21199C98S21199C8__8S21199C1[5]),  5,5},
  {&(_tg__ZTV8S21199C5__8S21199C98S21199C8__8S21199C1[4]),  4,5},
  {&(_tg__ZTV9S21199C10__8S21199C98S21199C8__8S21199C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S21199C98S21199C8__8S21199C1[3]),  3,5},
  {&(_tg__ZTV8S21199C9__8S21199C8__8S21199C1[8]),  8,10},
  {&(_tg__ZTV8S21199C3__8S21199C8__8S21199C1[5]),  5,5},
  {&(_tg__ZTV8S21199C5__8S21199C8__8S21199C1[4]),  4,5},
  {&(_tg__ZTV9S21199C10__8S21199C8__8S21199C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__8S21199C8__8S21199C1[3]),  3,5},
  {&(_tg__ZTV9S21199C11__A1__8S21199C8__8S21199C1[9]),  9,11},
  {&(_tg__ZTV9S21199C12__8S21199C8__8S21199C1[5]),  5,8},
  {&(_tg__ZTV9S21199C10__A__8S21199C1[5]),  5,8},
  {&(_tg__ZTV8S21199C59S21199C10__A2__8S21199C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S21199C10__A__8S21199C1[3]),  3,5},
  {&(_ZTV8S21199C1[47]),  47,88},
  {&(_ZTV8S21199C1[53]),  53,88},
  {&(_ZTV8S21199C1[22]),  22,88},
  {&(_ZTV8S21199C1[34]),  34,88},
  {&(_ZTV8S21199C1[59]),  59,88},
  {&(_ZTV8S21199C1[66]),  66,88},
  {&(_ZTV8S21199C1[78]),  78,88},
  {&(_ZTV8S21199C1[85]),  85,88},
  {&(_ZTV8S21199C1[41]),  41,88},
  {&(_tg__ZTV8S21199C5__8S21199C1[3]),  3,4},
  {&(_tg__ZTV8S21199C3__A1__8S21199C1[5]),  5,5},
  {&(_tg__ZTV8S21199C5__8S21199C3__A1__8S21199C1[4]),  4,5},
  {&(_tg__ZTV9S21199C10__8S21199C1[5]),  5,8},
  {&(_tg__ZTV8S21199C59S21199C10__A1__8S21199C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S21199C10__8S21199C1[3]),  3,5},
  {&(_tg__ZTV9S21199C11__A1__8S21199C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S21199C11__A1__8S21199C1[3]),  3,5},
  {&(_tg__ZTV8S21199C3__9S21199C11__A1__8S21199C1[5]),  5,5},
  {&(_tg__ZTV8S21199C5__9S21199C11__A1__8S21199C1[4]),  4,5},
  {&(_tg__ZTV9S21199C10__9S21199C11__A1__8S21199C1[7]),  7,10},
};
extern VTBL_ENTRY _ZTI8S21199C1[];
extern  VTBL_ENTRY _ZTV8S21199C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21199C1[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C10D0Ev,_ZTv0_n12_N9S21199C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn124064_N9S21199C10D0Ev,_ZThn86808_N9S21199C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C10D1Ev,_ZTv0_n12_N9S21199C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn124064_N9S21199C10D1Ev,_ZThn86808_N9S21199C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21199C8D0Ev,_ZTv0_n36_N8S21199C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128720_N8S21199C8D0Ev,_ZThn90044_N8S21199C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21199C8D1Ev,_ZTv0_n36_N8S21199C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128720_N8S21199C8D1Ev,_ZThn90044_N8S21199C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C8D0Ev,_ZTv0_n12_N8S21199C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125136_N8S21199C8D0Ev,_ZThn87528_N8S21199C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C8D1Ev,_ZTv0_n12_N8S21199C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125136_N8S21199C8D1Ev,_ZThn87528_N8S21199C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C8D0Ev,_ZTv0_n28_N8S21199C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126352_N8S21199C8D0Ev,_ZThn88380_N8S21199C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C8D1Ev,_ZTv0_n28_N8S21199C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126352_N8S21199C8D1Ev,_ZThn88380_N8S21199C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C9D0Ev,_ZTv0_n12_N8S21199C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125008_N8S21199C9D0Ev,_ZThn87444_N8S21199C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C9D1Ev,_ZTv0_n12_N8S21199C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125008_N8S21199C9D1Ev,_ZThn87444_N8S21199C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C9D0Ev,_ZTv0_n28_N8S21199C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126224_N8S21199C9D0Ev,_ZThn88296_N8S21199C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C9D1Ev,_ZTv0_n28_N8S21199C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126224_N8S21199C9D1Ev,_ZThn88296_N8S21199C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21199C11D0Ev,_ZTv0_n28_N9S21199C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126224_N9S21199C11D0Ev,_ZThn88296_N9S21199C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21199C11D1Ev,_ZTv0_n28_N9S21199C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126224_N9S21199C11D1Ev,_ZThn88296_N9S21199C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C11D0Ev,_ZTv0_n12_N9S21199C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125008_N9S21199C11D0Ev,_ZThn87444_N9S21199C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21199C11D1Ev,_ZTv0_n12_N9S21199C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125008_N9S21199C11D1Ev,_ZThn87444_N9S21199C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21199C1D0Ev,_ZTv0_n36_N8S21199C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128736_N8S21199C1D0Ev,_ZThn90052_N8S21199C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21199C1D1Ev,_ZTv0_n36_N8S21199C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128736_N8S21199C1D1Ev,_ZThn90052_N8S21199C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C1D0Ev,_ZTv0_n28_N8S21199C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126368_N8S21199C1D0Ev,_ZThn88388_N8S21199C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21199C1D1Ev,_ZTv0_n28_N8S21199C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn126368_N8S21199C1D1Ev,_ZThn88388_N8S21199C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C1D0Ev,_ZTv0_n12_N8S21199C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125152_N8S21199C1D0Ev,_ZThn87536_N8S21199C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21199C1D1Ev,_ZTv0_n12_N8S21199C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn125152_N8S21199C1D1Ev,_ZThn87536_N8S21199C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21199C1 = {  "S21199C1", // class name
  bases_S21199C1, 25,
  &(vtc_S21199C1[0]), // expected_vtbl_contents
  &(vtt_S21199C1[0]), // expected_vtt_contents
  ABISELECT(136384,95408), // object size
  NSPAIRA(_ZTI8S21199C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21199C1),88, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21199C1),44, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19290C3  {
  __tsi64 s19290c3f0[8];
  char s19290c3f1[4];
  __tsi64 s19290c3f2:7;
  int s19290c3f3;
  long double s19290c3f4;
  __tsi64 s19290c3f5;
  virtual void  v2(); // _ZN8S19290C32v2Ev
  ~S19290C3(); // tgen
  S19290C3(); // tgen
};
//SIG(-1 S19290C3) C1{ v1 FL[8] Fc[4] FL:7 Fi FD FL}


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

static void Test_S19290C3()
{
  extern Class_Descriptor cd_S19290C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S19290C3, buf);
    S19290C3 *dp, &lv = *(dp=new (buf) S19290C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S19290C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C3)");
    check_field_offset(lv, s19290c3f0, ABISELECT(8,4), "S19290C3.s19290c3f0");
    check_field_offset(lv, s19290c3f1, ABISELECT(72,68), "S19290C3.s19290c3f1");
    set_bf_and_test(lv, s19290c3f2, ABISELECT(76,72), 0, 7, 1, "S19290C3");
    set_bf_and_test(lv, s19290c3f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S19290C3");
    check_field_offset(lv, s19290c3f3, ABISELECT(80,76), "S19290C3.s19290c3f3");
    check_field_offset(lv, s19290c3f4, ABISELECT(96,80), "S19290C3.s19290c3f4");
    check_field_offset(lv, s19290c3f5, ABISELECT(112,92), "S19290C3.s19290c3f5");
    test_class_info(&lv, &cd_S19290C3);
    dp->~S19290C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C3(Test_S19290C3, "S19290C3", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S19290C3C1Ev();
extern void _ZN8S19290C3D1Ev();
Name_Map name_map_S19290C3[] = {
  NSPAIR(_ZN8S19290C3C1Ev),
  NSPAIR(_ZN8S19290C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19290C3[];
extern void _ZN8S19290C32v2Ev();
static  VTBL_ENTRY vtc_S19290C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C3[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
Class_Descriptor cd_S19290C3 = {  "S19290C3", // class name
  0,0,//no base classes
  &(vtc_S19290C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S19290C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19290C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19290C2  : S19290C3 {
  ::S19290C3 s19290c2f0;
  int s19290c2f1;
  ::S19290C3 s19290c2f2;
  int s19290c2f3;
  char s19290c2f4[6];
  char s19290c2f5:4;
  void *s19290c2f6;
  ::S19290C3 s19290c2f7;
  int s19290c2f8;
  virtual void  v6(); // _ZN8S19290C22v6Ev
  virtual void  v7(); // _ZN8S19290C22v7Ev
  virtual void  v8(); // _ZN8S19290C22v8Ev
  ~S19290C2(); // tgen
  S19290C2(); // tgen
};
//SIG(-1 S19290C2) C1{ BC2{ v4 FL[8] Fc[4] FL:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S19290C2 ::v6(){vfunc_called(this, "_ZN8S19290C22v6Ev");}
void  S19290C2 ::v7(){vfunc_called(this, "_ZN8S19290C22v7Ev");}
void  S19290C2 ::v8(){vfunc_called(this, "_ZN8S19290C22v8Ev");}
S19290C2 ::~S19290C2(){ note_dtor("S19290C2", this);} // tgen
S19290C2 ::S19290C2(){ note_ctor("S19290C2", this);} // tgen

static void Test_S19290C2()
{
  extern Class_Descriptor cd_S19290C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S19290C2, buf);
    S19290C2 *dp, &lv = *(dp=new (buf) S19290C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S19290C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C2)");
    check_base_class_offset(lv, (S19290C3*), 0, "S19290C2");
    check_field_offset(lv, s19290c2f0, ABISELECT(128,100), "S19290C2.s19290c2f0");
    check_field_offset(lv, s19290c2f1, ABISELECT(256,200), "S19290C2.s19290c2f1");
    check_field_offset(lv, s19290c2f2, ABISELECT(272,204), "S19290C2.s19290c2f2");
    check_field_offset(lv, s19290c2f3, ABISELECT(400,304), "S19290C2.s19290c2f3");
    check_field_offset(lv, s19290c2f4, ABISELECT(404,308), "S19290C2.s19290c2f4");
    set_bf_and_test(lv, s19290c2f5, ABISELECT(410,314), 0, 4, 1, "S19290C2");
    set_bf_and_test(lv, s19290c2f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S19290C2");
    check_field_offset(lv, s19290c2f6, ABISELECT(416,316), "S19290C2.s19290c2f6");
    check_field_offset(lv, s19290c2f7, ABISELECT(432,320), "S19290C2.s19290c2f7");
    check_field_offset(lv, s19290c2f8, ABISELECT(560,420), "S19290C2.s19290c2f8");
    test_class_info(&lv, &cd_S19290C2);
    dp->~S19290C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C2(Test_S19290C2, "S19290C2", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN8S19290C2C1Ev();
extern void _ZN8S19290C2D1Ev();
Name_Map name_map_S19290C2[] = {
  NSPAIR(_ZN8S19290C2C1Ev),
  NSPAIR(_ZN8S19290C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
static Base_Class bases_S19290C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19290C2[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY vtc_S19290C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C2[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
Class_Descriptor cd_S19290C2 = {  "S19290C2", // class name
  bases_S19290C2, 1,
  &(vtc_S19290C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI8S19290C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19290C2),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  S19290C7  : S19290C3 {
  ::S19290C3 s19290c7f0;
  ::S19290C3 s19290c7f1;
  ::S19921C7 s19290c7f2;
  virtual void  v3(); // _ZN8S19290C72v3Ev
  ~S19290C7(); // tgen
  S19290C7(); // tgen
};
//SIG(-1 S19290C7) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


void  S19290C7 ::v3(){vfunc_called(this, "_ZN8S19290C72v3Ev");}
S19290C7 ::~S19290C7(){ note_dtor("S19290C7", this);} // tgen
S19290C7 ::S19290C7(){ note_ctor("S19290C7", this);} // tgen

static void Test_S19290C7()
{
  extern Class_Descriptor cd_S19290C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S19290C7, buf);
    S19290C7 *dp, &lv = *(dp=new (buf) S19290C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S19290C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C7)");
    check_base_class_offset(lv, (S19290C3*), 0, "S19290C7");
    check_field_offset(lv, s19290c7f0, ABISELECT(128,100), "S19290C7.s19290c7f0");
    check_field_offset(lv, s19290c7f1, ABISELECT(256,200), "S19290C7.s19290c7f1");
    check_field_offset(lv, s19290c7f2, ABISELECT(384,300), "S19290C7.s19290c7f2");
    test_class_info(&lv, &cd_S19290C7);
    dp->~S19290C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C7(Test_S19290C7, "S19290C7", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S19290C7C1Ev();
extern void _ZN8S19290C7D1Ev();
Name_Map name_map_S19290C7[] = {
  NSPAIR(_ZN8S19290C7C1Ev),
  NSPAIR(_ZN8S19290C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
static Base_Class bases_S19290C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19290C7[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY vtc_S19290C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C7[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
Class_Descriptor cd_S19290C7 = {  "S19290C7", // class name
  bases_S19290C7, 1,
  &(vtc_S19290C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S19290C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19290C7),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  S19290C10  : S19290C2 , virtual S19922C8 , S19290C3 , virtual S19290C7 {
  long s19290c10f0;
  long s19290c10f1;
  ~S19290C10(); // tgen
  S19290C10(); // tgen
};
//SIG(-1 S19290C10) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC6{ v6 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} BC3 VBC7{ BC3 v5 FC3 FC3 FU5} Fl Fl}


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

static void Test_S19290C10()
{
  extern Class_Descriptor cd_S19290C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,273)];
    init_test(&cd_S19290C10, buf);
    S19290C10 *dp, &lv = *(dp=new (buf) S19290C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1088), "sizeof(S19290C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C10)");
    check_base_class_offset(lv, (S19290C3*)(S19290C2*), 0, "S19290C10");
    check_base_class_offset(lv, (S19290C2*), 0, "S19290C10");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(720,532), "S19290C10");
    /*is_ambiguous_... S19290C10::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*), ABISELECT(576,424), "S19290C10");
    check_base_class_offset(lv, (S19290C3*)(S19290C7*), ABISELECT(1008,760), "S19290C10");
    check_base_class_offset(lv, (S19290C7*), ABISELECT(1008,760), "S19290C10");
    check_field_offset(lv, s19290c10f0, ABISELECT(696,524), "S19290C10.s19290c10f0");
    check_field_offset(lv, s19290c10f1, ABISELECT(704,528), "S19290C10.s19290c10f1");
    test_class_info(&lv, &cd_S19290C10);
    dp->~S19290C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C10(Test_S19290C10, "S19290C10", ABISELECT(1424,1088));

#else // __cplusplus

extern void _ZN9S19290C10C1Ev();
extern void _ZN9S19290C10D1Ev();
Name_Map name_map_S19290C10[] = {
  NSPAIR(_ZN9S19290C10C1Ev),
  NSPAIR(_ZN9S19290C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
static Base_Class bases_S19290C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19290C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C8,    ABISELECT(720,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19290C3,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19290C3,    ABISELECT(1008,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C7,    ABISELECT(1008,760), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19290C10[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY vtc_S19290C10[] = {
  ABISELECT(1008,760),
  ABISELECT(720,532),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  0,
  0,
  ABISELECT(-1008,-760),
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S19290C10[];
static  VTT_ENTRY vtt_S19290C10[] = {
  {&(_ZTV9S19290C10[4]),  4,17},
  {&(_ZTV9S19290C10[15]),  15,17},
};
extern VTBL_ENTRY _ZTI9S19290C10[];
extern  VTBL_ENTRY _ZTV9S19290C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C10[];
Class_Descriptor cd_S19290C10 = {  "S19290C10", // class name
  bases_S19290C10, 6,
  &(vtc_S19290C10[0]), // expected_vtbl_contents
  &(vtt_S19290C10[0]), // expected_vtt_contents
  ABISELECT(1424,1088), // object size
  NSPAIRA(_ZTI9S19290C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19290C10),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19290C10),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19290C6  : S19290C3 , S19290C7 , S19922C8 {
  ::S19921C7 s19290c6f0;
  char s19290c6f1;
  char s19290c6f2;
  ::S19290C10 s19290c6f3;
  ::S19922C11 s19290c6f4;
  int s19290c6f5;
  long s19290c6f6;
  virtual void  v4(); // _ZN8S19290C62v4Ev
  virtual void  v5(); // _ZN8S19290C62v5Ev
  ~S19290C6(); // tgen
  S19290C6(); // tgen
};
//SIG(-1 S19290C6) C1{ BC2{ v3 FL[8] Fc[4] FL:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC6{ v5 FL[8] Fc[4] FL:7 Fi FD FL} FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC7{ BC8{ BC2 v6 v7 v8 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl Fl} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC11{ BC6 v10 FC6 FC6 FU4} Fc:8 Fl FD FC12{ BC6 v11 v12 v13 FC6 Fi FC6 Fi Fc[6] Fc:4 Fp FC6 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S19290C6 ::v4(){vfunc_called(this, "_ZN8S19290C62v4Ev");}
void  S19290C6 ::v5(){vfunc_called(this, "_ZN8S19290C62v5Ev");}
S19290C6 ::~S19290C6(){ note_dtor("S19290C6", this);} // tgen
S19290C6 ::S19290C6(){ note_ctor("S19290C6", this);} // tgen

static void Test_S19290C6()
{
  extern Class_Descriptor cd_S19290C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,714)];
    init_test(&cd_S19290C6, buf);
    S19290C6 *dp, &lv = *(dp=new (buf) S19290C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2852), "sizeof(S19290C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C6)");
    /*is_ambiguous_... S19290C6::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*), 0, "S19290C6");
    check_base_class_offset(lv, (S19290C3*)(S19290C7*), ABISELECT(128,100), "S19290C6");
    check_base_class_offset(lv, (S19290C7*), ABISELECT(128,100), "S19290C6");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(544,428), "S19290C6");
    check_field_offset(lv, s19290c6f0, ABISELECT(832,656), "S19290C6.s19290c6f0");
    check_field_offset(lv, s19290c6f1, ABISELECT(864,684), "S19290C6.s19290c6f1");
    check_field_offset(lv, s19290c6f2, ABISELECT(865,685), "S19290C6.s19290c6f2");
    check_field_offset(lv, s19290c6f3, ABISELECT(880,688), "S19290C6.s19290c6f3");
    check_field_offset(lv, s19290c6f4, ABISELECT(2304,1776), "S19290C6.s19290c6f4");
    check_field_offset(lv, s19290c6f5, ABISELECT(3824,2844), "S19290C6.s19290c6f5");
    check_field_offset(lv, s19290c6f6, ABISELECT(3832,2848), "S19290C6.s19290c6f6");
    test_class_info(&lv, &cd_S19290C6);
    dp->~S19290C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C6(Test_S19290C6, "S19290C6", ABISELECT(3840,2852));

#else // __cplusplus

extern void _ZN8S19290C6C1Ev();
extern void _ZN8S19290C6D1Ev();
Name_Map name_map_S19290C6[] = {
  NSPAIR(_ZN8S19290C6C1Ev),
  NSPAIR(_ZN8S19290C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S19290C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19290C3,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19290C7,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19290C6[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C62v4Ev();
extern void _ZN8S19290C62v5Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY vtc_S19290C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C6[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v5Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19290C6[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern VTBL_ENTRY _ZTI8S19290C6[];
extern  VTBL_ENTRY _ZTV8S19290C6[];
Class_Descriptor cd_S19290C6 = {  "S19290C6", // class name
  bases_S19290C6, 4,
  &(vtc_S19290C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2852), // object size
  NSPAIRA(_ZTI8S19290C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19290C6),9, //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  S19290C13  : S19290C3 , virtual S19290C2 , virtual S19290C7 , S19290C10 , S19922C8 {
  int s19290c13f0;
  virtual void  v9(); // _ZN9S19290C132v9Ev
  ~S19290C13(); // tgen
  S19290C13(); // tgen
};
//SIG(-1 S19290C13) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC8{ v7 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} BC2 VBC4 Fl Fl} BC7 v1 Fi}


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

static void Test_S19290C13()
{
  extern Class_Descriptor cd_S19290C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,462)];
    init_test(&cd_S19290C13, buf);
    S19290C13 *dp, &lv = *(dp=new (buf) S19290C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1844), "sizeof(S19290C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C13)");
    /*is_ambiguous_... S19290C13::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*), 0, "S19290C13");
    /*is_ambiguous_... S19290C13::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C2*), ABISELECT(1136,864), "S19290C13");
    /*is_ambiguous_... S19290C13::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C2*), ABISELECT(1136,864), "S19290C13");
    check_base_class_offset(lv, (S19290C3*)(S19290C7*), ABISELECT(1712,1288), "S19290C13");
    check_base_class_offset(lv, (S19290C7*), ABISELECT(1712,1288), "S19290C13");
    check_base_class_offset(lv, (S19290C7*)(S19290C10*), ABISELECT(1712,1288), "S19290C13");
    check_base_class_offset(lv, (S19290C3*)(S19290C2*)(S19290C10*), ABISELECT(128,100), "S19290C13");
    check_base_class_offset(lv, (S19290C2*)(S19290C10*), ABISELECT(128,100), "S19290C13");
    check_base_class_offset(lv, (S19922C8*)(S19290C10*), ABISELECT(2128,1616), "S19290C13");
    /*is_ambiguous_... S19290C10::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C10*), ABISELECT(704,524), "S19290C13");
    check_base_class_offset(lv, (S19290C10*), ABISELECT(128,100), "S19290C13");
    /*is_ambiguous_... S19290C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(848,632), "S19290C13");
    check_field_offset(lv, s19290c13f0, ABISELECT(1132,860), "S19290C13.s19290c13f0");
    test_class_info(&lv, &cd_S19290C13);
    dp->~S19290C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C13(Test_S19290C13, "S19290C13", ABISELECT(2416,1844));

#else // __cplusplus

extern void _ZN9S19290C13C1Ev();
extern void _ZN9S19290C13D1Ev();
Name_Map name_map_S19290C13[] = {
  NSPAIR(_ZN9S19290C13C1Ev),
  NSPAIR(_ZN9S19290C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C10;
extern VTBL_ENTRY _ZTI9S19290C10[];
extern  VTBL_ENTRY _ZTV9S19290C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S19290C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C3,    ABISELECT(1136,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19290C2,    ABISELECT(1136,864), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19290C3,    ABISELECT(1712,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19290C7,    ABISELECT(1712,1288), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19290C3,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19290C2,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(2128,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C3,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19290C10,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(848,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19290C13[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY vtc_S19290C13[] = {
  ABISELECT(2128,1616),
  ABISELECT(1712,1288),
  ABISELECT(1136,864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-864),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  0,
  0,
  ABISELECT(-1712,-1288),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S19290C13[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C10__9S19290C13[] = {
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__9S19290C10__9S19290C13[] = {
  0,
  0,
  ABISELECT(-1584,-1188),
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
static  VTT_ENTRY vtt_S19290C13[] = {
  {&(_ZTV9S19290C13[5]),  5,34},
  {&(_tg__ZTV9S19290C10__9S19290C13[4]),  4,8},
  {&(_tg__ZTV8S19290C7__9S19290C10__9S19290C13[4]),  4,6},
  {&(_ZTV9S19290C13[24]),  24,34},
  {&(_ZTV9S19290C13[32]),  32,34},
  {&(_ZTV9S19290C13[11]),  11,34},
};
extern VTBL_ENTRY _ZTI9S19290C13[];
extern  VTBL_ENTRY _ZTV9S19290C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C13[];
Class_Descriptor cd_S19290C13 = {  "S19290C13", // class name
  bases_S19290C13, 11,
  &(vtc_S19290C13[0]), // expected_vtbl_contents
  &(vtt_S19290C13[0]), // expected_vtt_contents
  ABISELECT(2416,1844), // object size
  NSPAIRA(_ZTI9S19290C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19290C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19290C13),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19290C5  : S19290C6 , S19290C13 , S19922C12 , S19922C8 , virtual S19290C3 {
  void *s19290c5f0;
  long double s19290c5f1;
  int s19290c5f2;
  int s19290c5f3;
  char s19290c5f4[7];
  ~S19290C5(); // tgen
  S19290C5(); // tgen
};
//SIG(-1 S19290C5) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC7{ v9 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC8{ BC9{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl Fl} FC10{ v10 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC12{ BC7 v11 FC7 FC7 FU5} Fc:8 Fl FD FC13{ BC7 v12 v13 v14 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC14{ BC3 VBC9 VBC4 BC8 BC6 v8 Fi} BC11 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S19290C5()
{
  extern Class_Descriptor cd_S19290C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1478)];
    init_test(&cd_S19290C5, buf);
    S19290C5 *dp, &lv = *(dp=new (buf) S19290C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5908), "sizeof(S19290C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C5)");
    /*is_ambiguous_... S19290C6::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C6*), 0, "S19290C5");
    check_base_class_offset(lv, (S19290C3*)(S19290C7*)(S19290C6*), ABISELECT(128,100), "S19290C5");
    check_base_class_offset(lv, (S19290C7*)(S19290C6*), ABISELECT(128,100), "S19290C5");
    check_base_class_offset(lv, (S19922C8*)(S19290C6*), ABISELECT(544,428), "S19290C5");
    check_base_class_offset(lv, (S19290C6*), 0, "S19290C5");
    /*is_ambiguous_... S19290C13::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C13*), ABISELECT(3840,2852), "S19290C5");
    /*is_ambiguous_... S19290C5::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C2*), ABISELECT(6480,4828), "S19290C5");
    /*is_ambiguous_... S19290C13::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C2*)(S19290C13*), ABISELECT(6480,4828), "S19290C5");
    /*is_ambiguous_... S19290C5::S19290C7 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C7*), ABISELECT(7056,5252), "S19290C5");
    check_base_class_offset(lv, (S19290C7*)(S19290C13*), ABISELECT(7056,5252), "S19290C5");
    check_base_class_offset(lv, (S19290C7*)(S19290C10*)(S19290C13*), ABISELECT(7056,5252), "S19290C5");
    check_base_class_offset(lv, (S19290C3*)(S19290C2*)(S19290C10*)(S19290C13*), ABISELECT(3968,2952), "S19290C5");
    check_base_class_offset(lv, (S19290C2*)(S19290C10*)(S19290C13*), ABISELECT(3968,2952), "S19290C5");
    check_base_class_offset(lv, (S19922C8*)(S19290C10*)(S19290C13*), ABISELECT(7472,5580), "S19290C5");
    /*is_ambiguous_... S19290C10::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C10*)(S19290C13*), ABISELECT(4544,3376), "S19290C5");
    check_base_class_offset(lv, (S19290C10*)(S19290C13*), ABISELECT(3968,2952), "S19290C5");
    /*is_ambiguous_... S19290C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19290C13*), ABISELECT(4688,3484), "S19290C5");
    check_base_class_offset(lv, (S19290C13*), ABISELECT(3840,2852), "S19290C5");
    check_base_class_offset(lv, (S19922C12*), ABISELECT(4976,3716), "S19290C5");
    /*is_ambiguous_... S19290C5::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(6144,4568), "S19290C5");
    /*is_ambiguous_... S19290C5::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*), ABISELECT(7760,5808), "S19290C5");
    check_field_offset(lv, s19290c5f0, ABISELECT(6432,4796), "S19290C5.s19290c5f0");
    check_field_offset(lv, s19290c5f1, ABISELECT(6448,4800), "S19290C5.s19290c5f1");
    check_field_offset(lv, s19290c5f2, ABISELECT(6464,4812), "S19290C5.s19290c5f2");
    check_field_offset(lv, s19290c5f3, ABISELECT(6468,4816), "S19290C5.s19290c5f3");
    check_field_offset(lv, s19290c5f4, ABISELECT(6472,4820), "S19290C5.s19290c5f4");
    test_class_info(&lv, &cd_S19290C5);
    dp->~S19290C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C5(Test_S19290C5, "S19290C5", ABISELECT(7888,5908));

#else // __cplusplus

extern void _ZN8S19290C5C1Ev();
extern void _ZN8S19290C5D1Ev();
Name_Map name_map_S19290C5[] = {
  NSPAIR(_ZN8S19290C5C1Ev),
  NSPAIR(_ZN8S19290C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C6;
extern VTBL_ENTRY _ZTI8S19290C6[];
extern  VTBL_ENTRY _ZTV8S19290C6[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C10;
extern VTBL_ENTRY _ZTI9S19290C10[];
extern  VTBL_ENTRY _ZTV9S19290C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C13;
extern VTBL_ENTRY _ZTI9S19290C13[];
extern  VTBL_ENTRY _ZTV9S19290C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
static Base_Class bases_S19290C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19290C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19290C3,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19290C7,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19290C3,    ABISELECT(3840,2852), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19290C3,    ABISELECT(6480,4828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C2,    ABISELECT(6480,4828), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19290C3,    ABISELECT(7056,5252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C7,    ABISELECT(7056,5252), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19290C3,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19290C2,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7472,5580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C3,    ABISELECT(4544,3376), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19290C10,    ABISELECT(3968,2952), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(4688,3484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C13,    ABISELECT(3840,2852), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C12,    ABISELECT(4976,3716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(6144,4568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19290C3,    ABISELECT(7760,5808), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19290C5[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C62v4Ev();
extern void _ZN8S19290C62v5Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
extern void _ZN8S19290C32v2Ev();
static  VTBL_ENTRY vtc_S19290C5[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v5Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  ABISELECT(-4544,-3376),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S19290C5[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C13__8S19290C5[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C109S19290C13__8S19290C5[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__9S19290C109S19290C13__8S19290C5[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C2__9S19290C13__8S19290C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__9S19290C13__8S19290C5[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C10__9S19290C13__8S19290C5[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
static  VTT_ENTRY vtt_S19290C5[] = {
  {&(_ZTV8S19290C5[6]),  6,51},
  {&(_tg__ZTV9S19290C13__8S19290C5[5]),  5,7},
  {&(_tg__ZTV9S19290C109S19290C13__8S19290C5[4]),  4,8},
  {&(_tg__ZTV8S19290C7__9S19290C109S19290C13__8S19290C5[4]),  4,6},
  {&(_tg__ZTV8S19290C2__9S19290C13__8S19290C5[6]),  6,10},
  {&(_tg__ZTV8S19290C7__9S19290C13__8S19290C5[4]),  4,6},
  {&(_tg__ZTV9S19290C10__9S19290C13__8S19290C5[4]),  4,8},
  {&(_ZTV8S19290C5[18]),  18,51},
  {&(_ZTV8S19290C5[37]),  37,51},
  {&(_ZTV8S19290C5[45]),  45,51},
  {&(_ZTV8S19290C5[24]),  24,51},
  {&(_ZTV8S19290C5[50]),  50,51},
};
extern VTBL_ENTRY _ZTI8S19290C5[];
extern  VTBL_ENTRY _ZTV8S19290C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19290C5[];
Class_Descriptor cd_S19290C5 = {  "S19290C5", // class name
  bases_S19290C5, 20,
  &(vtc_S19290C5[0]), // expected_vtbl_contents
  &(vtt_S19290C5[0]), // expected_vtt_contents
  ABISELECT(7888,5908), // object size
  NSPAIRA(_ZTI8S19290C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19290C5),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19290C5),12, //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  S19290C4  : virtual S19290C5 , virtual S19922C12 {
  ::S19290C10 s19290c4f0;
  int s19290c4f1;
  void *s19290c4f2;
  int s19290c4f3:32;
  int s19290c4f4;
  ::S19922C14 s19290c4f5;
  char  :0;
  void *s19290c4f7;
  long double s19290c4f8;
  virtual  ~S19290C4(); // _ZN8S19290C4D2Ev
  virtual void  v10(); // _ZN8S19290C43v10Ev
  S19290C4(); // tgen
};
//SIG(-1 S19290C4) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] FL:7 Fi FD FL} BC5{ BC4 v3 FC4 FC4 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC7{ m Fc FU6 FC8{ v10 FL[8] Fc[4] FL:7 Fi FD FL} FL FU6[3] Fc} v4 v5 FU6 Fc Fc FC9{ BC10{ BC4 v6 v7 v8 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC7 BC4 VBC5 Fl Fl} FC11{ v17 FD Fp FD[8] Fp[9] FC12{ m FD Fp[10] FD Fi:0 Fi FD FC13{ BC8 v16 FC8 FC8 FU6} Fc:8 Fl FD FC14{ BC8 v13 v14 v15 FC8 Fi FC8 Fi Fc[6] Fc:4 Fp FC8 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC15{ BC4 VBC10 VBC5 BC9 BC7 v9 Fi} BC12 BC7 VBC4 Fp FD Fi Fi Fc[7]} VBC12 vd v1 FC9 Fi Fp Fi:32 Fi FC16{ VBC7 VBC17{ BC14 VBC7 BC8 VBC13 Fl Fl} vd v11 v12 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD}


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

static void Test_S19290C4()
{
  extern Class_Descriptor cd_S19290C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,2263)];
    init_test(&cd_S19290C4, buf);
    S19290C4 *dp, &lv = *(dp=new (buf) S19290C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,9048), "sizeof(S19290C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C4)");
    /*is_ambiguous_... S19290C6::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C6*)(S19290C5*), ABISELECT(3024,2288), "S19290C4");
    check_base_class_offset(lv, (S19290C3*)(S19290C7*)(S19290C6*)(S19290C5*), ABISELECT(3152,2388), "S19290C4");
    check_base_class_offset(lv, (S19290C7*)(S19290C6*)(S19290C5*), ABISELECT(3152,2388), "S19290C4");
    check_base_class_offset(lv, (S19922C8*)(S19290C6*)(S19290C5*), ABISELECT(3568,2716), "S19290C4");
    check_base_class_offset(lv, (S19290C6*)(S19290C5*), ABISELECT(3024,2288), "S19290C4");
    /*is_ambiguous_... S19290C13::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C13*)(S19290C5*), ABISELECT(6864,5140), "S19290C4");
    /*is_ambiguous_... S19290C4::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C2*), ABISELECT(9504,7116), "S19290C4");
    /*is_ambiguous_... S19290C13::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C2*)(S19290C13*)(S19290C5*), ABISELECT(9504,7116), "S19290C4");
    /*is_ambiguous_... S19290C4::S19290C7 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C7*), ABISELECT(10080,7540), "S19290C4");
    check_base_class_offset(lv, (S19290C7*)(S19290C13*)(S19290C5*), ABISELECT(10080,7540), "S19290C4");
    check_base_class_offset(lv, (S19290C7*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(10080,7540), "S19290C4");
    check_base_class_offset(lv, (S19290C3*)(S19290C2*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(6992,5240), "S19290C4");
    check_base_class_offset(lv, (S19290C2*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(6992,5240), "S19290C4");
    check_base_class_offset(lv, (S19922C8*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(10496,7868), "S19290C4");
    /*is_ambiguous_... S19290C10::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(7568,5664), "S19290C4");
    check_base_class_offset(lv, (S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(6992,5240), "S19290C4");
    /*is_ambiguous_... S19290C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19290C13*)(S19290C5*), ABISELECT(7712,5772), "S19290C4");
    check_base_class_offset(lv, (S19290C13*)(S19290C5*), ABISELECT(6864,5140), "S19290C4");
    check_base_class_offset(lv, (S19922C12*)(S19290C5*), ABISELECT(8000,6004), "S19290C4");
    /*is_ambiguous_... S19290C5::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19290C5*), ABISELECT(9168,6856), "S19290C4");
    /*is_ambiguous_... S19290C5::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C5*), ABISELECT(10784,8096), "S19290C4");
    check_base_class_offset(lv, (S19290C5*), ABISELECT(3024,2288), "S19290C4");
    /*is_ambiguous_... S19290C4::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*), ABISELECT(10912,8196), "S19290C4");
    check_field_offset(lv, s19290c4f0, ABISELECT(16,4), "S19290C4.s19290c4f0");
    check_field_offset(lv, s19290c4f1, ABISELECT(1440,1092), "S19290C4.s19290c4f1");
    check_field_offset(lv, s19290c4f2, ABISELECT(1448,1096), "S19290C4.s19290c4f2");
    set_bf_and_test(lv, s19290c4f3, ABISELECT(1456,1100), 0, 32, 1, "S19290C4");
    set_bf_and_test(lv, s19290c4f3, ABISELECT(1456,1100), 0, 32, hide_sll(1LL<<31), "S19290C4");
    check_field_offset(lv, s19290c4f4, ABISELECT(1460,1104), "S19290C4.s19290c4f4");
    check_field_offset(lv, s19290c4f5, ABISELECT(1472,1108), "S19290C4.s19290c4f5");
    check_field_offset(lv, s19290c4f7, ABISELECT(2992,2272), "S19290C4.s19290c4f7");
    check_field_offset(lv, s19290c4f8, ABISELECT(3008,2276), "S19290C4.s19290c4f8");
    test_class_info(&lv, &cd_S19290C4);
    dp->~S19290C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C4(Test_S19290C4, "S19290C4", ABISELECT(12080,9048));

#else // __cplusplus

extern void _ZN8S19290C4C1Ev();
extern void _ZN8S19290C4D2Ev();
Name_Map name_map_S19290C4[] = {
  NSPAIR(_ZN8S19290C4C1Ev),
  NSPAIR(_ZN8S19290C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C6;
extern VTBL_ENTRY _ZTI8S19290C6[];
extern  VTBL_ENTRY _ZTV8S19290C6[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C10;
extern VTBL_ENTRY _ZTI9S19290C10[];
extern  VTBL_ENTRY _ZTV9S19290C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C13;
extern VTBL_ENTRY _ZTI9S19290C13[];
extern  VTBL_ENTRY _ZTV9S19290C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C5;
extern VTBL_ENTRY _ZTI8S19290C5[];
extern  VTBL_ENTRY _ZTV8S19290C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19290C5[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
static Base_Class bases_S19290C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19290C3,    ABISELECT(3024,2288), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19290C3,    ABISELECT(3152,2388), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19290C7,    ABISELECT(3152,2388), //bcp->offset
    28, //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(3568,2716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19290C6,    ABISELECT(3024,2288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19290C3,    ABISELECT(6864,5140), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19290C3,    ABISELECT(9504,7116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C2,    ABISELECT(9504,7116), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19290C3,    ABISELECT(10080,7540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C7,    ABISELECT(10080,7540), //bcp->offset
    60, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19290C3,    ABISELECT(6992,5240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19290C2,    ABISELECT(6992,5240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(10496,7868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C3,    ABISELECT(7568,5664), //bcp->offset
    47, //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19290C10,    ABISELECT(6992,5240), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7712,5772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C13,    ABISELECT(6864,5140), //bcp->offset
    32, //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(8000,6004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(9168,6856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C3,    ABISELECT(10784,8096), //bcp->offset
    66, //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_S19290C5,    ABISELECT(3024,2288), //bcp->offset
    11, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C12,    ABISELECT(10912,8196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19290C4[];
extern void _ZN8S19290C4D1Ev();
extern void _ZN8S19290C4D0Ev();
extern void _ZN8S19290C43v10Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C62v4Ev();
extern void _ZN8S19290C62v5Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
extern void _ZN8S19290C32v2Ev();
static  VTBL_ENTRY vtc_S19290C4[] = {
  ABISELECT(10912,8196),
  ABISELECT(10784,8096),
  ABISELECT(10496,7868),
  ABISELECT(10080,7540),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19290C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19290C43v10Ev,
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  ABISELECT(-3024,-2288),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v5Ev,
  ABISELECT(-3152,-2388),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-6864,-5140),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-6992,-5240),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  ABISELECT(-7568,-5664),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7116),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  0,
  0,
  ABISELECT(-10080,-7540),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
  0,
  ABISELECT(-10784,-8096),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S19290C4[];
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C62v4Ev();
extern void _ZN8S19290C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C5__8S19290C4[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v5Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C138S19290C5__8S19290C4[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C109S19290C138S19290C5__8S19290C4[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__9S19290C109S19290C138S19290C5__8S19290C4[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C2__9S19290C138S19290C5__8S19290C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__9S19290C138S19290C5__8S19290C4[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C10__9S19290C138S19290C5__8S19290C4[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C13__8S19290C5__8S19290C4[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C2__8S19290C5__8S19290C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__A1__8S19290C5__8S19290C4[] = {
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C109S19290C13__8S19290C5__8S19290C4[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C3__A7__8S19290C5__8S19290C4[] = {
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
};
static  VTT_ENTRY vtt_S19290C4[] = {
  {&(_ZTV8S19290C4[8]),  8,70},
  {&(_ZTV8S19290C4[25]),  25,70},
  {&(_ZTV8S19290C4[30]),  30,70},
  {&(_ZTV8S19290C4[37]),  37,70},
  {&(_ZTV8S19290C4[56]),  56,70},
  {&(_ZTV8S19290C4[64]),  64,70},
  {&(_ZTV8S19290C4[43]),  43,70},
  {&(_ZTV8S19290C4[49]),  49,70},
  {&(_ZTV8S19290C4[69]),  69,70},
  {&(_tg__ZTV8S19290C5__8S19290C4[6]),  6,9},
  {&(_tg__ZTV9S19290C138S19290C5__8S19290C4[5]),  5,7},
  {&(_tg__ZTV9S19290C109S19290C138S19290C5__8S19290C4[4]),  4,8},
  {&(_tg__ZTV8S19290C7__9S19290C109S19290C138S19290C5__8S19290C4[4]),  4,6},
  {&(_tg__ZTV8S19290C2__9S19290C138S19290C5__8S19290C4[6]),  6,10},
  {&(_tg__ZTV8S19290C7__9S19290C138S19290C5__8S19290C4[4]),  4,6},
  {&(_tg__ZTV9S19290C10__9S19290C138S19290C5__8S19290C4[4]),  4,8},
  {&(_tg__ZTV9S19290C13__8S19290C5__8S19290C4[5]),  5,7},
  {&(_tg__ZTV8S19290C2__8S19290C5__8S19290C4[6]),  6,10},
  {&(_tg__ZTV8S19290C7__A1__8S19290C5__8S19290C4[4]),  4,6},
  {&(_tg__ZTV9S19290C109S19290C13__8S19290C5__8S19290C4[4]),  4,8},
  {&(_tg__ZTV8S19290C3__A7__8S19290C5__8S19290C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19290C4[];
extern  VTBL_ENTRY _ZTV8S19290C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19290C4[];
Class_Descriptor cd_S19290C4 = {  "S19290C4", // class name
  bases_S19290C4, 22,
  &(vtc_S19290C4[0]), // expected_vtbl_contents
  &(vtt_S19290C4[0]), // expected_vtt_contents
  ABISELECT(12080,9048), // object size
  NSPAIRA(_ZTI8S19290C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19290C4),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19290C4),21, //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  S19290C15  {
  char s19290c15f0;
  void *s19290c15f1;
  void *s19290c15f2;
  void *s19290c15f3;
  int s19290c15f4;
  void *s19290c15f5;
  int s19290c15f6;
  virtual  ~S19290C15(); // _ZN9S19290C15D1Ev
  virtual void  v13(); // _ZN9S19290C153v13Ev
  S19290C15(); // tgen
};
//SIG(-1 S19290C15) C1{ vd v1 Fc Fp[3] Fi Fp Fi}


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

static void Test_S19290C15()
{
  extern Class_Descriptor cd_S19290C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19290C15, buf);
    S19290C15 *dp, &lv = *(dp=new (buf) S19290C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19290C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19290C15)");
    check_field_offset(lv, s19290c15f0, ABISELECT(8,4), "S19290C15.s19290c15f0");
    check_field_offset(lv, s19290c15f1, ABISELECT(16,8), "S19290C15.s19290c15f1");
    check_field_offset(lv, s19290c15f2, ABISELECT(24,12), "S19290C15.s19290c15f2");
    check_field_offset(lv, s19290c15f3, ABISELECT(32,16), "S19290C15.s19290c15f3");
    check_field_offset(lv, s19290c15f4, ABISELECT(40,20), "S19290C15.s19290c15f4");
    check_field_offset(lv, s19290c15f5, ABISELECT(48,24), "S19290C15.s19290c15f5");
    check_field_offset(lv, s19290c15f6, ABISELECT(56,28), "S19290C15.s19290c15f6");
    test_class_info(&lv, &cd_S19290C15);
    dp->~S19290C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C15(Test_S19290C15, "S19290C15", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19290C15C1Ev();
extern void _ZN9S19290C15D1Ev();
Name_Map name_map_S19290C15[] = {
  NSPAIR(_ZN9S19290C15C1Ev),
  NSPAIR(_ZN9S19290C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19290C15[];
extern void _ZN9S19290C15D1Ev();
extern void _ZN9S19290C15D0Ev();
extern void _ZN9S19290C153v13Ev();
static  VTBL_ENTRY vtc_S19290C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C15[0]),
  (VTBL_ENTRY)&_ZN9S19290C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19290C15D0Ev,
  (VTBL_ENTRY)&_ZN9S19290C153v13Ev,
};
extern VTBL_ENTRY _ZTI9S19290C15[];
extern  VTBL_ENTRY _ZTV9S19290C15[];
Class_Descriptor cd_S19290C15 = {  "S19290C15", // class name
  0,0,//no base classes
  &(vtc_S19290C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19290C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19290C15),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  S19290C1  : virtual S19290C2 , S19290C4 {
  long double s19290c1f0;
  char s19290c1f1;
  ::S19290C15 s19290c1f2;
  int s19290c1f3[9];
  char s19290c1f4[9];
  long s19290c1f5;
  virtual  ~S19290C1(); // _ZN8S19290C1D2Ev
  virtual void  v1(); // _ZN8S19290C12v1Ev
  S19290C1(); // tgen
};
//SIG(1 S19290C1) C1{ VBC2{ BC3{ v2 FL[8] Fc[4] FL:7 Fi FD FL} v3 v4 v5 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} BC4{ VBC5{ BC6{ BC3 BC7{ BC3 v6 FC3 FC3 FU8{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC9{ m Fc FU8 FC10{ v11 FL[8] Fc[4] FL:7 Fi FD FL} FL FU8[3] Fc} v7 v8 FU8 Fc Fc FC11{ BC2 VBC9 BC3 VBC7 Fl Fl} FC12{ v19 FD Fp FD[8] Fp[9] FC13{ m FD Fp[10] FD Fi:0 Fi FD FC14{ BC10 v17 FC10 FC10 FU8} Fc:8 Fl FD FC15{ BC10 v14 v15 v16 FC10 Fi FC10 Fi Fc[6] Fc:4 Fp FC10 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC16{ BC3 VBC2 VBC7 BC11 BC9 v9 Fi} BC13 BC9 VBC3 Fp FD Fi Fi Fc[7]} VBC13 vd v10 FC11 Fi Fp Fi:32 Fi FC17{ VBC9 VBC18{ BC15 VBC9 BC10 VBC14 Fl Fl} vd v12 v13 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD} vd v1 FD Fc FC19{ vd v18 Fc Fp Fp Fp Fi Fp Fi} Fi[9] Fc[9] Fl}


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

static void Test_S19290C1()
{
  extern Class_Descriptor cd_S19290C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(765,2288)];
    init_test(&cd_S19290C1, buf);
    S19290C1 *dp, &lv = *(dp=new (buf) S19290C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12224,9148), "sizeof(S19290C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19290C1)");
    /*is_ambiguous_... S19290C1::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C2*), ABISELECT(3168,2388), "S19290C1");
    /*is_ambiguous_... S19290C1::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C2*), ABISELECT(3168,2388), "S19290C1");
    /*is_ambiguous_... S19290C13::S19290C2 */ AMB_check_base_class_offset(lv, (S19290C2*)(S19290C13*)(S19290C5*), ABISELECT(3168,2388), "S19290C1");
    /*is_ambiguous_... S19290C6::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C6*)(S19290C5*), ABISELECT(3744,2812), "S19290C1");
    check_base_class_offset(lv, (S19290C3*)(S19290C7*)(S19290C6*)(S19290C5*), ABISELECT(3872,2912), "S19290C1");
    check_base_class_offset(lv, (S19290C7*)(S19290C6*)(S19290C5*), ABISELECT(3872,2912), "S19290C1");
    check_base_class_offset(lv, (S19922C8*)(S19290C6*)(S19290C5*), ABISELECT(4288,3240), "S19290C1");
    check_base_class_offset(lv, (S19290C6*)(S19290C5*), ABISELECT(3744,2812), "S19290C1");
    /*is_ambiguous_... S19290C13::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C13*)(S19290C5*), ABISELECT(7584,5664), "S19290C1");
    /*is_ambiguous_... S19290C1::S19290C7 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C7*), ABISELECT(10224,7640), "S19290C1");
    check_base_class_offset(lv, (S19290C7*)(S19290C13*)(S19290C5*), ABISELECT(10224,7640), "S19290C1");
    check_base_class_offset(lv, (S19290C7*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(10224,7640), "S19290C1");
    check_base_class_offset(lv, (S19290C3*)(S19290C2*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(7712,5764), "S19290C1");
    check_base_class_offset(lv, (S19290C2*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(7712,5764), "S19290C1");
    check_base_class_offset(lv, (S19922C8*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(10640,7968), "S19290C1");
    /*is_ambiguous_... S19290C10::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(8288,6188), "S19290C1");
    check_base_class_offset(lv, (S19290C10*)(S19290C13*)(S19290C5*), ABISELECT(7712,5764), "S19290C1");
    /*is_ambiguous_... S19290C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19290C13*)(S19290C5*), ABISELECT(8432,6296), "S19290C1");
    check_base_class_offset(lv, (S19290C13*)(S19290C5*), ABISELECT(7584,5664), "S19290C1");
    check_base_class_offset(lv, (S19922C12*)(S19290C5*), ABISELECT(8720,6528), "S19290C1");
    /*is_ambiguous_... S19290C5::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19290C5*), ABISELECT(9888,7380), "S19290C1");
    /*is_ambiguous_... S19290C5::S19290C3 */ AMB_check_base_class_offset(lv, (S19290C3*)(S19290C5*), ABISELECT(10928,8196), "S19290C1");
    check_base_class_offset(lv, (S19290C5*)(S19290C4*), ABISELECT(3744,2812), "S19290C1");
    /*is_ambiguous_... S19290C4::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*)(S19290C4*), ABISELECT(11056,8296), "S19290C1");
    check_base_class_offset(lv, (S19290C4*), 0, "S19290C1");
    check_field_offset(lv, s19290c1f0, ABISELECT(3024,2288), "S19290C1.s19290c1f0");
    check_field_offset(lv, s19290c1f1, ABISELECT(3040,2300), "S19290C1.s19290c1f1");
    check_field_offset(lv, s19290c1f2, ABISELECT(3048,2304), "S19290C1.s19290c1f2");
    check_field_offset(lv, s19290c1f3, ABISELECT(3112,2336), "S19290C1.s19290c1f3");
    check_field_offset(lv, s19290c1f4, ABISELECT(3148,2372), "S19290C1.s19290c1f4");
    check_field_offset(lv, s19290c1f5, ABISELECT(3160,2384), "S19290C1.s19290c1f5");
    test_class_info(&lv, &cd_S19290C1);
    dp->~S19290C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19290C1(Test_S19290C1, "S19290C1", ABISELECT(12224,9148));

#else // __cplusplus

extern void _ZN8S19290C1C1Ev();
extern void _ZN8S19290C1D2Ev();
Name_Map name_map_S19290C1[] = {
  NSPAIR(_ZN8S19290C1C1Ev),
  NSPAIR(_ZN8S19290C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C6;
extern VTBL_ENTRY _ZTI8S19290C6[];
extern  VTBL_ENTRY _ZTV8S19290C6[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C7;
extern VTBL_ENTRY _ZTI8S19290C7[];
extern  VTBL_ENTRY _ZTV8S19290C7[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C2;
extern VTBL_ENTRY _ZTI8S19290C2[];
extern  VTBL_ENTRY _ZTV8S19290C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C10;
extern VTBL_ENTRY _ZTI9S19290C10[];
extern  VTBL_ENTRY _ZTV9S19290C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C13;
extern VTBL_ENTRY _ZTI9S19290C13[];
extern  VTBL_ENTRY _ZTV9S19290C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19290C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19290C3;
extern VTBL_ENTRY _ZTI8S19290C3[];
extern  VTBL_ENTRY _ZTV8S19290C3[];
extern Class_Descriptor cd_S19290C5;
extern VTBL_ENTRY _ZTI8S19290C5[];
extern  VTBL_ENTRY _ZTV8S19290C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19290C5[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19290C4;
extern VTBL_ENTRY _ZTI8S19290C4[];
extern  VTBL_ENTRY _ZTV8S19290C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19290C4[];
static Base_Class bases_S19290C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19290C3,    ABISELECT(3168,2388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19290C2,    ABISELECT(3168,2388), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19290C3,    ABISELECT(3744,2812), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19290C3,    ABISELECT(3872,2912), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19290C7,    ABISELECT(3872,2912), //bcp->offset
    39, //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
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(4288,3240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C6,    ABISELECT(3744,2812), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19290C3,    ABISELECT(7584,5664), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19290C3,    ABISELECT(10224,7640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C7,    ABISELECT(10224,7640), //bcp->offset
    61, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19290C3,    ABISELECT(7712,5764), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19290C2,    ABISELECT(7712,5764), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(10640,7968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C3,    ABISELECT(8288,6188), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19290C10,    ABISELECT(7712,5764), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(8432,6296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C13,    ABISELECT(7584,5664), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(8720,6528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(9888,7380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C3,    ABISELECT(10928,8196), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19290C5,    ABISELECT(3744,2812), //bcp->offset
    22, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19922C12,    ABISELECT(11056,8296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19290C4,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19290C1[];
extern void _ZN8S19290C1D1Ev();
extern void _ZN8S19290C1D0Ev();
extern void _ZN8S19290C43v10Ev();
extern void _ZN8S19290C12v1Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C62v4Ev();
extern void _ZN8S19290C62v5Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
extern void _ZN8S19290C32v2Ev();
static  VTBL_ENTRY vtc_S19290C1[] = {
  ABISELECT(11056,8296),
  ABISELECT(10928,8196),
  ABISELECT(10640,7968),
  ABISELECT(10224,7640),
  ABISELECT(3168,2388),
  ABISELECT(3744,2812),
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19290C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19290C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19290C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-3168,-2388),
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7184,5384),
  ABISELECT(6896,5156),
  ABISELECT(6480,4828),
  ABISELECT(-576,-424),
  ABISELECT(-3744,-2812),
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v5Ev,
  ABISELECT(-3872,-2912),
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
  ABISELECT(3056,2304),
  ABISELECT(2640,1976),
  ABISELECT(-4416,-3276),
  ABISELECT(-7584,-5664),
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
  ABISELECT(2512,1876),
  ABISELECT(2928,2204),
  ABISELECT(-7712,-5764),
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
  ABISELECT(-8288,-6188),
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  0,
  0,
  ABISELECT(-10224,-7640),
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
  0,
  ABISELECT(-10928,-8196),
  (VTBL_ENTRY)&(_ZTI8S19290C1[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S19290C1[];
extern void _ZN8S19290C4D1Ev();
extern void _ZN8S19290C4D0Ev();
extern void _ZN8S19290C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C4__8S19290C1[] = {
  ABISELECT(11056,8296),
  ABISELECT(10928,8196),
  ABISELECT(10640,7968),
  ABISELECT(10224,7640),
  ABISELECT(3168,2388),
  ABISELECT(3744,2812),
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19290C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19290C43v10Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C62v4Ev();
extern void _ZN8S19290C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C5__8S19290C4__8S19290C1[] = {
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7184,5384),
  ABISELECT(6896,5156),
  ABISELECT(6480,4828),
  ABISELECT(-576,-424),
  ABISELECT(-3744,-2812),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v5Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C78S19290C68S19290C5__8S19290C4__8S19290C1[] = {
  ABISELECT(-3872,-2912),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C138S19290C5__8S19290C4__8S19290C1[] = {
  ABISELECT(3056,2304),
  ABISELECT(2640,1976),
  ABISELECT(-4416,-3276),
  ABISELECT(-7584,-5664),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C2__8S19290C4__8S19290C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-3168,-2388),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__A1__8S19290C4__8S19290C1[] = {
  0,
  0,
  ABISELECT(-10224,-7640),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C109S19290C138S19290C5__8S19290C4__8S19290C1[] = {
  ABISELECT(2512,1876),
  ABISELECT(2928,2204),
  ABISELECT(-7712,-5764),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C39S19290C109S19290C138S19290C5__A6__8S19290C4__8S19290C1[] = {
  ABISELECT(-8288,-6188),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
};
extern void _ZN8S19290C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C3__A7__8S19290C4__8S19290C1[] = {
  0,
  ABISELECT(-10928,-8196),
  (VTBL_ENTRY)&(_ZTI8S19290C4[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C62v4Ev();
extern void _ZN8S19290C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C5__8S19290C1[] = {
  ABISELECT(7184,5384),
  ABISELECT(6896,5156),
  ABISELECT(6480,4828),
  ABISELECT(-576,-424),
  0,
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19290C62v5Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C138S19290C5__8S19290C1[] = {
  ABISELECT(3056,2304),
  ABISELECT(2640,1976),
  ABISELECT(-4416,-3276),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C109S19290C138S19290C5__8S19290C1[] = {
  ABISELECT(2512,1876),
  ABISELECT(2928,2204),
  0,
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__9S19290C109S19290C138S19290C5__8S19290C1[] = {
  0,
  0,
  ABISELECT(-2512,-1876),
  (VTBL_ENTRY)&(_ZTI9S19290C10[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C2__9S19290C138S19290C5__8S19290C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4416,3276),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__9S19290C138S19290C5__8S19290C1[] = {
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C10__9S19290C138S19290C5__8S19290C1[] = {
  ABISELECT(2512,1876),
  ABISELECT(2928,2204),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19290C13[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN9S19290C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C13__8S19290C5__8S19290C1[] = {
  ABISELECT(3056,2304),
  ABISELECT(2640,1976),
  ABISELECT(-4416,-3276),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19290C132v9Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C2__8S19290C5__8S19290C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(576,424),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C7__A1__8S19290C5__8S19290C1[] = {
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C72v3Ev,
};
extern void _ZN8S19290C32v2Ev();
extern void _ZN8S19290C22v6Ev();
extern void _ZN8S19290C22v7Ev();
extern void _ZN8S19290C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19290C109S19290C13__8S19290C5__8S19290C1[] = {
  ABISELECT(2512,1876),
  ABISELECT(2928,2204),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19290C22v8Ev,
};
extern void _ZN8S19290C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19290C3__A7__8S19290C5__8S19290C1[] = {
  0,
  ABISELECT(-7184,-5384),
  (VTBL_ENTRY)&(_ZTI8S19290C5[0]),
  (VTBL_ENTRY)&_ZN8S19290C32v2Ev,
};
static  VTT_ENTRY vtt_S19290C1[] = {
  {&(_ZTV8S19290C1[8]),  8,71},
  {&(_tg__ZTV8S19290C4__8S19290C1[8]),  8,11},
  {&(_tg__ZTV8S19290C5__8S19290C4__8S19290C1[14]),  14,17},
  {&(_tg__ZTV8S19290C78S19290C68S19290C5__8S19290C4__8S19290C1[2]),  2,4},
  {&(_tg__ZTV9S19290C138S19290C5__8S19290C4__8S19290C1[5]),  5,7},
  {&(_tg__ZTV8S19290C2__8S19290C4__8S19290C1[6]),  6,10},
  {&(_tg__ZTV8S19290C7__A1__8S19290C4__8S19290C1[4]),  4,6},
  {&(_tg__ZTV9S19290C109S19290C138S19290C5__8S19290C4__8S19290C1[4]),  4,8},
  {&(_tg__ZTV8S19290C39S19290C109S19290C138S19290C5__A6__8S19290C4__8S19290C1[2]),  2,3},
  {&(_tg__ZTV8S19290C3__A7__8S19290C4__8S19290C1[3]),  3,4},
  {&(_ZTV8S19290C1[18]),  18,71},
  {&(_ZTV8S19290C1[36]),  36,71},
  {&(_ZTV8S19290C1[41]),  41,71},
  {&(_ZTV8S19290C1[48]),  48,71},
  {&(_ZTV8S19290C1[65]),  65,71},
  {&(_ZTV8S19290C1[54]),  54,71},
  {&(_ZTV8S19290C1[60]),  60,71},
  {&(_ZTV8S19290C1[70]),  70,71},
  {&(_tg__ZTV8S19290C5__8S19290C1[6]),  6,9},
  {&(_tg__ZTV9S19290C138S19290C5__8S19290C1[5]),  5,7},
  {&(_tg__ZTV9S19290C109S19290C138S19290C5__8S19290C1[4]),  4,8},
  {&(_tg__ZTV8S19290C7__9S19290C109S19290C138S19290C5__8S19290C1[4]),  4,6},
  {&(_tg__ZTV8S19290C2__9S19290C138S19290C5__8S19290C1[6]),  6,10},
  {&(_tg__ZTV8S19290C7__9S19290C138S19290C5__8S19290C1[4]),  4,6},
  {&(_tg__ZTV9S19290C10__9S19290C138S19290C5__8S19290C1[4]),  4,8},
  {&(_tg__ZTV9S19290C13__8S19290C5__8S19290C1[5]),  5,7},
  {&(_tg__ZTV8S19290C2__8S19290C5__8S19290C1[6]),  6,10},
  {&(_tg__ZTV8S19290C7__A1__8S19290C5__8S19290C1[4]),  4,6},
  {&(_tg__ZTV9S19290C109S19290C13__8S19290C5__8S19290C1[4]),  4,8},
  {&(_tg__ZTV8S19290C3__A7__8S19290C5__8S19290C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19290C1[];
extern  VTBL_ENTRY _ZTV8S19290C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19290C1[];
Class_Descriptor cd_S19290C1 = {  "S19290C1", // class name
  bases_S19290C1, 23,
  &(vtc_S19290C1[0]), // expected_vtbl_contents
  &(vtt_S19290C1[0]), // expected_vtt_contents
  ABISELECT(12224,9148), // object size
  NSPAIRA(_ZTI8S19290C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19290C1),71, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19290C1),30, //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  S19289C3  {
  __tsi64 s19289c3f0[8];
  char s19289c3f1[4];
  int s19289c3f2:7;
  int s19289c3f3;
  long double s19289c3f4;
  __tsi64 s19289c3f5;
  virtual void  v2(); // _ZN8S19289C32v2Ev
  ~S19289C3(); // tgen
  S19289C3(); // tgen
};
//SIG(-1 S19289C3) C1{ v1 FL[8] Fc[4] Fi:7 Fi FD FL}


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

static void Test_S19289C3()
{
  extern Class_Descriptor cd_S19289C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S19289C3, buf);
    S19289C3 *dp, &lv = *(dp=new (buf) S19289C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S19289C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C3)");
    check_field_offset(lv, s19289c3f0, ABISELECT(8,4), "S19289C3.s19289c3f0");
    check_field_offset(lv, s19289c3f1, ABISELECT(72,68), "S19289C3.s19289c3f1");
    set_bf_and_test(lv, s19289c3f2, ABISELECT(76,72), 0, 7, 1, "S19289C3");
    set_bf_and_test(lv, s19289c3f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S19289C3");
    check_field_offset(lv, s19289c3f3, ABISELECT(80,76), "S19289C3.s19289c3f3");
    check_field_offset(lv, s19289c3f4, ABISELECT(96,80), "S19289C3.s19289c3f4");
    check_field_offset(lv, s19289c3f5, ABISELECT(112,92), "S19289C3.s19289c3f5");
    test_class_info(&lv, &cd_S19289C3);
    dp->~S19289C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C3(Test_S19289C3, "S19289C3", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S19289C3C1Ev();
extern void _ZN8S19289C3D1Ev();
Name_Map name_map_S19289C3[] = {
  NSPAIR(_ZN8S19289C3C1Ev),
  NSPAIR(_ZN8S19289C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19289C3[];
extern void _ZN8S19289C32v2Ev();
static  VTBL_ENTRY vtc_S19289C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C3[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
Class_Descriptor cd_S19289C3 = {  "S19289C3", // class name
  0,0,//no base classes
  &(vtc_S19289C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S19289C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19289C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19289C2  : S19289C3 {
  ::S19289C3 s19289c2f0;
  int s19289c2f1;
  ::S19289C3 s19289c2f2;
  int s19289c2f3;
  char s19289c2f4[6];
  char s19289c2f5:4;
  void *s19289c2f6;
  ::S19289C3 s19289c2f7;
  int s19289c2f8;
  virtual void  v6(); // _ZN8S19289C22v6Ev
  virtual void  v7(); // _ZN8S19289C22v7Ev
  virtual void  v8(); // _ZN8S19289C22v8Ev
  ~S19289C2(); // tgen
  S19289C2(); // tgen
};
//SIG(-1 S19289C2) C1{ BC2{ v4 FL[8] Fc[4] Fi:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S19289C2 ::v6(){vfunc_called(this, "_ZN8S19289C22v6Ev");}
void  S19289C2 ::v7(){vfunc_called(this, "_ZN8S19289C22v7Ev");}
void  S19289C2 ::v8(){vfunc_called(this, "_ZN8S19289C22v8Ev");}
S19289C2 ::~S19289C2(){ note_dtor("S19289C2", this);} // tgen
S19289C2 ::S19289C2(){ note_ctor("S19289C2", this);} // tgen

static void Test_S19289C2()
{
  extern Class_Descriptor cd_S19289C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S19289C2, buf);
    S19289C2 *dp, &lv = *(dp=new (buf) S19289C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S19289C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C2)");
    check_base_class_offset(lv, (S19289C3*), 0, "S19289C2");
    check_field_offset(lv, s19289c2f0, ABISELECT(128,100), "S19289C2.s19289c2f0");
    check_field_offset(lv, s19289c2f1, ABISELECT(256,200), "S19289C2.s19289c2f1");
    check_field_offset(lv, s19289c2f2, ABISELECT(272,204), "S19289C2.s19289c2f2");
    check_field_offset(lv, s19289c2f3, ABISELECT(400,304), "S19289C2.s19289c2f3");
    check_field_offset(lv, s19289c2f4, ABISELECT(404,308), "S19289C2.s19289c2f4");
    set_bf_and_test(lv, s19289c2f5, ABISELECT(410,314), 0, 4, 1, "S19289C2");
    set_bf_and_test(lv, s19289c2f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S19289C2");
    check_field_offset(lv, s19289c2f6, ABISELECT(416,316), "S19289C2.s19289c2f6");
    check_field_offset(lv, s19289c2f7, ABISELECT(432,320), "S19289C2.s19289c2f7");
    check_field_offset(lv, s19289c2f8, ABISELECT(560,420), "S19289C2.s19289c2f8");
    test_class_info(&lv, &cd_S19289C2);
    dp->~S19289C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C2(Test_S19289C2, "S19289C2", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN8S19289C2C1Ev();
extern void _ZN8S19289C2D1Ev();
Name_Map name_map_S19289C2[] = {
  NSPAIR(_ZN8S19289C2C1Ev),
  NSPAIR(_ZN8S19289C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
static Base_Class bases_S19289C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19289C2[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY vtc_S19289C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C2[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
Class_Descriptor cd_S19289C2 = {  "S19289C2", // class name
  bases_S19289C2, 1,
  &(vtc_S19289C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI8S19289C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19289C2),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  S19289C7  : S19289C3 {
  ::S19289C3 s19289c7f0;
  ::S19289C3 s19289c7f1;
  ::S19921C7 s19289c7f2;
  virtual void  v3(); // _ZN8S19289C72v3Ev
  ~S19289C7(); // tgen
  S19289C7(); // tgen
};
//SIG(-1 S19289C7) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


void  S19289C7 ::v3(){vfunc_called(this, "_ZN8S19289C72v3Ev");}
S19289C7 ::~S19289C7(){ note_dtor("S19289C7", this);} // tgen
S19289C7 ::S19289C7(){ note_ctor("S19289C7", this);} // tgen

static void Test_S19289C7()
{
  extern Class_Descriptor cd_S19289C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S19289C7, buf);
    S19289C7 *dp, &lv = *(dp=new (buf) S19289C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S19289C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C7)");
    check_base_class_offset(lv, (S19289C3*), 0, "S19289C7");
    check_field_offset(lv, s19289c7f0, ABISELECT(128,100), "S19289C7.s19289c7f0");
    check_field_offset(lv, s19289c7f1, ABISELECT(256,200), "S19289C7.s19289c7f1");
    check_field_offset(lv, s19289c7f2, ABISELECT(384,300), "S19289C7.s19289c7f2");
    test_class_info(&lv, &cd_S19289C7);
    dp->~S19289C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C7(Test_S19289C7, "S19289C7", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S19289C7C1Ev();
extern void _ZN8S19289C7D1Ev();
Name_Map name_map_S19289C7[] = {
  NSPAIR(_ZN8S19289C7C1Ev),
  NSPAIR(_ZN8S19289C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
static Base_Class bases_S19289C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19289C7[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY vtc_S19289C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C7[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
Class_Descriptor cd_S19289C7 = {  "S19289C7", // class name
  bases_S19289C7, 1,
  &(vtc_S19289C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S19289C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19289C7),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  S19289C10  : S19289C2 , virtual S19921C8 , S19289C3 , virtual S19289C7 {
  long s19289c10f0;
  __tsi64 s19289c10f1;
  ~S19289C10(); // tgen
  S19289C10(); // tgen
};
//SIG(-1 S19289C10) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC6{ v6 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} BC3 VBC7{ BC3 v5 FC3 FC3 FU5} Fl FL}


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

static void Test_S19289C10()
{
  extern Class_Descriptor cd_S19289C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,274)];
    init_test(&cd_S19289C10, buf);
    S19289C10 *dp, &lv = *(dp=new (buf) S19289C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1092), "sizeof(S19289C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C10)");
    check_base_class_offset(lv, (S19289C3*)(S19289C2*), 0, "S19289C10");
    check_base_class_offset(lv, (S19289C2*), 0, "S19289C10");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(720,536), "S19289C10");
    /*is_ambiguous_... S19289C10::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*), ABISELECT(576,424), "S19289C10");
    check_base_class_offset(lv, (S19289C3*)(S19289C7*), ABISELECT(1008,764), "S19289C10");
    check_base_class_offset(lv, (S19289C7*), ABISELECT(1008,764), "S19289C10");
    check_field_offset(lv, s19289c10f0, ABISELECT(696,524), "S19289C10.s19289c10f0");
    check_field_offset(lv, s19289c10f1, ABISELECT(704,528), "S19289C10.s19289c10f1");
    test_class_info(&lv, &cd_S19289C10);
    dp->~S19289C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C10(Test_S19289C10, "S19289C10", ABISELECT(1424,1092));

#else // __cplusplus

extern void _ZN9S19289C10C1Ev();
extern void _ZN9S19289C10D1Ev();
Name_Map name_map_S19289C10[] = {
  NSPAIR(_ZN9S19289C10C1Ev),
  NSPAIR(_ZN9S19289C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
static Base_Class bases_S19289C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19289C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C8,    ABISELECT(720,536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19289C3,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19289C3,    ABISELECT(1008,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C7,    ABISELECT(1008,764), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19289C10[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY vtc_S19289C10[] = {
  ABISELECT(1008,764),
  ABISELECT(720,536),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  0,
  0,
  ABISELECT(-1008,-764),
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S19289C10[];
static  VTT_ENTRY vtt_S19289C10[] = {
  {&(_ZTV9S19289C10[4]),  4,17},
  {&(_ZTV9S19289C10[15]),  15,17},
};
extern VTBL_ENTRY _ZTI9S19289C10[];
extern  VTBL_ENTRY _ZTV9S19289C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C10[];
Class_Descriptor cd_S19289C10 = {  "S19289C10", // class name
  bases_S19289C10, 6,
  &(vtc_S19289C10[0]), // expected_vtbl_contents
  &(vtt_S19289C10[0]), // expected_vtt_contents
  ABISELECT(1424,1092), // object size
  NSPAIRA(_ZTI9S19289C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19289C10),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19289C10),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19289C6  : S19289C3 , S19289C7 , S19921C8 {
  ::S19921C7 s19289c6f0;
  char s19289c6f1;
  char s19289c6f2;
  ::S19289C10 s19289c6f3;
  ::S19921C11 s19289c6f4;
  int s19289c6f5;
  long s19289c6f6;
  virtual void  v4(); // _ZN8S19289C62v4Ev
  virtual void  v5(); // _ZN8S19289C62v5Ev
  ~S19289C6(); // tgen
  S19289C6(); // tgen
};
//SIG(-1 S19289C6) C1{ BC2{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC6{ v5 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC7{ BC8{ BC2 v6 v7 v8 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl FL} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC11{ BC6 v10 FC6 FC6 FU4} Fc:8 FL FD FC12{ BC6 v11 v12 v13 FC6 Fi FC6 Fi Fc[6] Fc:4 Fp FC6 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S19289C6 ::v4(){vfunc_called(this, "_ZN8S19289C62v4Ev");}
void  S19289C6 ::v5(){vfunc_called(this, "_ZN8S19289C62v5Ev");}
S19289C6 ::~S19289C6(){ note_dtor("S19289C6", this);} // tgen
S19289C6 ::S19289C6(){ note_ctor("S19289C6", this);} // tgen

static void Test_S19289C6()
{
  extern Class_Descriptor cd_S19289C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,716)];
    init_test(&cd_S19289C6, buf);
    S19289C6 *dp, &lv = *(dp=new (buf) S19289C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2860), "sizeof(S19289C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C6)");
    /*is_ambiguous_... S19289C6::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*), 0, "S19289C6");
    check_base_class_offset(lv, (S19289C3*)(S19289C7*), ABISELECT(128,100), "S19289C6");
    check_base_class_offset(lv, (S19289C7*), ABISELECT(128,100), "S19289C6");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(544,428), "S19289C6");
    check_field_offset(lv, s19289c6f0, ABISELECT(832,656), "S19289C6.s19289c6f0");
    check_field_offset(lv, s19289c6f1, ABISELECT(864,684), "S19289C6.s19289c6f1");
    check_field_offset(lv, s19289c6f2, ABISELECT(865,685), "S19289C6.s19289c6f2");
    check_field_offset(lv, s19289c6f3, ABISELECT(880,688), "S19289C6.s19289c6f3");
    check_field_offset(lv, s19289c6f4, ABISELECT(2304,1780), "S19289C6.s19289c6f4");
    check_field_offset(lv, s19289c6f5, ABISELECT(3824,2852), "S19289C6.s19289c6f5");
    check_field_offset(lv, s19289c6f6, ABISELECT(3832,2856), "S19289C6.s19289c6f6");
    test_class_info(&lv, &cd_S19289C6);
    dp->~S19289C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C6(Test_S19289C6, "S19289C6", ABISELECT(3840,2860));

#else // __cplusplus

extern void _ZN8S19289C6C1Ev();
extern void _ZN8S19289C6D1Ev();
Name_Map name_map_S19289C6[] = {
  NSPAIR(_ZN8S19289C6C1Ev),
  NSPAIR(_ZN8S19289C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S19289C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19289C3,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19289C7,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19289C6[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C62v4Ev();
extern void _ZN8S19289C62v5Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY vtc_S19289C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C6[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v5Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19289C6[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern VTBL_ENTRY _ZTI8S19289C6[];
extern  VTBL_ENTRY _ZTV8S19289C6[];
Class_Descriptor cd_S19289C6 = {  "S19289C6", // class name
  bases_S19289C6, 4,
  &(vtc_S19289C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2860), // object size
  NSPAIRA(_ZTI8S19289C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19289C6),9, //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  S19289C13  : S19289C3 , virtual S19289C2 , virtual S19289C7 , S19289C10 , S19921C8 {
  int s19289c13f0;
  virtual void  v9(); // _ZN9S19289C132v9Ev
  ~S19289C13(); // tgen
  S19289C13(); // tgen
};
//SIG(-1 S19289C13) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC8{ v7 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} BC2 VBC4 Fl FL} BC7 v1 Fi}


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

static void Test_S19289C13()
{
  extern Class_Descriptor cd_S19289C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,463)];
    init_test(&cd_S19289C13, buf);
    S19289C13 *dp, &lv = *(dp=new (buf) S19289C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1848), "sizeof(S19289C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C13)");
    /*is_ambiguous_... S19289C13::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*), 0, "S19289C13");
    /*is_ambiguous_... S19289C13::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C2*), ABISELECT(1136,868), "S19289C13");
    /*is_ambiguous_... S19289C13::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C2*), ABISELECT(1136,868), "S19289C13");
    check_base_class_offset(lv, (S19289C3*)(S19289C7*), ABISELECT(1712,1292), "S19289C13");
    check_base_class_offset(lv, (S19289C7*), ABISELECT(1712,1292), "S19289C13");
    check_base_class_offset(lv, (S19289C7*)(S19289C10*), ABISELECT(1712,1292), "S19289C13");
    check_base_class_offset(lv, (S19289C3*)(S19289C2*)(S19289C10*), ABISELECT(128,100), "S19289C13");
    check_base_class_offset(lv, (S19289C2*)(S19289C10*), ABISELECT(128,100), "S19289C13");
    check_base_class_offset(lv, (S19921C8*)(S19289C10*), ABISELECT(2128,1620), "S19289C13");
    /*is_ambiguous_... S19289C10::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C10*), ABISELECT(704,524), "S19289C13");
    check_base_class_offset(lv, (S19289C10*), ABISELECT(128,100), "S19289C13");
    /*is_ambiguous_... S19289C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(848,636), "S19289C13");
    check_field_offset(lv, s19289c13f0, ABISELECT(1132,864), "S19289C13.s19289c13f0");
    test_class_info(&lv, &cd_S19289C13);
    dp->~S19289C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C13(Test_S19289C13, "S19289C13", ABISELECT(2416,1848));

#else // __cplusplus

extern void _ZN9S19289C13C1Ev();
extern void _ZN9S19289C13D1Ev();
Name_Map name_map_S19289C13[] = {
  NSPAIR(_ZN9S19289C13C1Ev),
  NSPAIR(_ZN9S19289C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C10;
extern VTBL_ENTRY _ZTI9S19289C10[];
extern  VTBL_ENTRY _ZTV9S19289C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S19289C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C3,    ABISELECT(1136,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19289C2,    ABISELECT(1136,868), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19289C3,    ABISELECT(1712,1292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19289C7,    ABISELECT(1712,1292), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19289C3,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19289C2,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(2128,1620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C3,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19289C10,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(848,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19289C13[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY vtc_S19289C13[] = {
  ABISELECT(2128,1620),
  ABISELECT(1712,1292),
  ABISELECT(1136,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-868),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  0,
  0,
  ABISELECT(-1712,-1292),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S19289C13[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C10__9S19289C13[] = {
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__9S19289C10__9S19289C13[] = {
  0,
  0,
  ABISELECT(-1584,-1192),
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
static  VTT_ENTRY vtt_S19289C13[] = {
  {&(_ZTV9S19289C13[5]),  5,34},
  {&(_tg__ZTV9S19289C10__9S19289C13[4]),  4,8},
  {&(_tg__ZTV8S19289C7__9S19289C10__9S19289C13[4]),  4,6},
  {&(_ZTV9S19289C13[24]),  24,34},
  {&(_ZTV9S19289C13[32]),  32,34},
  {&(_ZTV9S19289C13[11]),  11,34},
};
extern VTBL_ENTRY _ZTI9S19289C13[];
extern  VTBL_ENTRY _ZTV9S19289C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C13[];
Class_Descriptor cd_S19289C13 = {  "S19289C13", // class name
  bases_S19289C13, 11,
  &(vtc_S19289C13[0]), // expected_vtbl_contents
  &(vtt_S19289C13[0]), // expected_vtt_contents
  ABISELECT(2416,1848), // object size
  NSPAIRA(_ZTI9S19289C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19289C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19289C13),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19289C5  : S19289C6 , S19289C13 , S19921C12 , S19921C8 , virtual S19289C3 {
  void *s19289c5f0;
  long double s19289c5f1;
  int s19289c5f2;
  int s19289c5f3;
  char s19289c5f4[7];
  ~S19289C5(); // tgen
  S19289C5(); // tgen
};
//SIG(-1 S19289C5) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC7{ v9 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC8{ BC9{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl FL} FC10{ v10 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC12{ BC7 v11 FC7 FC7 FU5} Fc:8 FL FD FC13{ BC7 v12 v13 v14 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC14{ BC3 VBC9 VBC4 BC8 BC6 v8 Fi} BC11 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S19289C5()
{
  extern Class_Descriptor cd_S19289C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1482)];
    init_test(&cd_S19289C5, buf);
    S19289C5 *dp, &lv = *(dp=new (buf) S19289C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5924), "sizeof(S19289C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C5)");
    /*is_ambiguous_... S19289C6::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C6*), 0, "S19289C5");
    check_base_class_offset(lv, (S19289C3*)(S19289C7*)(S19289C6*), ABISELECT(128,100), "S19289C5");
    check_base_class_offset(lv, (S19289C7*)(S19289C6*), ABISELECT(128,100), "S19289C5");
    check_base_class_offset(lv, (S19921C8*)(S19289C6*), ABISELECT(544,428), "S19289C5");
    check_base_class_offset(lv, (S19289C6*), 0, "S19289C5");
    /*is_ambiguous_... S19289C13::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C13*), ABISELECT(3840,2860), "S19289C5");
    /*is_ambiguous_... S19289C5::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C2*), ABISELECT(6480,4844), "S19289C5");
    /*is_ambiguous_... S19289C13::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C2*)(S19289C13*), ABISELECT(6480,4844), "S19289C5");
    /*is_ambiguous_... S19289C5::S19289C7 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C7*), ABISELECT(7056,5268), "S19289C5");
    check_base_class_offset(lv, (S19289C7*)(S19289C13*), ABISELECT(7056,5268), "S19289C5");
    check_base_class_offset(lv, (S19289C7*)(S19289C10*)(S19289C13*), ABISELECT(7056,5268), "S19289C5");
    check_base_class_offset(lv, (S19289C3*)(S19289C2*)(S19289C10*)(S19289C13*), ABISELECT(3968,2960), "S19289C5");
    check_base_class_offset(lv, (S19289C2*)(S19289C10*)(S19289C13*), ABISELECT(3968,2960), "S19289C5");
    check_base_class_offset(lv, (S19921C8*)(S19289C10*)(S19289C13*), ABISELECT(7472,5596), "S19289C5");
    /*is_ambiguous_... S19289C10::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C10*)(S19289C13*), ABISELECT(4544,3384), "S19289C5");
    check_base_class_offset(lv, (S19289C10*)(S19289C13*), ABISELECT(3968,2960), "S19289C5");
    /*is_ambiguous_... S19289C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19289C13*), ABISELECT(4688,3496), "S19289C5");
    check_base_class_offset(lv, (S19289C13*), ABISELECT(3840,2860), "S19289C5");
    check_base_class_offset(lv, (S19921C12*), ABISELECT(4976,3728), "S19289C5");
    /*is_ambiguous_... S19289C5::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(6144,4584), "S19289C5");
    /*is_ambiguous_... S19289C5::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*), ABISELECT(7760,5824), "S19289C5");
    check_field_offset(lv, s19289c5f0, ABISELECT(6432,4812), "S19289C5.s19289c5f0");
    check_field_offset(lv, s19289c5f1, ABISELECT(6448,4816), "S19289C5.s19289c5f1");
    check_field_offset(lv, s19289c5f2, ABISELECT(6464,4828), "S19289C5.s19289c5f2");
    check_field_offset(lv, s19289c5f3, ABISELECT(6468,4832), "S19289C5.s19289c5f3");
    check_field_offset(lv, s19289c5f4, ABISELECT(6472,4836), "S19289C5.s19289c5f4");
    test_class_info(&lv, &cd_S19289C5);
    dp->~S19289C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C5(Test_S19289C5, "S19289C5", ABISELECT(7888,5924));

#else // __cplusplus

extern void _ZN8S19289C5C1Ev();
extern void _ZN8S19289C5D1Ev();
Name_Map name_map_S19289C5[] = {
  NSPAIR(_ZN8S19289C5C1Ev),
  NSPAIR(_ZN8S19289C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C6;
extern VTBL_ENTRY _ZTI8S19289C6[];
extern  VTBL_ENTRY _ZTV8S19289C6[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C10;
extern VTBL_ENTRY _ZTI9S19289C10[];
extern  VTBL_ENTRY _ZTV9S19289C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C13;
extern VTBL_ENTRY _ZTI9S19289C13[];
extern  VTBL_ENTRY _ZTV9S19289C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
static Base_Class bases_S19289C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19289C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19289C3,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19289C7,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19289C3,    ABISELECT(3840,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19289C3,    ABISELECT(6480,4844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C2,    ABISELECT(6480,4844), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19289C3,    ABISELECT(7056,5268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C7,    ABISELECT(7056,5268), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19289C3,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19289C2,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7472,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C3,    ABISELECT(4544,3384), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19289C10,    ABISELECT(3968,2960), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(4688,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C13,    ABISELECT(3840,2860), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C12,    ABISELECT(4976,3728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(6144,4584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19289C3,    ABISELECT(7760,5824), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19289C5[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C62v4Ev();
extern void _ZN8S19289C62v5Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
extern void _ZN8S19289C32v2Ev();
static  VTBL_ENTRY vtc_S19289C5[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v5Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  ABISELECT(-4544,-3384),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S19289C5[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C13__8S19289C5[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C109S19289C13__8S19289C5[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__9S19289C109S19289C13__8S19289C5[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C2__9S19289C13__8S19289C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__9S19289C13__8S19289C5[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C10__9S19289C13__8S19289C5[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
static  VTT_ENTRY vtt_S19289C5[] = {
  {&(_ZTV8S19289C5[6]),  6,51},
  {&(_tg__ZTV9S19289C13__8S19289C5[5]),  5,7},
  {&(_tg__ZTV9S19289C109S19289C13__8S19289C5[4]),  4,8},
  {&(_tg__ZTV8S19289C7__9S19289C109S19289C13__8S19289C5[4]),  4,6},
  {&(_tg__ZTV8S19289C2__9S19289C13__8S19289C5[6]),  6,10},
  {&(_tg__ZTV8S19289C7__9S19289C13__8S19289C5[4]),  4,6},
  {&(_tg__ZTV9S19289C10__9S19289C13__8S19289C5[4]),  4,8},
  {&(_ZTV8S19289C5[18]),  18,51},
  {&(_ZTV8S19289C5[37]),  37,51},
  {&(_ZTV8S19289C5[45]),  45,51},
  {&(_ZTV8S19289C5[24]),  24,51},
  {&(_ZTV8S19289C5[50]),  50,51},
};
extern VTBL_ENTRY _ZTI8S19289C5[];
extern  VTBL_ENTRY _ZTV8S19289C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19289C5[];
Class_Descriptor cd_S19289C5 = {  "S19289C5", // class name
  bases_S19289C5, 20,
  &(vtc_S19289C5[0]), // expected_vtbl_contents
  &(vtt_S19289C5[0]), // expected_vtt_contents
  ABISELECT(7888,5924), // object size
  NSPAIRA(_ZTI8S19289C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19289C5),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19289C5),12, //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  S19289C4  : virtual S19289C5 , virtual S19921C12 {
  ::S19289C10 s19289c4f0;
  int s19289c4f1;
  void *s19289c4f2;
  int s19289c4f3:32;
  int s19289c4f4;
  ::S19921C14 s19289c4f5;
  char  :0;
  void *s19289c4f7;
  long double s19289c4f8;
  virtual  ~S19289C4(); // _ZN8S19289C4D2Ev
  virtual void  v10(); // _ZN8S19289C43v10Ev
  S19289C4(); // tgen
};
//SIG(-1 S19289C4) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} BC5{ BC4 v3 FC4 FC4 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC7{ m Fc FU6 FC8{ v10 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU6[3] Fc} v4 v5 FU6 Fc Fc FC9{ BC10{ BC4 v6 v7 v8 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC7 BC4 VBC5 Fl FL} FC11{ v17 FD Fp FD[8] Fp[9] FC12{ m FD Fp[10] FD Fi:0 Fi FD FC13{ BC8 v16 FC8 FC8 FU6} Fc:8 FL FD FC14{ BC8 v13 v14 v15 FC8 Fi FC8 Fi Fc[6] Fc:4 Fp FC8 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC15{ BC4 VBC10 VBC5 BC9 BC7 v9 Fi} BC12 BC7 VBC4 Fp FD Fi Fi Fc[7]} VBC12 vd v1 FC9 Fi Fp Fi:32 Fi FC16{ VBC7 VBC17{ BC14 VBC7 BC8 VBC13 Fl FL} vd v11 v12 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD}


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

static void Test_S19289C4()
{
  extern Class_Descriptor cd_S19289C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,2270)];
    init_test(&cd_S19289C4, buf);
    S19289C4 *dp, &lv = *(dp=new (buf) S19289C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,9076), "sizeof(S19289C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C4)");
    /*is_ambiguous_... S19289C6::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C6*)(S19289C5*), ABISELECT(3024,2296), "S19289C4");
    check_base_class_offset(lv, (S19289C3*)(S19289C7*)(S19289C6*)(S19289C5*), ABISELECT(3152,2396), "S19289C4");
    check_base_class_offset(lv, (S19289C7*)(S19289C6*)(S19289C5*), ABISELECT(3152,2396), "S19289C4");
    check_base_class_offset(lv, (S19921C8*)(S19289C6*)(S19289C5*), ABISELECT(3568,2724), "S19289C4");
    check_base_class_offset(lv, (S19289C6*)(S19289C5*), ABISELECT(3024,2296), "S19289C4");
    /*is_ambiguous_... S19289C13::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C13*)(S19289C5*), ABISELECT(6864,5156), "S19289C4");
    /*is_ambiguous_... S19289C4::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C2*), ABISELECT(9504,7140), "S19289C4");
    /*is_ambiguous_... S19289C13::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C2*)(S19289C13*)(S19289C5*), ABISELECT(9504,7140), "S19289C4");
    /*is_ambiguous_... S19289C4::S19289C7 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C7*), ABISELECT(10080,7564), "S19289C4");
    check_base_class_offset(lv, (S19289C7*)(S19289C13*)(S19289C5*), ABISELECT(10080,7564), "S19289C4");
    check_base_class_offset(lv, (S19289C7*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(10080,7564), "S19289C4");
    check_base_class_offset(lv, (S19289C3*)(S19289C2*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(6992,5256), "S19289C4");
    check_base_class_offset(lv, (S19289C2*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(6992,5256), "S19289C4");
    check_base_class_offset(lv, (S19921C8*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(10496,7892), "S19289C4");
    /*is_ambiguous_... S19289C10::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(7568,5680), "S19289C4");
    check_base_class_offset(lv, (S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(6992,5256), "S19289C4");
    /*is_ambiguous_... S19289C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19289C13*)(S19289C5*), ABISELECT(7712,5792), "S19289C4");
    check_base_class_offset(lv, (S19289C13*)(S19289C5*), ABISELECT(6864,5156), "S19289C4");
    check_base_class_offset(lv, (S19921C12*)(S19289C5*), ABISELECT(8000,6024), "S19289C4");
    /*is_ambiguous_... S19289C5::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19289C5*), ABISELECT(9168,6880), "S19289C4");
    /*is_ambiguous_... S19289C5::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C5*), ABISELECT(10784,8120), "S19289C4");
    check_base_class_offset(lv, (S19289C5*), ABISELECT(3024,2296), "S19289C4");
    /*is_ambiguous_... S19289C4::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*), ABISELECT(10912,8220), "S19289C4");
    check_field_offset(lv, s19289c4f0, ABISELECT(16,4), "S19289C4.s19289c4f0");
    check_field_offset(lv, s19289c4f1, ABISELECT(1440,1096), "S19289C4.s19289c4f1");
    check_field_offset(lv, s19289c4f2, ABISELECT(1448,1100), "S19289C4.s19289c4f2");
    set_bf_and_test(lv, s19289c4f3, ABISELECT(1456,1104), 0, 32, 1, "S19289C4");
    set_bf_and_test(lv, s19289c4f3, ABISELECT(1456,1104), 0, 32, hide_sll(1LL<<31), "S19289C4");
    check_field_offset(lv, s19289c4f4, ABISELECT(1460,1108), "S19289C4.s19289c4f4");
    check_field_offset(lv, s19289c4f5, ABISELECT(1472,1112), "S19289C4.s19289c4f5");
    check_field_offset(lv, s19289c4f7, ABISELECT(2992,2280), "S19289C4.s19289c4f7");
    check_field_offset(lv, s19289c4f8, ABISELECT(3008,2284), "S19289C4.s19289c4f8");
    test_class_info(&lv, &cd_S19289C4);
    dp->~S19289C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C4(Test_S19289C4, "S19289C4", ABISELECT(12080,9076));

#else // __cplusplus

extern void _ZN8S19289C4C1Ev();
extern void _ZN8S19289C4D2Ev();
Name_Map name_map_S19289C4[] = {
  NSPAIR(_ZN8S19289C4C1Ev),
  NSPAIR(_ZN8S19289C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C6;
extern VTBL_ENTRY _ZTI8S19289C6[];
extern  VTBL_ENTRY _ZTV8S19289C6[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C10;
extern VTBL_ENTRY _ZTI9S19289C10[];
extern  VTBL_ENTRY _ZTV9S19289C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C13;
extern VTBL_ENTRY _ZTI9S19289C13[];
extern  VTBL_ENTRY _ZTV9S19289C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C5;
extern VTBL_ENTRY _ZTI8S19289C5[];
extern  VTBL_ENTRY _ZTV8S19289C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19289C5[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
static Base_Class bases_S19289C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19289C3,    ABISELECT(3024,2296), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19289C3,    ABISELECT(3152,2396), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19289C7,    ABISELECT(3152,2396), //bcp->offset
    28, //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(3568,2724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C6,    ABISELECT(3024,2296), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19289C3,    ABISELECT(6864,5156), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19289C3,    ABISELECT(9504,7140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C2,    ABISELECT(9504,7140), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19289C3,    ABISELECT(10080,7564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C7,    ABISELECT(10080,7564), //bcp->offset
    60, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19289C3,    ABISELECT(6992,5256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19289C2,    ABISELECT(6992,5256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(10496,7892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C3,    ABISELECT(7568,5680), //bcp->offset
    47, //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19289C10,    ABISELECT(6992,5256), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7712,5792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C13,    ABISELECT(6864,5156), //bcp->offset
    32, //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(8000,6024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(9168,6880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C3,    ABISELECT(10784,8120), //bcp->offset
    66, //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_S19289C5,    ABISELECT(3024,2296), //bcp->offset
    11, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C12,    ABISELECT(10912,8220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19289C4[];
extern void _ZN8S19289C4D1Ev();
extern void _ZN8S19289C4D0Ev();
extern void _ZN8S19289C43v10Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C62v4Ev();
extern void _ZN8S19289C62v5Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
extern void _ZN8S19289C32v2Ev();
static  VTBL_ENTRY vtc_S19289C4[] = {
  ABISELECT(10912,8220),
  ABISELECT(10784,8120),
  ABISELECT(10496,7892),
  ABISELECT(10080,7564),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19289C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19289C43v10Ev,
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  ABISELECT(-3024,-2296),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v5Ev,
  ABISELECT(-3152,-2396),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-6864,-5156),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-6992,-5256),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  ABISELECT(-7568,-5680),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7140),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  0,
  0,
  ABISELECT(-10080,-7564),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
  0,
  ABISELECT(-10784,-8120),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S19289C4[];
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C62v4Ev();
extern void _ZN8S19289C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C5__8S19289C4[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v5Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C138S19289C5__8S19289C4[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C109S19289C138S19289C5__8S19289C4[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__9S19289C109S19289C138S19289C5__8S19289C4[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C2__9S19289C138S19289C5__8S19289C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__9S19289C138S19289C5__8S19289C4[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C10__9S19289C138S19289C5__8S19289C4[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C13__8S19289C5__8S19289C4[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C2__8S19289C5__8S19289C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__A1__8S19289C5__8S19289C4[] = {
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C109S19289C13__8S19289C5__8S19289C4[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C3__A7__8S19289C5__8S19289C4[] = {
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
};
static  VTT_ENTRY vtt_S19289C4[] = {
  {&(_ZTV8S19289C4[8]),  8,70},
  {&(_ZTV8S19289C4[25]),  25,70},
  {&(_ZTV8S19289C4[30]),  30,70},
  {&(_ZTV8S19289C4[37]),  37,70},
  {&(_ZTV8S19289C4[56]),  56,70},
  {&(_ZTV8S19289C4[64]),  64,70},
  {&(_ZTV8S19289C4[43]),  43,70},
  {&(_ZTV8S19289C4[49]),  49,70},
  {&(_ZTV8S19289C4[69]),  69,70},
  {&(_tg__ZTV8S19289C5__8S19289C4[6]),  6,9},
  {&(_tg__ZTV9S19289C138S19289C5__8S19289C4[5]),  5,7},
  {&(_tg__ZTV9S19289C109S19289C138S19289C5__8S19289C4[4]),  4,8},
  {&(_tg__ZTV8S19289C7__9S19289C109S19289C138S19289C5__8S19289C4[4]),  4,6},
  {&(_tg__ZTV8S19289C2__9S19289C138S19289C5__8S19289C4[6]),  6,10},
  {&(_tg__ZTV8S19289C7__9S19289C138S19289C5__8S19289C4[4]),  4,6},
  {&(_tg__ZTV9S19289C10__9S19289C138S19289C5__8S19289C4[4]),  4,8},
  {&(_tg__ZTV9S19289C13__8S19289C5__8S19289C4[5]),  5,7},
  {&(_tg__ZTV8S19289C2__8S19289C5__8S19289C4[6]),  6,10},
  {&(_tg__ZTV8S19289C7__A1__8S19289C5__8S19289C4[4]),  4,6},
  {&(_tg__ZTV9S19289C109S19289C13__8S19289C5__8S19289C4[4]),  4,8},
  {&(_tg__ZTV8S19289C3__A7__8S19289C5__8S19289C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19289C4[];
extern  VTBL_ENTRY _ZTV8S19289C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19289C4[];
Class_Descriptor cd_S19289C4 = {  "S19289C4", // class name
  bases_S19289C4, 22,
  &(vtc_S19289C4[0]), // expected_vtbl_contents
  &(vtt_S19289C4[0]), // expected_vtt_contents
  ABISELECT(12080,9076), // object size
  NSPAIRA(_ZTI8S19289C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19289C4),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19289C4),21, //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  S19289C1  : virtual S19289C2 , S19289C4 {
  long double s19289c1f0;
  char s19289c1f1;
  ::S19290C15 s19289c1f2;
  int s19289c1f3[9];
  char s19289c1f4[9];
  __tsi64 s19289c1f5;
  virtual  ~S19289C1(); // _ZN8S19289C1D2Ev
  virtual void  v1(); // _ZN8S19289C12v1Ev
  S19289C1(); // tgen
};
//SIG(1 S19289C1) C1{ VBC2{ BC3{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} v3 v4 v5 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} BC4{ VBC5{ BC6{ BC3 BC7{ BC3 v6 FC3 FC3 FU8{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC9{ m Fc FU8 FC10{ v11 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU8[3] Fc} v7 v8 FU8 Fc Fc FC11{ BC2 VBC9 BC3 VBC7 Fl FL} FC12{ v19 FD Fp FD[8] Fp[9] FC13{ m FD Fp[10] FD Fi:0 Fi FD FC14{ BC10 v17 FC10 FC10 FU8} Fc:8 FL FD FC15{ BC10 v14 v15 v16 FC10 Fi FC10 Fi Fc[6] Fc:4 Fp FC10 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC16{ BC3 VBC2 VBC7 BC11 BC9 v9 Fi} BC13 BC9 VBC3 Fp FD Fi Fi Fc[7]} VBC13 vd v10 FC11 Fi Fp Fi:32 Fi FC17{ VBC9 VBC18{ BC15 VBC9 BC10 VBC14 Fl FL} vd v12 v13 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD} vd v1 FD Fc FC19{ vd v18 Fc Fp Fp Fp Fi Fp Fi} Fi[9] Fc[9] FL}


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

static void Test_S19289C1()
{
  extern Class_Descriptor cd_S19289C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(765,2296)];
    init_test(&cd_S19289C1, buf);
    S19289C1 *dp, &lv = *(dp=new (buf) S19289C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12224,9180), "sizeof(S19289C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19289C1)");
    /*is_ambiguous_... S19289C1::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C2*), ABISELECT(3168,2400), "S19289C1");
    /*is_ambiguous_... S19289C1::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C2*), ABISELECT(3168,2400), "S19289C1");
    /*is_ambiguous_... S19289C13::S19289C2 */ AMB_check_base_class_offset(lv, (S19289C2*)(S19289C13*)(S19289C5*), ABISELECT(3168,2400), "S19289C1");
    /*is_ambiguous_... S19289C6::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C6*)(S19289C5*), ABISELECT(3744,2824), "S19289C1");
    check_base_class_offset(lv, (S19289C3*)(S19289C7*)(S19289C6*)(S19289C5*), ABISELECT(3872,2924), "S19289C1");
    check_base_class_offset(lv, (S19289C7*)(S19289C6*)(S19289C5*), ABISELECT(3872,2924), "S19289C1");
    check_base_class_offset(lv, (S19921C8*)(S19289C6*)(S19289C5*), ABISELECT(4288,3252), "S19289C1");
    check_base_class_offset(lv, (S19289C6*)(S19289C5*), ABISELECT(3744,2824), "S19289C1");
    /*is_ambiguous_... S19289C13::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C13*)(S19289C5*), ABISELECT(7584,5684), "S19289C1");
    /*is_ambiguous_... S19289C1::S19289C7 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C7*), ABISELECT(10224,7668), "S19289C1");
    check_base_class_offset(lv, (S19289C7*)(S19289C13*)(S19289C5*), ABISELECT(10224,7668), "S19289C1");
    check_base_class_offset(lv, (S19289C7*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(10224,7668), "S19289C1");
    check_base_class_offset(lv, (S19289C3*)(S19289C2*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(7712,5784), "S19289C1");
    check_base_class_offset(lv, (S19289C2*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(7712,5784), "S19289C1");
    check_base_class_offset(lv, (S19921C8*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(10640,7996), "S19289C1");
    /*is_ambiguous_... S19289C10::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(8288,6208), "S19289C1");
    check_base_class_offset(lv, (S19289C10*)(S19289C13*)(S19289C5*), ABISELECT(7712,5784), "S19289C1");
    /*is_ambiguous_... S19289C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19289C13*)(S19289C5*), ABISELECT(8432,6320), "S19289C1");
    check_base_class_offset(lv, (S19289C13*)(S19289C5*), ABISELECT(7584,5684), "S19289C1");
    check_base_class_offset(lv, (S19921C12*)(S19289C5*), ABISELECT(8720,6552), "S19289C1");
    /*is_ambiguous_... S19289C5::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19289C5*), ABISELECT(9888,7408), "S19289C1");
    /*is_ambiguous_... S19289C5::S19289C3 */ AMB_check_base_class_offset(lv, (S19289C3*)(S19289C5*), ABISELECT(10928,8224), "S19289C1");
    check_base_class_offset(lv, (S19289C5*)(S19289C4*), ABISELECT(3744,2824), "S19289C1");
    /*is_ambiguous_... S19289C4::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*)(S19289C4*), ABISELECT(11056,8324), "S19289C1");
    check_base_class_offset(lv, (S19289C4*), 0, "S19289C1");
    check_field_offset(lv, s19289c1f0, ABISELECT(3024,2296), "S19289C1.s19289c1f0");
    check_field_offset(lv, s19289c1f1, ABISELECT(3040,2308), "S19289C1.s19289c1f1");
    check_field_offset(lv, s19289c1f2, ABISELECT(3048,2312), "S19289C1.s19289c1f2");
    check_field_offset(lv, s19289c1f3, ABISELECT(3112,2344), "S19289C1.s19289c1f3");
    check_field_offset(lv, s19289c1f4, ABISELECT(3148,2380), "S19289C1.s19289c1f4");
    check_field_offset(lv, s19289c1f5, ABISELECT(3160,2392), "S19289C1.s19289c1f5");
    test_class_info(&lv, &cd_S19289C1);
    dp->~S19289C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19289C1(Test_S19289C1, "S19289C1", ABISELECT(12224,9180));

#else // __cplusplus

extern void _ZN8S19289C1C1Ev();
extern void _ZN8S19289C1D2Ev();
Name_Map name_map_S19289C1[] = {
  NSPAIR(_ZN8S19289C1C1Ev),
  NSPAIR(_ZN8S19289C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C6;
extern VTBL_ENTRY _ZTI8S19289C6[];
extern  VTBL_ENTRY _ZTV8S19289C6[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C7;
extern VTBL_ENTRY _ZTI8S19289C7[];
extern  VTBL_ENTRY _ZTV8S19289C7[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C2;
extern VTBL_ENTRY _ZTI8S19289C2[];
extern  VTBL_ENTRY _ZTV8S19289C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C10;
extern VTBL_ENTRY _ZTI9S19289C10[];
extern  VTBL_ENTRY _ZTV9S19289C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C13;
extern VTBL_ENTRY _ZTI9S19289C13[];
extern  VTBL_ENTRY _ZTV9S19289C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19289C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19289C3;
extern VTBL_ENTRY _ZTI8S19289C3[];
extern  VTBL_ENTRY _ZTV8S19289C3[];
extern Class_Descriptor cd_S19289C5;
extern VTBL_ENTRY _ZTI8S19289C5[];
extern  VTBL_ENTRY _ZTV8S19289C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19289C5[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19289C4;
extern VTBL_ENTRY _ZTI8S19289C4[];
extern  VTBL_ENTRY _ZTV8S19289C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19289C4[];
static Base_Class bases_S19289C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19289C3,    ABISELECT(3168,2400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19289C2,    ABISELECT(3168,2400), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19289C3,    ABISELECT(3744,2824), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19289C3,    ABISELECT(3872,2924), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19289C7,    ABISELECT(3872,2924), //bcp->offset
    39, //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
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(4288,3252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C6,    ABISELECT(3744,2824), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19289C3,    ABISELECT(7584,5684), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19289C3,    ABISELECT(10224,7668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C7,    ABISELECT(10224,7668), //bcp->offset
    61, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19289C3,    ABISELECT(7712,5784), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19289C2,    ABISELECT(7712,5784), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(10640,7996), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C3,    ABISELECT(8288,6208), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19289C10,    ABISELECT(7712,5784), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(8432,6320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C13,    ABISELECT(7584,5684), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(8720,6552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(9888,7408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C3,    ABISELECT(10928,8224), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19289C5,    ABISELECT(3744,2824), //bcp->offset
    22, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19921C12,    ABISELECT(11056,8324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19289C4,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19289C1[];
extern void _ZN8S19289C1D1Ev();
extern void _ZN8S19289C1D0Ev();
extern void _ZN8S19289C43v10Ev();
extern void _ZN8S19289C12v1Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C62v4Ev();
extern void _ZN8S19289C62v5Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
extern void _ZN8S19289C32v2Ev();
static  VTBL_ENTRY vtc_S19289C1[] = {
  ABISELECT(11056,8324),
  ABISELECT(10928,8224),
  ABISELECT(10640,7996),
  ABISELECT(10224,7668),
  ABISELECT(3168,2400),
  ABISELECT(3744,2824),
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19289C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19289C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19289C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-3168,-2400),
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7184,5400),
  ABISELECT(6896,5172),
  ABISELECT(6480,4844),
  ABISELECT(-576,-424),
  ABISELECT(-3744,-2824),
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v5Ev,
  ABISELECT(-3872,-2924),
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
  ABISELECT(3056,2312),
  ABISELECT(2640,1984),
  ABISELECT(-4416,-3284),
  ABISELECT(-7584,-5684),
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
  ABISELECT(2512,1884),
  ABISELECT(2928,2212),
  ABISELECT(-7712,-5784),
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
  ABISELECT(-8288,-6208),
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  0,
  0,
  ABISELECT(-10224,-7668),
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
  0,
  ABISELECT(-10928,-8224),
  (VTBL_ENTRY)&(_ZTI8S19289C1[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S19289C1[];
extern void _ZN8S19289C4D1Ev();
extern void _ZN8S19289C4D0Ev();
extern void _ZN8S19289C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C4__8S19289C1[] = {
  ABISELECT(11056,8324),
  ABISELECT(10928,8224),
  ABISELECT(10640,7996),
  ABISELECT(10224,7668),
  ABISELECT(3168,2400),
  ABISELECT(3744,2824),
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19289C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19289C43v10Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C62v4Ev();
extern void _ZN8S19289C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C5__8S19289C4__8S19289C1[] = {
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7184,5400),
  ABISELECT(6896,5172),
  ABISELECT(6480,4844),
  ABISELECT(-576,-424),
  ABISELECT(-3744,-2824),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v5Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C78S19289C68S19289C5__8S19289C4__8S19289C1[] = {
  ABISELECT(-3872,-2924),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C138S19289C5__8S19289C4__8S19289C1[] = {
  ABISELECT(3056,2312),
  ABISELECT(2640,1984),
  ABISELECT(-4416,-3284),
  ABISELECT(-7584,-5684),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C2__8S19289C4__8S19289C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-3168,-2400),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__A1__8S19289C4__8S19289C1[] = {
  0,
  0,
  ABISELECT(-10224,-7668),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C109S19289C138S19289C5__8S19289C4__8S19289C1[] = {
  ABISELECT(2512,1884),
  ABISELECT(2928,2212),
  ABISELECT(-7712,-5784),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C39S19289C109S19289C138S19289C5__A6__8S19289C4__8S19289C1[] = {
  ABISELECT(-8288,-6208),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
};
extern void _ZN8S19289C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C3__A7__8S19289C4__8S19289C1[] = {
  0,
  ABISELECT(-10928,-8224),
  (VTBL_ENTRY)&(_ZTI8S19289C4[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C62v4Ev();
extern void _ZN8S19289C62v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C5__8S19289C1[] = {
  ABISELECT(7184,5400),
  ABISELECT(6896,5172),
  ABISELECT(6480,4844),
  ABISELECT(-576,-424),
  0,
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19289C62v5Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C138S19289C5__8S19289C1[] = {
  ABISELECT(3056,2312),
  ABISELECT(2640,1984),
  ABISELECT(-4416,-3284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C109S19289C138S19289C5__8S19289C1[] = {
  ABISELECT(2512,1884),
  ABISELECT(2928,2212),
  0,
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__9S19289C109S19289C138S19289C5__8S19289C1[] = {
  0,
  0,
  ABISELECT(-2512,-1884),
  (VTBL_ENTRY)&(_ZTI9S19289C10[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C2__9S19289C138S19289C5__8S19289C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(4416,3284),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__9S19289C138S19289C5__8S19289C1[] = {
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C10__9S19289C138S19289C5__8S19289C1[] = {
  ABISELECT(2512,1884),
  ABISELECT(2928,2212),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19289C13[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN9S19289C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C13__8S19289C5__8S19289C1[] = {
  ABISELECT(3056,2312),
  ABISELECT(2640,1984),
  ABISELECT(-4416,-3284),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN9S19289C132v9Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C2__8S19289C5__8S19289C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(576,424),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C7__A1__8S19289C5__8S19289C1[] = {
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C72v3Ev,
};
extern void _ZN8S19289C32v2Ev();
extern void _ZN8S19289C22v6Ev();
extern void _ZN8S19289C22v7Ev();
extern void _ZN8S19289C22v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19289C109S19289C13__8S19289C5__8S19289C1[] = {
  ABISELECT(2512,1884),
  ABISELECT(2928,2212),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19289C22v8Ev,
};
extern void _ZN8S19289C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19289C3__A7__8S19289C5__8S19289C1[] = {
  0,
  ABISELECT(-7184,-5400),
  (VTBL_ENTRY)&(_ZTI8S19289C5[0]),
  (VTBL_ENTRY)&_ZN8S19289C32v2Ev,
};
static  VTT_ENTRY vtt_S19289C1[] = {
  {&(_ZTV8S19289C1[8]),  8,71},
  {&(_tg__ZTV8S19289C4__8S19289C1[8]),  8,11},
  {&(_tg__ZTV8S19289C5__8S19289C4__8S19289C1[14]),  14,17},
  {&(_tg__ZTV8S19289C78S19289C68S19289C5__8S19289C4__8S19289C1[2]),  2,4},
  {&(_tg__ZTV9S19289C138S19289C5__8S19289C4__8S19289C1[5]),  5,7},
  {&(_tg__ZTV8S19289C2__8S19289C4__8S19289C1[6]),  6,10},
  {&(_tg__ZTV8S19289C7__A1__8S19289C4__8S19289C1[4]),  4,6},
  {&(_tg__ZTV9S19289C109S19289C138S19289C5__8S19289C4__8S19289C1[4]),  4,8},
  {&(_tg__ZTV8S19289C39S19289C109S19289C138S19289C5__A6__8S19289C4__8S19289C1[2]),  2,3},
  {&(_tg__ZTV8S19289C3__A7__8S19289C4__8S19289C1[3]),  3,4},
  {&(_ZTV8S19289C1[18]),  18,71},
  {&(_ZTV8S19289C1[36]),  36,71},
  {&(_ZTV8S19289C1[41]),  41,71},
  {&(_ZTV8S19289C1[48]),  48,71},
  {&(_ZTV8S19289C1[65]),  65,71},
  {&(_ZTV8S19289C1[54]),  54,71},
  {&(_ZTV8S19289C1[60]),  60,71},
  {&(_ZTV8S19289C1[70]),  70,71},
  {&(_tg__ZTV8S19289C5__8S19289C1[6]),  6,9},
  {&(_tg__ZTV9S19289C138S19289C5__8S19289C1[5]),  5,7},
  {&(_tg__ZTV9S19289C109S19289C138S19289C5__8S19289C1[4]),  4,8},
  {&(_tg__ZTV8S19289C7__9S19289C109S19289C138S19289C5__8S19289C1[4]),  4,6},
  {&(_tg__ZTV8S19289C2__9S19289C138S19289C5__8S19289C1[6]),  6,10},
  {&(_tg__ZTV8S19289C7__9S19289C138S19289C5__8S19289C1[4]),  4,6},
  {&(_tg__ZTV9S19289C10__9S19289C138S19289C5__8S19289C1[4]),  4,8},
  {&(_tg__ZTV9S19289C13__8S19289C5__8S19289C1[5]),  5,7},
  {&(_tg__ZTV8S19289C2__8S19289C5__8S19289C1[6]),  6,10},
  {&(_tg__ZTV8S19289C7__A1__8S19289C5__8S19289C1[4]),  4,6},
  {&(_tg__ZTV9S19289C109S19289C13__8S19289C5__8S19289C1[4]),  4,8},
  {&(_tg__ZTV8S19289C3__A7__8S19289C5__8S19289C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19289C1[];
extern  VTBL_ENTRY _ZTV8S19289C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19289C1[];
Class_Descriptor cd_S19289C1 = {  "S19289C1", // class name
  bases_S19289C1, 23,
  &(vtc_S19289C1[0]), // expected_vtbl_contents
  &(vtt_S19289C1[0]), // expected_vtt_contents
  ABISELECT(12224,9180), // object size
  NSPAIRA(_ZTI8S19289C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19289C1),71, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19289C1),30, //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  S19250C3  {
  __tsi64 s19250c3f0[8];
  char s19250c3f1[4];
  __tsi64 s19250c3f2:7;
  int s19250c3f3;
  long double s19250c3f4;
  __tsi64 s19250c3f5;
  virtual void  v1(); // _ZN8S19250C32v1Ev
  ~S19250C3(); // tgen
  S19250C3(); // tgen
};
//SIG(-1 S19250C3) C1{ v1 FL[8] Fc[4] FL:7 Fi FD FL}


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

static void Test_S19250C3()
{
  extern Class_Descriptor cd_S19250C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S19250C3, buf);
    S19250C3 *dp, &lv = *(dp=new (buf) S19250C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S19250C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C3)");
    check_field_offset(lv, s19250c3f0, ABISELECT(8,4), "S19250C3.s19250c3f0");
    check_field_offset(lv, s19250c3f1, ABISELECT(72,68), "S19250C3.s19250c3f1");
    set_bf_and_test(lv, s19250c3f2, ABISELECT(76,72), 0, 7, 1, "S19250C3");
    set_bf_and_test(lv, s19250c3f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S19250C3");
    check_field_offset(lv, s19250c3f3, ABISELECT(80,76), "S19250C3.s19250c3f3");
    check_field_offset(lv, s19250c3f4, ABISELECT(96,80), "S19250C3.s19250c3f4");
    check_field_offset(lv, s19250c3f5, ABISELECT(112,92), "S19250C3.s19250c3f5");
    test_class_info(&lv, &cd_S19250C3);
    dp->~S19250C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C3(Test_S19250C3, "S19250C3", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S19250C3C1Ev();
extern void _ZN8S19250C3D1Ev();
Name_Map name_map_S19250C3[] = {
  NSPAIR(_ZN8S19250C3C1Ev),
  NSPAIR(_ZN8S19250C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19250C3[];
extern void _ZN8S19250C32v1Ev();
static  VTBL_ENTRY vtc_S19250C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C3[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
Class_Descriptor cd_S19250C3 = {  "S19250C3", // class name
  0,0,//no base classes
  &(vtc_S19250C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S19250C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19250C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19250C2  : S19250C3 {
  ::S19250C3 s19250c2f0;
  ::S19250C3 s19250c2f1;
  ::S19921C7 s19250c2f2;
  virtual void  v2(); // _ZN8S19250C22v2Ev
  ~S19250C2(); // tgen
  S19250C2(); // tgen
};
//SIG(-1 S19250C2) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


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

static void Test_S19250C2()
{
  extern Class_Descriptor cd_S19250C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S19250C2, buf);
    S19250C2 *dp, &lv = *(dp=new (buf) S19250C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S19250C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C2)");
    check_base_class_offset(lv, (S19250C3*), 0, "S19250C2");
    check_field_offset(lv, s19250c2f0, ABISELECT(128,100), "S19250C2.s19250c2f0");
    check_field_offset(lv, s19250c2f1, ABISELECT(256,200), "S19250C2.s19250c2f1");
    check_field_offset(lv, s19250c2f2, ABISELECT(384,300), "S19250C2.s19250c2f2");
    test_class_info(&lv, &cd_S19250C2);
    dp->~S19250C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C2(Test_S19250C2, "S19250C2", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S19250C2C1Ev();
extern void _ZN8S19250C2D1Ev();
Name_Map name_map_S19250C2[] = {
  NSPAIR(_ZN8S19250C2C1Ev),
  NSPAIR(_ZN8S19250C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
static Base_Class bases_S19250C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19250C2[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY vtc_S19250C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C2[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
Class_Descriptor cd_S19250C2 = {  "S19250C2", // class name
  bases_S19250C2, 1,
  &(vtc_S19250C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S19250C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19250C2),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  S19250C10  : S19250C3 {
  ::S19250C3 s19250c10f0;
  int s19250c10f1;
  ::S19250C3 s19250c10f2;
  int s19250c10f3;
  char s19250c10f4[6];
  char s19250c10f5:4;
  void *s19250c10f6;
  ::S19250C3 s19250c10f7;
  int s19250c10f8;
  virtual void  v5(); // _ZN9S19250C102v5Ev
  virtual void  v6(); // _ZN9S19250C102v6Ev
  virtual void  v7(); // _ZN9S19250C102v7Ev
  ~S19250C10(); // tgen
  S19250C10(); // tgen
};
//SIG(-1 S19250C10) C1{ BC2{ v4 FL[8] Fc[4] FL:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S19250C10 ::v5(){vfunc_called(this, "_ZN9S19250C102v5Ev");}
void  S19250C10 ::v6(){vfunc_called(this, "_ZN9S19250C102v6Ev");}
void  S19250C10 ::v7(){vfunc_called(this, "_ZN9S19250C102v7Ev");}
S19250C10 ::~S19250C10(){ note_dtor("S19250C10", this);} // tgen
S19250C10 ::S19250C10(){ note_ctor("S19250C10", this);} // tgen

static void Test_S19250C10()
{
  extern Class_Descriptor cd_S19250C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S19250C10, buf);
    S19250C10 *dp, &lv = *(dp=new (buf) S19250C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S19250C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C10)");
    check_base_class_offset(lv, (S19250C3*), 0, "S19250C10");
    check_field_offset(lv, s19250c10f0, ABISELECT(128,100), "S19250C10.s19250c10f0");
    check_field_offset(lv, s19250c10f1, ABISELECT(256,200), "S19250C10.s19250c10f1");
    check_field_offset(lv, s19250c10f2, ABISELECT(272,204), "S19250C10.s19250c10f2");
    check_field_offset(lv, s19250c10f3, ABISELECT(400,304), "S19250C10.s19250c10f3");
    check_field_offset(lv, s19250c10f4, ABISELECT(404,308), "S19250C10.s19250c10f4");
    set_bf_and_test(lv, s19250c10f5, ABISELECT(410,314), 0, 4, 1, "S19250C10");
    set_bf_and_test(lv, s19250c10f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S19250C10");
    check_field_offset(lv, s19250c10f6, ABISELECT(416,316), "S19250C10.s19250c10f6");
    check_field_offset(lv, s19250c10f7, ABISELECT(432,320), "S19250C10.s19250c10f7");
    check_field_offset(lv, s19250c10f8, ABISELECT(560,420), "S19250C10.s19250c10f8");
    test_class_info(&lv, &cd_S19250C10);
    dp->~S19250C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C10(Test_S19250C10, "S19250C10", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN9S19250C10C1Ev();
extern void _ZN9S19250C10D1Ev();
Name_Map name_map_S19250C10[] = {
  NSPAIR(_ZN9S19250C10C1Ev),
  NSPAIR(_ZN9S19250C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
static Base_Class bases_S19250C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19250C10[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY vtc_S19250C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19250C10[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
Class_Descriptor cd_S19250C10 = {  "S19250C10", // class name
  bases_S19250C10, 1,
  &(vtc_S19250C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI9S19250C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19250C10),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  S19250C9  : S19250C10 , virtual S19922C8 , S19250C3 , virtual S19250C2 {
  long s19250c9f0;
  long s19250c9f1;
  ~S19250C9(); // tgen
  S19250C9(); // tgen
};
//SIG(-1 S19250C9) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC6{ v6 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} BC3 VBC7{ BC3 v5 FC3 FC3 FU5} Fl Fl}


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

static void Test_S19250C9()
{
  extern Class_Descriptor cd_S19250C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,273)];
    init_test(&cd_S19250C9, buf);
    S19250C9 *dp, &lv = *(dp=new (buf) S19250C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1088), "sizeof(S19250C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C9)");
    check_base_class_offset(lv, (S19250C3*)(S19250C10*), 0, "S19250C9");
    check_base_class_offset(lv, (S19250C10*), 0, "S19250C9");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(720,532), "S19250C9");
    /*is_ambiguous_... S19250C9::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*), ABISELECT(576,424), "S19250C9");
    check_base_class_offset(lv, (S19250C3*)(S19250C2*), ABISELECT(1008,760), "S19250C9");
    check_base_class_offset(lv, (S19250C2*), ABISELECT(1008,760), "S19250C9");
    check_field_offset(lv, s19250c9f0, ABISELECT(696,524), "S19250C9.s19250c9f0");
    check_field_offset(lv, s19250c9f1, ABISELECT(704,528), "S19250C9.s19250c9f1");
    test_class_info(&lv, &cd_S19250C9);
    dp->~S19250C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C9(Test_S19250C9, "S19250C9", ABISELECT(1424,1088));

#else // __cplusplus

extern void _ZN8S19250C9C1Ev();
extern void _ZN8S19250C9D1Ev();
Name_Map name_map_S19250C9[] = {
  NSPAIR(_ZN8S19250C9C1Ev),
  NSPAIR(_ZN8S19250C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
static Base_Class bases_S19250C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19250C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C8,    ABISELECT(720,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19250C3,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19250C3,    ABISELECT(1008,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C2,    ABISELECT(1008,760), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19250C9[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY vtc_S19250C9[] = {
  ABISELECT(1008,760),
  ABISELECT(720,532),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  0,
  0,
  ABISELECT(-1008,-760),
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S19250C9[];
static  VTT_ENTRY vtt_S19250C9[] = {
  {&(_ZTV8S19250C9[4]),  4,17},
  {&(_ZTV8S19250C9[15]),  15,17},
};
extern VTBL_ENTRY _ZTI8S19250C9[];
extern  VTBL_ENTRY _ZTV8S19250C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C9[];
Class_Descriptor cd_S19250C9 = {  "S19250C9", // class name
  bases_S19250C9, 6,
  &(vtc_S19250C9[0]), // expected_vtbl_contents
  &(vtt_S19250C9[0]), // expected_vtt_contents
  ABISELECT(1424,1088), // object size
  NSPAIRA(_ZTI8S19250C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19250C9),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19250C9),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19250C7  : S19250C3 , S19250C2 , S19922C8 {
  ::S19921C7 s19250c7f0;
  char s19250c7f1;
  char s19250c7f2;
  ::S19250C9 s19250c7f3;
  ::S19922C11 s19250c7f4;
  int s19250c7f5;
  long s19250c7f6;
  virtual void  v3(); // _ZN8S19250C72v3Ev
  virtual void  v4(); // _ZN8S19250C72v4Ev
  ~S19250C7(); // tgen
  S19250C7(); // tgen
};
//SIG(-1 S19250C7) C1{ BC2{ v3 FL[8] Fc[4] FL:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC6{ v5 FL[8] Fc[4] FL:7 Fi FD FL} FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC7{ BC8{ BC2 v6 v7 v8 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl Fl} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC11{ BC6 v10 FC6 FC6 FU4} Fc:8 Fl FD FC12{ BC6 v11 v12 v13 FC6 Fi FC6 Fi Fc[6] Fc:4 Fp FC6 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S19250C7 ::v3(){vfunc_called(this, "_ZN8S19250C72v3Ev");}
void  S19250C7 ::v4(){vfunc_called(this, "_ZN8S19250C72v4Ev");}
S19250C7 ::~S19250C7(){ note_dtor("S19250C7", this);} // tgen
S19250C7 ::S19250C7(){ note_ctor("S19250C7", this);} // tgen

static void Test_S19250C7()
{
  extern Class_Descriptor cd_S19250C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,714)];
    init_test(&cd_S19250C7, buf);
    S19250C7 *dp, &lv = *(dp=new (buf) S19250C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2852), "sizeof(S19250C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C7)");
    /*is_ambiguous_... S19250C7::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*), 0, "S19250C7");
    check_base_class_offset(lv, (S19250C3*)(S19250C2*), ABISELECT(128,100), "S19250C7");
    check_base_class_offset(lv, (S19250C2*), ABISELECT(128,100), "S19250C7");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(544,428), "S19250C7");
    check_field_offset(lv, s19250c7f0, ABISELECT(832,656), "S19250C7.s19250c7f0");
    check_field_offset(lv, s19250c7f1, ABISELECT(864,684), "S19250C7.s19250c7f1");
    check_field_offset(lv, s19250c7f2, ABISELECT(865,685), "S19250C7.s19250c7f2");
    check_field_offset(lv, s19250c7f3, ABISELECT(880,688), "S19250C7.s19250c7f3");
    check_field_offset(lv, s19250c7f4, ABISELECT(2304,1776), "S19250C7.s19250c7f4");
    check_field_offset(lv, s19250c7f5, ABISELECT(3824,2844), "S19250C7.s19250c7f5");
    check_field_offset(lv, s19250c7f6, ABISELECT(3832,2848), "S19250C7.s19250c7f6");
    test_class_info(&lv, &cd_S19250C7);
    dp->~S19250C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C7(Test_S19250C7, "S19250C7", ABISELECT(3840,2852));

#else // __cplusplus

extern void _ZN8S19250C7C1Ev();
extern void _ZN8S19250C7D1Ev();
Name_Map name_map_S19250C7[] = {
  NSPAIR(_ZN8S19250C7C1Ev),
  NSPAIR(_ZN8S19250C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S19250C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19250C3,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19250C2,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19250C7[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C72v3Ev();
extern void _ZN8S19250C72v4Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY vtc_S19250C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C7[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v4Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19250C7[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19250C7[];
extern  VTBL_ENTRY _ZTV8S19250C7[];
Class_Descriptor cd_S19250C7 = {  "S19250C7", // class name
  bases_S19250C7, 4,
  &(vtc_S19250C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2852), // object size
  NSPAIRA(_ZTI8S19250C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19250C7),9, //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  S19250C13  : S19250C3 , virtual S19250C10 , virtual S19250C2 , S19250C9 , S19922C8 {
  int s19250c13f0;
  virtual void  v8(); // _ZN9S19250C132v8Ev
  ~S19250C13(); // tgen
  S19250C13(); // tgen
};
//SIG(-1 S19250C13) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC8{ v7 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} BC2 VBC4 Fl Fl} BC7 v1 Fi}


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

static void Test_S19250C13()
{
  extern Class_Descriptor cd_S19250C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,462)];
    init_test(&cd_S19250C13, buf);
    S19250C13 *dp, &lv = *(dp=new (buf) S19250C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1844), "sizeof(S19250C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C13)");
    /*is_ambiguous_... S19250C13::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*), 0, "S19250C13");
    /*is_ambiguous_... S19250C13::S19250C10 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C10*), ABISELECT(1136,864), "S19250C13");
    /*is_ambiguous_... S19250C13::S19250C10 */ AMB_check_base_class_offset(lv, (S19250C10*), ABISELECT(1136,864), "S19250C13");
    check_base_class_offset(lv, (S19250C3*)(S19250C2*), ABISELECT(1712,1288), "S19250C13");
    check_base_class_offset(lv, (S19250C2*), ABISELECT(1712,1288), "S19250C13");
    check_base_class_offset(lv, (S19250C2*)(S19250C9*), ABISELECT(1712,1288), "S19250C13");
    check_base_class_offset(lv, (S19250C3*)(S19250C10*)(S19250C9*), ABISELECT(128,100), "S19250C13");
    check_base_class_offset(lv, (S19250C10*)(S19250C9*), ABISELECT(128,100), "S19250C13");
    check_base_class_offset(lv, (S19922C8*)(S19250C9*), ABISELECT(2128,1616), "S19250C13");
    /*is_ambiguous_... S19250C9::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C9*), ABISELECT(704,524), "S19250C13");
    check_base_class_offset(lv, (S19250C9*), ABISELECT(128,100), "S19250C13");
    /*is_ambiguous_... S19250C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(848,632), "S19250C13");
    check_field_offset(lv, s19250c13f0, ABISELECT(1132,860), "S19250C13.s19250c13f0");
    test_class_info(&lv, &cd_S19250C13);
    dp->~S19250C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C13(Test_S19250C13, "S19250C13", ABISELECT(2416,1844));

#else // __cplusplus

extern void _ZN9S19250C13C1Ev();
extern void _ZN9S19250C13D1Ev();
Name_Map name_map_S19250C13[] = {
  NSPAIR(_ZN9S19250C13C1Ev),
  NSPAIR(_ZN9S19250C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C9;
extern VTBL_ENTRY _ZTI8S19250C9[];
extern  VTBL_ENTRY _ZTV8S19250C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S19250C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C3,    ABISELECT(1136,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19250C10,    ABISELECT(1136,864), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19250C3,    ABISELECT(1712,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19250C2,    ABISELECT(1712,1288), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19250C3,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19250C10,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(2128,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C3,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19250C9,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(848,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19250C13[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY vtc_S19250C13[] = {
  ABISELECT(2128,1616),
  ABISELECT(1712,1288),
  ABISELECT(1136,864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-864),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  0,
  0,
  ABISELECT(-1712,-1288),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern VTBL_ENTRY _ZTV9S19250C13[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C9__9S19250C13[] = {
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__8S19250C9__9S19250C13[] = {
  0,
  0,
  ABISELECT(-1584,-1188),
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
static  VTT_ENTRY vtt_S19250C13[] = {
  {&(_ZTV9S19250C13[5]),  5,34},
  {&(_tg__ZTV8S19250C9__9S19250C13[4]),  4,8},
  {&(_tg__ZTV8S19250C2__8S19250C9__9S19250C13[4]),  4,6},
  {&(_ZTV9S19250C13[24]),  24,34},
  {&(_ZTV9S19250C13[32]),  32,34},
  {&(_ZTV9S19250C13[11]),  11,34},
};
extern VTBL_ENTRY _ZTI9S19250C13[];
extern  VTBL_ENTRY _ZTV9S19250C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19250C13[];
Class_Descriptor cd_S19250C13 = {  "S19250C13", // class name
  bases_S19250C13, 11,
  &(vtc_S19250C13[0]), // expected_vtbl_contents
  &(vtt_S19250C13[0]), // expected_vtt_contents
  ABISELECT(2416,1844), // object size
  NSPAIRA(_ZTI9S19250C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19250C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19250C13),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19250C6  : S19250C7 , S19250C13 , S19922C12 , S19922C8 , virtual S19250C3 {
  void *s19250c6f0;
  long double s19250c6f1;
  int s19250c6f2;
  int s19250c6f3;
  char s19250c6f4[7];
  ~S19250C6(); // tgen
  S19250C6(); // tgen
};
//SIG(-1 S19250C6) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC7{ v9 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC8{ BC9{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl Fl} FC10{ v10 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC12{ BC7 v11 FC7 FC7 FU5} Fc:8 Fl FD FC13{ BC7 v12 v13 v14 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC14{ BC3 VBC9 VBC4 BC8 BC6 v8 Fi} BC11 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S19250C6()
{
  extern Class_Descriptor cd_S19250C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1478)];
    init_test(&cd_S19250C6, buf);
    S19250C6 *dp, &lv = *(dp=new (buf) S19250C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5908), "sizeof(S19250C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C6)");
    /*is_ambiguous_... S19250C7::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C7*), 0, "S19250C6");
    check_base_class_offset(lv, (S19250C3*)(S19250C2*)(S19250C7*), ABISELECT(128,100), "S19250C6");
    check_base_class_offset(lv, (S19250C2*)(S19250C7*), ABISELECT(128,100), "S19250C6");
    check_base_class_offset(lv, (S19922C8*)(S19250C7*), ABISELECT(544,428), "S19250C6");
    check_base_class_offset(lv, (S19250C7*), 0, "S19250C6");
    /*is_ambiguous_... S19250C13::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C13*), ABISELECT(3840,2852), "S19250C6");
    /*is_ambiguous_... S19250C6::S19250C10 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C10*), ABISELECT(6480,4828), "S19250C6");
    /*is_ambiguous_... S19250C13::S19250C10 */ AMB_check_base_class_offset(lv, (S19250C10*)(S19250C13*), ABISELECT(6480,4828), "S19250C6");
    /*is_ambiguous_... S19250C6::S19250C2 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C2*), ABISELECT(7056,5252), "S19250C6");
    check_base_class_offset(lv, (S19250C2*)(S19250C13*), ABISELECT(7056,5252), "S19250C6");
    check_base_class_offset(lv, (S19250C2*)(S19250C9*)(S19250C13*), ABISELECT(7056,5252), "S19250C6");
    check_base_class_offset(lv, (S19250C3*)(S19250C10*)(S19250C9*)(S19250C13*), ABISELECT(3968,2952), "S19250C6");
    check_base_class_offset(lv, (S19250C10*)(S19250C9*)(S19250C13*), ABISELECT(3968,2952), "S19250C6");
    check_base_class_offset(lv, (S19922C8*)(S19250C9*)(S19250C13*), ABISELECT(7472,5580), "S19250C6");
    /*is_ambiguous_... S19250C9::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C9*)(S19250C13*), ABISELECT(4544,3376), "S19250C6");
    check_base_class_offset(lv, (S19250C9*)(S19250C13*), ABISELECT(3968,2952), "S19250C6");
    /*is_ambiguous_... S19250C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19250C13*), ABISELECT(4688,3484), "S19250C6");
    check_base_class_offset(lv, (S19250C13*), ABISELECT(3840,2852), "S19250C6");
    check_base_class_offset(lv, (S19922C12*), ABISELECT(4976,3716), "S19250C6");
    /*is_ambiguous_... S19250C6::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(6144,4568), "S19250C6");
    /*is_ambiguous_... S19250C6::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*), ABISELECT(7760,5808), "S19250C6");
    check_field_offset(lv, s19250c6f0, ABISELECT(6432,4796), "S19250C6.s19250c6f0");
    check_field_offset(lv, s19250c6f1, ABISELECT(6448,4800), "S19250C6.s19250c6f1");
    check_field_offset(lv, s19250c6f2, ABISELECT(6464,4812), "S19250C6.s19250c6f2");
    check_field_offset(lv, s19250c6f3, ABISELECT(6468,4816), "S19250C6.s19250c6f3");
    check_field_offset(lv, s19250c6f4, ABISELECT(6472,4820), "S19250C6.s19250c6f4");
    test_class_info(&lv, &cd_S19250C6);
    dp->~S19250C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C6(Test_S19250C6, "S19250C6", ABISELECT(7888,5908));

#else // __cplusplus

extern void _ZN8S19250C6C1Ev();
extern void _ZN8S19250C6D1Ev();
Name_Map name_map_S19250C6[] = {
  NSPAIR(_ZN8S19250C6C1Ev),
  NSPAIR(_ZN8S19250C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C7;
extern VTBL_ENTRY _ZTI8S19250C7[];
extern  VTBL_ENTRY _ZTV8S19250C7[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C9;
extern VTBL_ENTRY _ZTI8S19250C9[];
extern  VTBL_ENTRY _ZTV8S19250C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C13;
extern VTBL_ENTRY _ZTI9S19250C13[];
extern  VTBL_ENTRY _ZTV9S19250C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19250C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
static Base_Class bases_S19250C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19250C3,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19250C2,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19250C3,    ABISELECT(3840,2852), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19250C3,    ABISELECT(6480,4828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C10,    ABISELECT(6480,4828), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19250C3,    ABISELECT(7056,5252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C2,    ABISELECT(7056,5252), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19250C3,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19250C10,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7472,5580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C3,    ABISELECT(4544,3376), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19250C9,    ABISELECT(3968,2952), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(4688,3484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C13,    ABISELECT(3840,2852), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C12,    ABISELECT(4976,3716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(6144,4568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19250C3,    ABISELECT(7760,5808), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19250C6[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C72v3Ev();
extern void _ZN8S19250C72v4Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
extern void _ZN8S19250C32v1Ev();
static  VTBL_ENTRY vtc_S19250C6[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v4Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  ABISELECT(-4544,-3376),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S19250C6[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C13__8S19250C6[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C99S19250C13__8S19250C6[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__8S19250C99S19250C13__8S19250C6[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C10__9S19250C13__8S19250C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__9S19250C13__8S19250C6[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C9__9S19250C13__8S19250C6[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
static  VTT_ENTRY vtt_S19250C6[] = {
  {&(_ZTV8S19250C6[6]),  6,51},
  {&(_tg__ZTV9S19250C13__8S19250C6[5]),  5,7},
  {&(_tg__ZTV8S19250C99S19250C13__8S19250C6[4]),  4,8},
  {&(_tg__ZTV8S19250C2__8S19250C99S19250C13__8S19250C6[4]),  4,6},
  {&(_tg__ZTV9S19250C10__9S19250C13__8S19250C6[6]),  6,10},
  {&(_tg__ZTV8S19250C2__9S19250C13__8S19250C6[4]),  4,6},
  {&(_tg__ZTV8S19250C9__9S19250C13__8S19250C6[4]),  4,8},
  {&(_ZTV8S19250C6[18]),  18,51},
  {&(_ZTV8S19250C6[37]),  37,51},
  {&(_ZTV8S19250C6[45]),  45,51},
  {&(_ZTV8S19250C6[24]),  24,51},
  {&(_ZTV8S19250C6[50]),  50,51},
};
extern VTBL_ENTRY _ZTI8S19250C6[];
extern  VTBL_ENTRY _ZTV8S19250C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C6[];
Class_Descriptor cd_S19250C6 = {  "S19250C6", // class name
  bases_S19250C6, 20,
  &(vtc_S19250C6[0]), // expected_vtbl_contents
  &(vtt_S19250C6[0]), // expected_vtt_contents
  ABISELECT(7888,5908), // object size
  NSPAIRA(_ZTI8S19250C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19250C6),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19250C6),12, //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  S19250C5  : virtual S19250C6 , virtual S19922C12 {
  ::S19250C9 s19250c5f0;
  int s19250c5f1;
  void *s19250c5f2;
  int s19250c5f3:32;
  int s19250c5f4;
  ::S19922C14 s19250c5f5;
  char  :0;
  void *s19250c5f7;
  long double s19250c5f8;
  virtual  ~S19250C5(); // _ZN8S19250C5D2Ev
  virtual void  v9(); // _ZN8S19250C52v9Ev
  S19250C5(); // tgen
};
//SIG(-1 S19250C5) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] FL:7 Fi FD FL} BC5{ BC4 v3 FC4 FC4 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC7{ m Fc FU6 FC8{ v10 FL[8] Fc[4] FL:7 Fi FD FL} FL FU6[3] Fc} v4 v5 FU6 Fc Fc FC9{ BC10{ BC4 v6 v7 v8 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC7 BC4 VBC5 Fl Fl} FC11{ v17 FD Fp FD[8] Fp[9] FC12{ m FD Fp[10] FD Fi:0 Fi FD FC13{ BC8 v16 FC8 FC8 FU6} Fc:8 Fl FD FC14{ BC8 v13 v14 v15 FC8 Fi FC8 Fi Fc[6] Fc:4 Fp FC8 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC15{ BC4 VBC10 VBC5 BC9 BC7 v9 Fi} BC12 BC7 VBC4 Fp FD Fi Fi Fc[7]} VBC12 vd v1 FC9 Fi Fp Fi:32 Fi FC16{ VBC7 VBC17{ BC14 VBC7 BC8 VBC13 Fl Fl} vd v11 v12 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD}


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

static void Test_S19250C5()
{
  extern Class_Descriptor cd_S19250C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,2263)];
    init_test(&cd_S19250C5, buf);
    S19250C5 *dp, &lv = *(dp=new (buf) S19250C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,9048), "sizeof(S19250C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C5)");
    /*is_ambiguous_... S19250C7::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C7*)(S19250C6*), ABISELECT(3024,2288), "S19250C5");
    check_base_class_offset(lv, (S19250C3*)(S19250C2*)(S19250C7*)(S19250C6*), ABISELECT(3152,2388), "S19250C5");
    check_base_class_offset(lv, (S19250C2*)(S19250C7*)(S19250C6*), ABISELECT(3152,2388), "S19250C5");
    check_base_class_offset(lv, (S19922C8*)(S19250C7*)(S19250C6*), ABISELECT(3568,2716), "S19250C5");
    check_base_class_offset(lv, (S19250C7*)(S19250C6*), ABISELECT(3024,2288), "S19250C5");
    /*is_ambiguous_... S19250C13::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C13*)(S19250C6*), ABISELECT(6864,5140), "S19250C5");
    /*is_ambiguous_... S19250C5::S19250C10 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C10*), ABISELECT(9504,7116), "S19250C5");
    /*is_ambiguous_... S19250C13::S19250C10 */ AMB_check_base_class_offset(lv, (S19250C10*)(S19250C13*)(S19250C6*), ABISELECT(9504,7116), "S19250C5");
    /*is_ambiguous_... S19250C5::S19250C2 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C2*), ABISELECT(10080,7540), "S19250C5");
    check_base_class_offset(lv, (S19250C2*)(S19250C13*)(S19250C6*), ABISELECT(10080,7540), "S19250C5");
    check_base_class_offset(lv, (S19250C2*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(10080,7540), "S19250C5");
    check_base_class_offset(lv, (S19250C3*)(S19250C10*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(6992,5240), "S19250C5");
    check_base_class_offset(lv, (S19250C10*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(6992,5240), "S19250C5");
    check_base_class_offset(lv, (S19922C8*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(10496,7868), "S19250C5");
    /*is_ambiguous_... S19250C9::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(7568,5664), "S19250C5");
    check_base_class_offset(lv, (S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(6992,5240), "S19250C5");
    /*is_ambiguous_... S19250C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19250C13*)(S19250C6*), ABISELECT(7712,5772), "S19250C5");
    check_base_class_offset(lv, (S19250C13*)(S19250C6*), ABISELECT(6864,5140), "S19250C5");
    check_base_class_offset(lv, (S19922C12*)(S19250C6*), ABISELECT(8000,6004), "S19250C5");
    /*is_ambiguous_... S19250C6::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19250C6*), ABISELECT(9168,6856), "S19250C5");
    /*is_ambiguous_... S19250C6::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C6*), ABISELECT(10784,8096), "S19250C5");
    check_base_class_offset(lv, (S19250C6*), ABISELECT(3024,2288), "S19250C5");
    /*is_ambiguous_... S19250C5::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*), ABISELECT(10912,8196), "S19250C5");
    check_field_offset(lv, s19250c5f0, ABISELECT(16,4), "S19250C5.s19250c5f0");
    check_field_offset(lv, s19250c5f1, ABISELECT(1440,1092), "S19250C5.s19250c5f1");
    check_field_offset(lv, s19250c5f2, ABISELECT(1448,1096), "S19250C5.s19250c5f2");
    set_bf_and_test(lv, s19250c5f3, ABISELECT(1456,1100), 0, 32, 1, "S19250C5");
    set_bf_and_test(lv, s19250c5f3, ABISELECT(1456,1100), 0, 32, hide_sll(1LL<<31), "S19250C5");
    check_field_offset(lv, s19250c5f4, ABISELECT(1460,1104), "S19250C5.s19250c5f4");
    check_field_offset(lv, s19250c5f5, ABISELECT(1472,1108), "S19250C5.s19250c5f5");
    check_field_offset(lv, s19250c5f7, ABISELECT(2992,2272), "S19250C5.s19250c5f7");
    check_field_offset(lv, s19250c5f8, ABISELECT(3008,2276), "S19250C5.s19250c5f8");
    test_class_info(&lv, &cd_S19250C5);
    dp->~S19250C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C5(Test_S19250C5, "S19250C5", ABISELECT(12080,9048));

#else // __cplusplus

extern void _ZN8S19250C5C1Ev();
extern void _ZN8S19250C5D2Ev();
Name_Map name_map_S19250C5[] = {
  NSPAIR(_ZN8S19250C5C1Ev),
  NSPAIR(_ZN8S19250C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C7;
extern VTBL_ENTRY _ZTI8S19250C7[];
extern  VTBL_ENTRY _ZTV8S19250C7[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C9;
extern VTBL_ENTRY _ZTI8S19250C9[];
extern  VTBL_ENTRY _ZTV8S19250C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C13;
extern VTBL_ENTRY _ZTI9S19250C13[];
extern  VTBL_ENTRY _ZTV9S19250C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19250C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C6;
extern VTBL_ENTRY _ZTI8S19250C6[];
extern  VTBL_ENTRY _ZTV8S19250C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C6[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
static Base_Class bases_S19250C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19250C3,    ABISELECT(3024,2288), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19250C3,    ABISELECT(3152,2388), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19250C2,    ABISELECT(3152,2388), //bcp->offset
    28, //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(3568,2716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19250C7,    ABISELECT(3024,2288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19250C3,    ABISELECT(6864,5140), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19250C3,    ABISELECT(9504,7116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C10,    ABISELECT(9504,7116), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19250C3,    ABISELECT(10080,7540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C2,    ABISELECT(10080,7540), //bcp->offset
    60, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19250C3,    ABISELECT(6992,5240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19250C10,    ABISELECT(6992,5240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(10496,7868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C3,    ABISELECT(7568,5664), //bcp->offset
    47, //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19250C9,    ABISELECT(6992,5240), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7712,5772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C13,    ABISELECT(6864,5140), //bcp->offset
    32, //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(8000,6004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(9168,6856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C3,    ABISELECT(10784,8096), //bcp->offset
    66, //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_S19250C6,    ABISELECT(3024,2288), //bcp->offset
    11, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C12,    ABISELECT(10912,8196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19250C5[];
extern void _ZN8S19250C5D1Ev();
extern void _ZN8S19250C5D0Ev();
extern void _ZN8S19250C52v9Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C72v3Ev();
extern void _ZN8S19250C72v4Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
extern void _ZN8S19250C32v1Ev();
static  VTBL_ENTRY vtc_S19250C5[] = {
  ABISELECT(10912,8196),
  ABISELECT(10784,8096),
  ABISELECT(10496,7868),
  ABISELECT(10080,7540),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19250C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19250C52v9Ev,
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  ABISELECT(-3024,-2288),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v4Ev,
  ABISELECT(-3152,-2388),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-6864,-5140),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-6992,-5240),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  ABISELECT(-7568,-5664),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7116),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  0,
  0,
  ABISELECT(-10080,-7540),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
  0,
  ABISELECT(-10784,-8096),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S19250C5[];
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C72v3Ev();
extern void _ZN8S19250C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C6__8S19250C5[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v4Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C138S19250C6__8S19250C5[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C99S19250C138S19250C6__8S19250C5[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__8S19250C99S19250C138S19250C6__8S19250C5[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C10__9S19250C138S19250C6__8S19250C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__9S19250C138S19250C6__8S19250C5[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C9__9S19250C138S19250C6__8S19250C5[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C13__8S19250C6__8S19250C5[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C10__8S19250C6__8S19250C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__A1__8S19250C6__8S19250C5[] = {
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C99S19250C13__8S19250C6__8S19250C5[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C3__A7__8S19250C6__8S19250C5[] = {
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
};
static  VTT_ENTRY vtt_S19250C5[] = {
  {&(_ZTV8S19250C5[8]),  8,70},
  {&(_ZTV8S19250C5[25]),  25,70},
  {&(_ZTV8S19250C5[30]),  30,70},
  {&(_ZTV8S19250C5[37]),  37,70},
  {&(_ZTV8S19250C5[56]),  56,70},
  {&(_ZTV8S19250C5[64]),  64,70},
  {&(_ZTV8S19250C5[43]),  43,70},
  {&(_ZTV8S19250C5[49]),  49,70},
  {&(_ZTV8S19250C5[69]),  69,70},
  {&(_tg__ZTV8S19250C6__8S19250C5[6]),  6,9},
  {&(_tg__ZTV9S19250C138S19250C6__8S19250C5[5]),  5,7},
  {&(_tg__ZTV8S19250C99S19250C138S19250C6__8S19250C5[4]),  4,8},
  {&(_tg__ZTV8S19250C2__8S19250C99S19250C138S19250C6__8S19250C5[4]),  4,6},
  {&(_tg__ZTV9S19250C10__9S19250C138S19250C6__8S19250C5[6]),  6,10},
  {&(_tg__ZTV8S19250C2__9S19250C138S19250C6__8S19250C5[4]),  4,6},
  {&(_tg__ZTV8S19250C9__9S19250C138S19250C6__8S19250C5[4]),  4,8},
  {&(_tg__ZTV9S19250C13__8S19250C6__8S19250C5[5]),  5,7},
  {&(_tg__ZTV9S19250C10__8S19250C6__8S19250C5[6]),  6,10},
  {&(_tg__ZTV8S19250C2__A1__8S19250C6__8S19250C5[4]),  4,6},
  {&(_tg__ZTV8S19250C99S19250C13__8S19250C6__8S19250C5[4]),  4,8},
  {&(_tg__ZTV8S19250C3__A7__8S19250C6__8S19250C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19250C5[];
extern  VTBL_ENTRY _ZTV8S19250C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C5[];
Class_Descriptor cd_S19250C5 = {  "S19250C5", // class name
  bases_S19250C5, 22,
  &(vtc_S19250C5[0]), // expected_vtbl_contents
  &(vtt_S19250C5[0]), // expected_vtt_contents
  ABISELECT(12080,9048), // object size
  NSPAIRA(_ZTI8S19250C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19250C5),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19250C5),21, //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  S19250C1  : virtual S19250C2 , virtual S19250C5 , virtual S19250C7 , S19922C12 {
  int s19250c1f0;
  int s19250c1f1;
  char s19250c1f2;
  ::S2974C16 s19250c1f3[6];
  virtual  ~S19250C1(); // _ZN8S19250C1D2Ev
  S19250C1(); // tgen
};
//SIG(1 S19250C1) C1{ VBC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} v2 FC3 FC3 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} VBC5{ VBC6{ BC7{ BC3 BC2 BC8{ m Fc FU4 FC9{ v11 FL[8] Fc[4] FL:7 Fi FD FL} FL FU4[3] Fc} v3 v4 FU4 Fc Fc FC10{ BC11{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC8 BC3 VBC2 Fl Fl} FC12{ v20 FD Fp FD[8] Fp[9] FC13{ m FD Fp[10] FD Fi:0 Fi FD FC14{ BC9 v10 FC9 FC9 FU4} Fc:8 Fl FD FC15{ BC9 v12 v13 v14 FC9 Fi FC9 Fi Fc[6] Fc:4 Fp FC9 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC16{ BC3 VBC11 VBC2 BC10 BC8 v8 Fi} BC13 BC8 VBC3 Fp FD Fi Fi Fc[7]} VBC13 vd v9 FC10 Fi Fp Fi:32 Fi FC17{ VBC8 VBC18{ BC15 VBC8 BC9 VBC14 Fl Fl} vd v18 v19 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD} VBC7 BC13 vd Fi Fi Fc FC19{ v15 FC20{ BC21{ v17 FL[8] Fc[4] FL:7 Fi FD FL} v16 FC21 FC21 FU4} Fi[7] Fi Fp Fi}[6]}


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

static void Test_S19250C1()
{
  extern Class_Descriptor cd_S19250C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1251,3751)];
    init_test(&cd_S19250C1, buf);
    S19250C1 *dp, &lv = *(dp=new (buf) S19250C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20000,15000), "sizeof(S19250C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19250C1)");
    /*is_ambiguous_... S19250C1::S19250C2 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C2*), ABISELECT(4080,3100), "S19250C1");
    /*is_ambiguous_... S19250C1::S19250C2 */ AMB_check_base_class_offset(lv, (S19250C2*), ABISELECT(4080,3100), "S19250C1");
    check_base_class_offset(lv, (S19250C2*)(S19250C13*)(S19250C6*), ABISELECT(4080,3100), "S19250C1");
    check_base_class_offset(lv, (S19250C2*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(4080,3100), "S19250C1");
    /*is_ambiguous_... S19250C7::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C7*)(S19250C6*), ABISELECT(7520,5716), "S19250C1");
    check_base_class_offset(lv, (S19250C3*)(S19250C2*)(S19250C7*)(S19250C6*), ABISELECT(7648,5816), "S19250C1");
    check_base_class_offset(lv, (S19250C2*)(S19250C7*)(S19250C6*), ABISELECT(7648,5816), "S19250C1");
    check_base_class_offset(lv, (S19922C8*)(S19250C7*)(S19250C6*), ABISELECT(8064,6144), "S19250C1");
    check_base_class_offset(lv, (S19250C7*)(S19250C6*), ABISELECT(7520,5716), "S19250C1");
    /*is_ambiguous_... S19250C13::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C13*)(S19250C6*), ABISELECT(11360,8568), "S19250C1");
    /*is_ambiguous_... S19250C1::S19250C10 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C10*), ABISELECT(14000,10544), "S19250C1");
    /*is_ambiguous_... S19250C13::S19250C10 */ AMB_check_base_class_offset(lv, (S19250C10*)(S19250C13*)(S19250C6*), ABISELECT(14000,10544), "S19250C1");
    check_base_class_offset(lv, (S19250C3*)(S19250C10*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(11488,8668), "S19250C1");
    check_base_class_offset(lv, (S19250C10*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(11488,8668), "S19250C1");
    check_base_class_offset(lv, (S19922C8*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(14576,10968), "S19250C1");
    /*is_ambiguous_... S19250C9::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(12064,9092), "S19250C1");
    check_base_class_offset(lv, (S19250C9*)(S19250C13*)(S19250C6*), ABISELECT(11488,8668), "S19250C1");
    /*is_ambiguous_... S19250C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19250C13*)(S19250C6*), ABISELECT(12208,9200), "S19250C1");
    check_base_class_offset(lv, (S19250C13*)(S19250C6*), ABISELECT(11360,8568), "S19250C1");
    check_base_class_offset(lv, (S19922C12*)(S19250C6*), ABISELECT(12496,9432), "S19250C1");
    /*is_ambiguous_... S19250C6::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19250C6*), ABISELECT(13664,10284), "S19250C1");
    /*is_ambiguous_... S19250C6::S19250C3 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C6*), ABISELECT(14864,11196), "S19250C1");
    check_base_class_offset(lv, (S19250C6*)(S19250C5*), ABISELECT(7520,5716), "S19250C1");
    /*is_ambiguous_... S19250C5::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*)(S19250C5*), ABISELECT(14992,11296), "S19250C1");
    check_base_class_offset(lv, (S19250C5*), ABISELECT(4496,3428), "S19250C1");
    /*is_ambiguous_... S19250C1::S19250C7 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C7*), ABISELECT(16160,12148), "S19250C1");
    /*is_ambiguous_... S19250C1::S19250C7 */ AMB_check_base_class_offset(lv, (S19250C3*)(S19250C2*)(S19250C7*), ABISELECT(16288,12248), "S19250C1");
    /*is_ambiguous_... S19250C1::S19250C7 */ AMB_check_base_class_offset(lv, (S19250C2*)(S19250C7*), ABISELECT(16288,12248), "S19250C1");
    /*is_ambiguous_... S19250C1::S19250C7 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19250C7*), ABISELECT(16704,12576), "S19250C1");
    /*is_ambiguous_... S19250C1::S19250C7 */ AMB_check_base_class_offset(lv, (S19250C7*), ABISELECT(16160,12148), "S19250C1");
    /*is_ambiguous_... S19250C1::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*), ABISELECT(16,4), "S19250C1");
    check_field_offset(lv, s19250c1f0, ABISELECT(1184,856), "S19250C1.s19250c1f0");
    check_field_offset(lv, s19250c1f1, ABISELECT(1188,860), "S19250C1.s19250c1f1");
    check_field_offset(lv, s19250c1f2, ABISELECT(1192,864), "S19250C1.s19250c1f2");
    check_field_offset(lv, s19250c1f3, ABISELECT(1200,868), "S19250C1.s19250c1f3");
    test_class_info(&lv, &cd_S19250C1);
    dp->~S19250C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19250C1(Test_S19250C1, "S19250C1", ABISELECT(20000,15000));

#else // __cplusplus

extern void _ZN8S19250C1C1Ev();
extern void _ZN8S19250C1D2Ev();
Name_Map name_map_S19250C1[] = {
  NSPAIR(_ZN8S19250C1C1Ev),
  NSPAIR(_ZN8S19250C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C7;
extern VTBL_ENTRY _ZTI8S19250C7[];
extern  VTBL_ENTRY _ZTV8S19250C7[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C10;
extern VTBL_ENTRY _ZTI9S19250C10[];
extern  VTBL_ENTRY _ZTV9S19250C10[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C9;
extern VTBL_ENTRY _ZTI8S19250C9[];
extern  VTBL_ENTRY _ZTV8S19250C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C9[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C13;
extern VTBL_ENTRY _ZTI9S19250C13[];
extern  VTBL_ENTRY _ZTV9S19250C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19250C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C6;
extern VTBL_ENTRY _ZTI8S19250C6[];
extern  VTBL_ENTRY _ZTV8S19250C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C6[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19250C5;
extern VTBL_ENTRY _ZTI8S19250C5[];
extern  VTBL_ENTRY _ZTV8S19250C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C5[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C3;
extern VTBL_ENTRY _ZTI8S19250C3[];
extern  VTBL_ENTRY _ZTV8S19250C3[];
extern Class_Descriptor cd_S19250C2;
extern VTBL_ENTRY _ZTI8S19250C2[];
extern  VTBL_ENTRY _ZTV8S19250C2[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19250C7;
extern VTBL_ENTRY _ZTI8S19250C7[];
extern  VTBL_ENTRY _ZTV8S19250C7[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
static Base_Class bases_S19250C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19250C3,    ABISELECT(4080,3100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19250C2,    ABISELECT(4080,3100), //bcp->offset
    12, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19250C3,    ABISELECT(7520,5716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19250C3,    ABISELECT(7648,5816), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19250C2,    ABISELECT(7648,5816), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(8064,6144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C7,    ABISELECT(7520,5716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19250C3,    ABISELECT(11360,8568), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19250C3,    ABISELECT(14000,10544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C10,    ABISELECT(14000,10544), //bcp->offset
    70, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19250C3,    ABISELECT(11488,8668), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19250C10,    ABISELECT(11488,8668), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(14576,10968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C3,    ABISELECT(12064,9092), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19250C9,    ABISELECT(11488,8668), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(12208,9200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C13,    ABISELECT(11360,8568), //bcp->offset
    52, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(12496,9432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(13664,10284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C3,    ABISELECT(14864,11196), //bcp->offset
    80, //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
    20, //immediately_derived
  0, 1},
  {&cd_S19250C6,    ABISELECT(7520,5716), //bcp->offset
    31, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19922C12,    ABISELECT(14992,11296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C5,    ABISELECT(4496,3428), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19250C3,    ABISELECT(16160,12148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S19250C3,    ABISELECT(16288,12248), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19250C2,    ABISELECT(16288,12248), //bcp->offset
    93, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(16704,12576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19250C7,    ABISELECT(16160,12148), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C12,    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 _ZTI8S19250C1[];
extern void _ZN8S19250C1D1Ev();
extern void _ZN8S19250C1D0Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S19250C1D1Ev,_ZTv0_n36_N8S19250C1D1Ev)();
extern void ABISELECT(_ZThn4496_N8S19250C1D1Ev,_ZThn3428_N8S19250C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19250C1D0Ev,_ZTv0_n36_N8S19250C1D0Ev)();
extern void ABISELECT(_ZThn4496_N8S19250C1D0Ev,_ZThn3428_N8S19250C1D0Ev)() __attribute__((weak));
extern void _ZN8S19250C52v9Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C72v3Ev();
extern void _ZN8S19250C72v4Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C72v3Ev();
extern void _ZN8S19250C72v4Ev();
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY vtc_S19250C1[] = {
  ABISELECT(16160,12148),
  ABISELECT(14992,11296),
  ABISELECT(14864,11196),
  ABISELECT(14576,10968),
  ABISELECT(14000,10544),
  ABISELECT(7520,5716),
  ABISELECT(4496,3428),
  ABISELECT(4080,3100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19250C1D0Ev,
  0,
  0,
  ABISELECT(-4080,-3100),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
  0,
  ABISELECT(-4496,-3428),
  ABISELECT(10496,7868),
  ABISELECT(10368,7768),
  ABISELECT(10080,7540),
  ABISELECT(-416,-328),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  ABISELECT(-4496,-3428),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19250C1D1Ev,_ZTv0_n36_N8S19250C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19250C1D0Ev,_ZTv0_n36_N8S19250C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19250C52v9Ev,
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7344,5480),
  ABISELECT(7056,5252),
  ABISELECT(-3440,-2616),
  ABISELECT(6480,4828),
  ABISELECT(-7520,-5716),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v4Ev,
  ABISELECT(-7648,-5816),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
  ABISELECT(3216,2400),
  ABISELECT(-7280,-5468),
  ABISELECT(2640,1976),
  ABISELECT(-11360,-8568),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
  ABISELECT(-7408,-5568),
  ABISELECT(3088,2300),
  ABISELECT(-11488,-8668),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  ABISELECT(-12064,-9092),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-14000,-10544),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
  0,
  ABISELECT(-14864,-11196),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(-16160,-12148),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v4Ev,
  ABISELECT(-16288,-12248),
  (VTBL_ENTRY)&(_ZTI8S19250C1[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S19250C1[];
extern void _ZN8S19250C5D1Ev();
extern void _ZN8S19250C5D0Ev();
extern void _ZN8S19250C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C5__8S19250C1[] = {
  ABISELECT(10496,7868),
  ABISELECT(10368,7768),
  ABISELECT(10080,7540),
  ABISELECT(-416,-328),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19250C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19250C52v9Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C72v3Ev();
extern void _ZN8S19250C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C6__8S19250C5__8S19250C1[] = {
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7344,5480),
  ABISELECT(7056,5252),
  ABISELECT(-3440,-2616),
  ABISELECT(6480,4828),
  ABISELECT(-3024,-2288),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v4Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C28S19250C78S19250C6__8S19250C5__8S19250C1[] = {
  ABISELECT(-3152,-2388),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C138S19250C6__8S19250C5__8S19250C1[] = {
  ABISELECT(3216,2400),
  ABISELECT(-7280,-5468),
  ABISELECT(2640,1976),
  ABISELECT(-6864,-5140),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C10__8S19250C5__8S19250C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7116),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__A1__8S19250C5__8S19250C1[] = {
  0,
  0,
  ABISELECT(416,328),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C99S19250C138S19250C6__8S19250C5__8S19250C1[] = {
  ABISELECT(-7408,-5568),
  ABISELECT(3088,2300),
  ABISELECT(-6992,-5240),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C38S19250C99S19250C138S19250C6__A6__8S19250C5__8S19250C1[] = {
  ABISELECT(-7568,-5664),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
};
extern void _ZN8S19250C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C3__A7__8S19250C5__8S19250C1[] = {
  0,
  ABISELECT(-10368,-7768),
  (VTBL_ENTRY)&(_ZTI8S19250C5[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C72v3Ev();
extern void _ZN8S19250C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C6__8S19250C1[] = {
  ABISELECT(7344,5480),
  ABISELECT(7056,5252),
  ABISELECT(-3440,-2616),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19250C72v4Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C138S19250C6__8S19250C1[] = {
  ABISELECT(3216,2400),
  ABISELECT(-7280,-5468),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C99S19250C138S19250C6__8S19250C1[] = {
  ABISELECT(-7408,-5568),
  ABISELECT(3088,2300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__8S19250C99S19250C138S19250C6__8S19250C1[] = {
  0,
  0,
  ABISELECT(7408,5568),
  (VTBL_ENTRY)&(_ZTI8S19250C9[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C10__9S19250C138S19250C6__8S19250C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__9S19250C138S19250C6__8S19250C1[] = {
  0,
  0,
  ABISELECT(7280,5468),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C9__9S19250C138S19250C6__8S19250C1[] = {
  ABISELECT(-7408,-5568),
  ABISELECT(3088,2300),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19250C13[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C13__8S19250C6__8S19250C1[] = {
  ABISELECT(3216,2400),
  ABISELECT(-7280,-5468),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C132v8Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19250C10__8S19250C6__8S19250C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN8S19250C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C2__A1__8S19250C6__8S19250C1[] = {
  0,
  0,
  ABISELECT(3440,2616),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19250C22v2Ev,
};
extern void _ZN8S19250C32v1Ev();
extern void _ZN9S19250C102v5Ev();
extern void _ZN9S19250C102v6Ev();
extern void _ZN9S19250C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C99S19250C13__8S19250C6__8S19250C1[] = {
  ABISELECT(-7408,-5568),
  ABISELECT(3088,2300),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19250C102v7Ev,
};
extern void _ZN8S19250C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19250C3__A7__8S19250C6__8S19250C1[] = {
  0,
  ABISELECT(-7344,-5480),
  (VTBL_ENTRY)&(_ZTI8S19250C6[0]),
  (VTBL_ENTRY)&_ZN8S19250C32v1Ev,
};
static  VTT_ENTRY vtt_S19250C1[] = {
  {&(_ZTV8S19250C1[10]),  10,97},
  {&(_ZTV8S19250C1[16]),  16,97},
  {&(_ZTV8S19250C1[28]),  28,97},
  {&(_ZTV8S19250C1[45]),  45,97},
  {&(_ZTV8S19250C1[50]),  50,97},
  {&(_ZTV8S19250C1[57]),  57,97},
  {&(_ZTV8S19250C1[76]),  76,97},
  {&(_ZTV8S19250C1[63]),  63,97},
  {&(_ZTV8S19250C1[69]),  69,97},
  {&(_ZTV8S19250C1[83]),  83,97},
  {&(_ZTV8S19250C1[90]),  90,97},
  {&(_ZTV8S19250C1[95]),  95,97},
  {&(_tg__ZTV8S19250C5__8S19250C1[8]),  8,11},
  {&(_tg__ZTV8S19250C6__8S19250C5__8S19250C1[14]),  14,17},
  {&(_tg__ZTV8S19250C28S19250C78S19250C6__8S19250C5__8S19250C1[2]),  2,4},
  {&(_tg__ZTV9S19250C138S19250C6__8S19250C5__8S19250C1[5]),  5,7},
  {&(_tg__ZTV9S19250C10__8S19250C5__8S19250C1[6]),  6,10},
  {&(_tg__ZTV8S19250C2__A1__8S19250C5__8S19250C1[4]),  4,6},
  {&(_tg__ZTV8S19250C99S19250C138S19250C6__8S19250C5__8S19250C1[4]),  4,8},
  {&(_tg__ZTV8S19250C38S19250C99S19250C138S19250C6__A6__8S19250C5__8S19250C1[2]),  2,3},
  {&(_tg__ZTV8S19250C3__A7__8S19250C5__8S19250C1[3]),  3,4},
  {&(_tg__ZTV8S19250C6__8S19250C1[6]),  6,9},
  {&(_tg__ZTV9S19250C138S19250C6__8S19250C1[5]),  5,7},
  {&(_tg__ZTV8S19250C99S19250C138S19250C6__8S19250C1[4]),  4,8},
  {&(_tg__ZTV8S19250C2__8S19250C99S19250C138S19250C6__8S19250C1[4]),  4,6},
  {&(_tg__ZTV9S19250C10__9S19250C138S19250C6__8S19250C1[6]),  6,10},
  {&(_tg__ZTV8S19250C2__9S19250C138S19250C6__8S19250C1[4]),  4,6},
  {&(_tg__ZTV8S19250C9__9S19250C138S19250C6__8S19250C1[4]),  4,8},
  {&(_tg__ZTV9S19250C13__8S19250C6__8S19250C1[5]),  5,7},
  {&(_tg__ZTV9S19250C10__8S19250C6__8S19250C1[6]),  6,10},
  {&(_tg__ZTV8S19250C2__A1__8S19250C6__8S19250C1[4]),  4,6},
  {&(_tg__ZTV8S19250C99S19250C13__8S19250C6__8S19250C1[4]),  4,8},
  {&(_tg__ZTV8S19250C3__A7__8S19250C6__8S19250C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19250C1[];
extern  VTBL_ENTRY _ZTV8S19250C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19250C1[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19250C1D0Ev,_ZTv0_n36_N8S19250C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S19250C1D0Ev,_ZThn3428_N8S19250C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19250C1D1Ev,_ZTv0_n36_N8S19250C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S19250C1D1Ev,_ZThn3428_N8S19250C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19250C1 = {  "S19250C1", // class name
  bases_S19250C1, 29,
  &(vtc_S19250C1[0]), // expected_vtbl_contents
  &(vtt_S19250C1[0]), // expected_vtt_contents
  ABISELECT(20000,15000), // object size
  NSPAIRA(_ZTI8S19250C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19250C1),97, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19250C1),33, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19249C3  {
  __tsi64 s19249c3f0[8];
  char s19249c3f1[4];
  int s19249c3f2:7;
  int s19249c3f3;
  long double s19249c3f4;
  __tsi64 s19249c3f5;
  virtual void  v1(); // _ZN8S19249C32v1Ev
  ~S19249C3(); // tgen
  S19249C3(); // tgen
};
//SIG(-1 S19249C3) C1{ v1 FL[8] Fc[4] Fi:7 Fi FD FL}


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

static void Test_S19249C3()
{
  extern Class_Descriptor cd_S19249C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S19249C3, buf);
    S19249C3 *dp, &lv = *(dp=new (buf) S19249C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S19249C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C3)");
    check_field_offset(lv, s19249c3f0, ABISELECT(8,4), "S19249C3.s19249c3f0");
    check_field_offset(lv, s19249c3f1, ABISELECT(72,68), "S19249C3.s19249c3f1");
    set_bf_and_test(lv, s19249c3f2, ABISELECT(76,72), 0, 7, 1, "S19249C3");
    set_bf_and_test(lv, s19249c3f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S19249C3");
    check_field_offset(lv, s19249c3f3, ABISELECT(80,76), "S19249C3.s19249c3f3");
    check_field_offset(lv, s19249c3f4, ABISELECT(96,80), "S19249C3.s19249c3f4");
    check_field_offset(lv, s19249c3f5, ABISELECT(112,92), "S19249C3.s19249c3f5");
    test_class_info(&lv, &cd_S19249C3);
    dp->~S19249C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C3(Test_S19249C3, "S19249C3", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S19249C3C1Ev();
extern void _ZN8S19249C3D1Ev();
Name_Map name_map_S19249C3[] = {
  NSPAIR(_ZN8S19249C3C1Ev),
  NSPAIR(_ZN8S19249C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19249C3[];
extern void _ZN8S19249C32v1Ev();
static  VTBL_ENTRY vtc_S19249C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C3[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
Class_Descriptor cd_S19249C3 = {  "S19249C3", // class name
  0,0,//no base classes
  &(vtc_S19249C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S19249C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19249C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19249C2  : S19249C3 {
  ::S19249C3 s19249c2f0;
  ::S19249C3 s19249c2f1;
  ::S19921C7 s19249c2f2;
  virtual void  v2(); // _ZN8S19249C22v2Ev
  ~S19249C2(); // tgen
  S19249C2(); // tgen
};
//SIG(-1 S19249C2) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


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

static void Test_S19249C2()
{
  extern Class_Descriptor cd_S19249C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S19249C2, buf);
    S19249C2 *dp, &lv = *(dp=new (buf) S19249C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S19249C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C2)");
    check_base_class_offset(lv, (S19249C3*), 0, "S19249C2");
    check_field_offset(lv, s19249c2f0, ABISELECT(128,100), "S19249C2.s19249c2f0");
    check_field_offset(lv, s19249c2f1, ABISELECT(256,200), "S19249C2.s19249c2f1");
    check_field_offset(lv, s19249c2f2, ABISELECT(384,300), "S19249C2.s19249c2f2");
    test_class_info(&lv, &cd_S19249C2);
    dp->~S19249C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C2(Test_S19249C2, "S19249C2", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S19249C2C1Ev();
extern void _ZN8S19249C2D1Ev();
Name_Map name_map_S19249C2[] = {
  NSPAIR(_ZN8S19249C2C1Ev),
  NSPAIR(_ZN8S19249C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
static Base_Class bases_S19249C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19249C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19249C2[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY vtc_S19249C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C2[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
Class_Descriptor cd_S19249C2 = {  "S19249C2", // class name
  bases_S19249C2, 1,
  &(vtc_S19249C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S19249C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19249C2),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  S19249C10  : S19249C3 {
  ::S19249C3 s19249c10f0;
  int s19249c10f1;
  ::S19249C3 s19249c10f2;
  int s19249c10f3;
  char s19249c10f4[6];
  char s19249c10f5:4;
  void *s19249c10f6;
  ::S19249C3 s19249c10f7;
  int s19249c10f8;
  virtual void  v5(); // _ZN9S19249C102v5Ev
  virtual void  v6(); // _ZN9S19249C102v6Ev
  virtual void  v7(); // _ZN9S19249C102v7Ev
  ~S19249C10(); // tgen
  S19249C10(); // tgen
};
//SIG(-1 S19249C10) C1{ BC2{ v4 FL[8] Fc[4] Fi:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S19249C10 ::v5(){vfunc_called(this, "_ZN9S19249C102v5Ev");}
void  S19249C10 ::v6(){vfunc_called(this, "_ZN9S19249C102v6Ev");}
void  S19249C10 ::v7(){vfunc_called(this, "_ZN9S19249C102v7Ev");}
S19249C10 ::~S19249C10(){ note_dtor("S19249C10", this);} // tgen
S19249C10 ::S19249C10(){ note_ctor("S19249C10", this);} // tgen

static void Test_S19249C10()
{
  extern Class_Descriptor cd_S19249C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S19249C10, buf);
    S19249C10 *dp, &lv = *(dp=new (buf) S19249C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S19249C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C10)");
    check_base_class_offset(lv, (S19249C3*), 0, "S19249C10");
    check_field_offset(lv, s19249c10f0, ABISELECT(128,100), "S19249C10.s19249c10f0");
    check_field_offset(lv, s19249c10f1, ABISELECT(256,200), "S19249C10.s19249c10f1");
    check_field_offset(lv, s19249c10f2, ABISELECT(272,204), "S19249C10.s19249c10f2");
    check_field_offset(lv, s19249c10f3, ABISELECT(400,304), "S19249C10.s19249c10f3");
    check_field_offset(lv, s19249c10f4, ABISELECT(404,308), "S19249C10.s19249c10f4");
    set_bf_and_test(lv, s19249c10f5, ABISELECT(410,314), 0, 4, 1, "S19249C10");
    set_bf_and_test(lv, s19249c10f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S19249C10");
    check_field_offset(lv, s19249c10f6, ABISELECT(416,316), "S19249C10.s19249c10f6");
    check_field_offset(lv, s19249c10f7, ABISELECT(432,320), "S19249C10.s19249c10f7");
    check_field_offset(lv, s19249c10f8, ABISELECT(560,420), "S19249C10.s19249c10f8");
    test_class_info(&lv, &cd_S19249C10);
    dp->~S19249C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C10(Test_S19249C10, "S19249C10", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN9S19249C10C1Ev();
extern void _ZN9S19249C10D1Ev();
Name_Map name_map_S19249C10[] = {
  NSPAIR(_ZN9S19249C10C1Ev),
  NSPAIR(_ZN9S19249C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
static Base_Class bases_S19249C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19249C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19249C10[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY vtc_S19249C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19249C10[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
Class_Descriptor cd_S19249C10 = {  "S19249C10", // class name
  bases_S19249C10, 1,
  &(vtc_S19249C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI9S19249C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19249C10),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  S19249C9  : S19249C10 , virtual S19921C8 , S19249C3 , virtual S19249C2 {
  long s19249c9f0;
  __tsi64 s19249c9f1;
  ~S19249C9(); // tgen
  S19249C9(); // tgen
};
//SIG(-1 S19249C9) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC6{ v6 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} BC3 VBC7{ BC3 v5 FC3 FC3 FU5} Fl FL}


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

static void Test_S19249C9()
{
  extern Class_Descriptor cd_S19249C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,274)];
    init_test(&cd_S19249C9, buf);
    S19249C9 *dp, &lv = *(dp=new (buf) S19249C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1092), "sizeof(S19249C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C9)");
    check_base_class_offset(lv, (S19249C3*)(S19249C10*), 0, "S19249C9");
    check_base_class_offset(lv, (S19249C10*), 0, "S19249C9");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(720,536), "S19249C9");
    /*is_ambiguous_... S19249C9::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*), ABISELECT(576,424), "S19249C9");
    check_base_class_offset(lv, (S19249C3*)(S19249C2*), ABISELECT(1008,764), "S19249C9");
    check_base_class_offset(lv, (S19249C2*), ABISELECT(1008,764), "S19249C9");
    check_field_offset(lv, s19249c9f0, ABISELECT(696,524), "S19249C9.s19249c9f0");
    check_field_offset(lv, s19249c9f1, ABISELECT(704,528), "S19249C9.s19249c9f1");
    test_class_info(&lv, &cd_S19249C9);
    dp->~S19249C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C9(Test_S19249C9, "S19249C9", ABISELECT(1424,1092));

#else // __cplusplus

extern void _ZN8S19249C9C1Ev();
extern void _ZN8S19249C9D1Ev();
Name_Map name_map_S19249C9[] = {
  NSPAIR(_ZN8S19249C9C1Ev),
  NSPAIR(_ZN8S19249C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
static Base_Class bases_S19249C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19249C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19249C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C8,    ABISELECT(720,536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19249C3,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19249C3,    ABISELECT(1008,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C2,    ABISELECT(1008,764), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19249C9[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY vtc_S19249C9[] = {
  ABISELECT(1008,764),
  ABISELECT(720,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  0,
  0,
  ABISELECT(-1008,-764),
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S19249C9[];
static  VTT_ENTRY vtt_S19249C9[] = {
  {&(_ZTV8S19249C9[4]),  4,17},
  {&(_ZTV8S19249C9[15]),  15,17},
};
extern VTBL_ENTRY _ZTI8S19249C9[];
extern  VTBL_ENTRY _ZTV8S19249C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C9[];
Class_Descriptor cd_S19249C9 = {  "S19249C9", // class name
  bases_S19249C9, 6,
  &(vtc_S19249C9[0]), // expected_vtbl_contents
  &(vtt_S19249C9[0]), // expected_vtt_contents
  ABISELECT(1424,1092), // object size
  NSPAIRA(_ZTI8S19249C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19249C9),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19249C9),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19249C7  : S19249C3 , S19249C2 , S19921C8 {
  ::S19921C7 s19249c7f0;
  char s19249c7f1;
  char s19249c7f2;
  ::S19249C9 s19249c7f3;
  ::S19921C11 s19249c7f4;
  int s19249c7f5;
  long s19249c7f6;
  virtual void  v3(); // _ZN8S19249C72v3Ev
  virtual void  v4(); // _ZN8S19249C72v4Ev
  ~S19249C7(); // tgen
  S19249C7(); // tgen
};
//SIG(-1 S19249C7) C1{ BC2{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC6{ v5 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC7{ BC8{ BC2 v6 v7 v8 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl FL} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC11{ BC6 v10 FC6 FC6 FU4} Fc:8 FL FD FC12{ BC6 v11 v12 v13 FC6 Fi FC6 Fi Fc[6] Fc:4 Fp FC6 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S19249C7 ::v3(){vfunc_called(this, "_ZN8S19249C72v3Ev");}
void  S19249C7 ::v4(){vfunc_called(this, "_ZN8S19249C72v4Ev");}
S19249C7 ::~S19249C7(){ note_dtor("S19249C7", this);} // tgen
S19249C7 ::S19249C7(){ note_ctor("S19249C7", this);} // tgen

static void Test_S19249C7()
{
  extern Class_Descriptor cd_S19249C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,716)];
    init_test(&cd_S19249C7, buf);
    S19249C7 *dp, &lv = *(dp=new (buf) S19249C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2860), "sizeof(S19249C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C7)");
    /*is_ambiguous_... S19249C7::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*), 0, "S19249C7");
    check_base_class_offset(lv, (S19249C3*)(S19249C2*), ABISELECT(128,100), "S19249C7");
    check_base_class_offset(lv, (S19249C2*), ABISELECT(128,100), "S19249C7");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(544,428), "S19249C7");
    check_field_offset(lv, s19249c7f0, ABISELECT(832,656), "S19249C7.s19249c7f0");
    check_field_offset(lv, s19249c7f1, ABISELECT(864,684), "S19249C7.s19249c7f1");
    check_field_offset(lv, s19249c7f2, ABISELECT(865,685), "S19249C7.s19249c7f2");
    check_field_offset(lv, s19249c7f3, ABISELECT(880,688), "S19249C7.s19249c7f3");
    check_field_offset(lv, s19249c7f4, ABISELECT(2304,1780), "S19249C7.s19249c7f4");
    check_field_offset(lv, s19249c7f5, ABISELECT(3824,2852), "S19249C7.s19249c7f5");
    check_field_offset(lv, s19249c7f6, ABISELECT(3832,2856), "S19249C7.s19249c7f6");
    test_class_info(&lv, &cd_S19249C7);
    dp->~S19249C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C7(Test_S19249C7, "S19249C7", ABISELECT(3840,2860));

#else // __cplusplus

extern void _ZN8S19249C7C1Ev();
extern void _ZN8S19249C7D1Ev();
Name_Map name_map_S19249C7[] = {
  NSPAIR(_ZN8S19249C7C1Ev),
  NSPAIR(_ZN8S19249C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S19249C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19249C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19249C3,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19249C2,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19249C7[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C72v3Ev();
extern void _ZN8S19249C72v4Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY vtc_S19249C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C7[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v4Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19249C7[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19249C7[];
extern  VTBL_ENTRY _ZTV8S19249C7[];
Class_Descriptor cd_S19249C7 = {  "S19249C7", // class name
  bases_S19249C7, 4,
  &(vtc_S19249C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2860), // object size
  NSPAIRA(_ZTI8S19249C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19249C7),9, //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  S19249C13  : S19249C3 , virtual S19249C10 , virtual S19249C2 , S19249C9 , S19921C8 {
  int s19249c13f0;
  virtual void  v8(); // _ZN9S19249C132v8Ev
  ~S19249C13(); // tgen
  S19249C13(); // tgen
};
//SIG(-1 S19249C13) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC8{ v7 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} BC2 VBC4 Fl FL} BC7 v1 Fi}


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

static void Test_S19249C13()
{
  extern Class_Descriptor cd_S19249C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,463)];
    init_test(&cd_S19249C13, buf);
    S19249C13 *dp, &lv = *(dp=new (buf) S19249C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1848), "sizeof(S19249C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C13)");
    /*is_ambiguous_... S19249C13::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*), 0, "S19249C13");
    /*is_ambiguous_... S19249C13::S19249C10 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C10*), ABISELECT(1136,868), "S19249C13");
    /*is_ambiguous_... S19249C13::S19249C10 */ AMB_check_base_class_offset(lv, (S19249C10*), ABISELECT(1136,868), "S19249C13");
    check_base_class_offset(lv, (S19249C3*)(S19249C2*), ABISELECT(1712,1292), "S19249C13");
    check_base_class_offset(lv, (S19249C2*), ABISELECT(1712,1292), "S19249C13");
    check_base_class_offset(lv, (S19249C2*)(S19249C9*), ABISELECT(1712,1292), "S19249C13");
    check_base_class_offset(lv, (S19249C3*)(S19249C10*)(S19249C9*), ABISELECT(128,100), "S19249C13");
    check_base_class_offset(lv, (S19249C10*)(S19249C9*), ABISELECT(128,100), "S19249C13");
    check_base_class_offset(lv, (S19921C8*)(S19249C9*), ABISELECT(2128,1620), "S19249C13");
    /*is_ambiguous_... S19249C9::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C9*), ABISELECT(704,524), "S19249C13");
    check_base_class_offset(lv, (S19249C9*), ABISELECT(128,100), "S19249C13");
    /*is_ambiguous_... S19249C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(848,636), "S19249C13");
    check_field_offset(lv, s19249c13f0, ABISELECT(1132,864), "S19249C13.s19249c13f0");
    test_class_info(&lv, &cd_S19249C13);
    dp->~S19249C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C13(Test_S19249C13, "S19249C13", ABISELECT(2416,1848));

#else // __cplusplus

extern void _ZN9S19249C13C1Ev();
extern void _ZN9S19249C13D1Ev();
Name_Map name_map_S19249C13[] = {
  NSPAIR(_ZN9S19249C13C1Ev),
  NSPAIR(_ZN9S19249C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C9;
extern VTBL_ENTRY _ZTI8S19249C9[];
extern  VTBL_ENTRY _ZTV8S19249C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S19249C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19249C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C3,    ABISELECT(1136,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19249C10,    ABISELECT(1136,868), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19249C3,    ABISELECT(1712,1292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19249C2,    ABISELECT(1712,1292), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19249C3,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19249C10,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(2128,1620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C3,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19249C9,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(848,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19249C13[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY vtc_S19249C13[] = {
  ABISELECT(2128,1620),
  ABISELECT(1712,1292),
  ABISELECT(1136,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-868),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  0,
  0,
  ABISELECT(-1712,-1292),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern VTBL_ENTRY _ZTV9S19249C13[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C9__9S19249C13[] = {
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__8S19249C9__9S19249C13[] = {
  0,
  0,
  ABISELECT(-1584,-1192),
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
static  VTT_ENTRY vtt_S19249C13[] = {
  {&(_ZTV9S19249C13[5]),  5,34},
  {&(_tg__ZTV8S19249C9__9S19249C13[4]),  4,8},
  {&(_tg__ZTV8S19249C2__8S19249C9__9S19249C13[4]),  4,6},
  {&(_ZTV9S19249C13[24]),  24,34},
  {&(_ZTV9S19249C13[32]),  32,34},
  {&(_ZTV9S19249C13[11]),  11,34},
};
extern VTBL_ENTRY _ZTI9S19249C13[];
extern  VTBL_ENTRY _ZTV9S19249C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19249C13[];
Class_Descriptor cd_S19249C13 = {  "S19249C13", // class name
  bases_S19249C13, 11,
  &(vtc_S19249C13[0]), // expected_vtbl_contents
  &(vtt_S19249C13[0]), // expected_vtt_contents
  ABISELECT(2416,1848), // object size
  NSPAIRA(_ZTI9S19249C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19249C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19249C13),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19249C6  : S19249C7 , S19249C13 , S19921C12 , S19921C8 , virtual S19249C3 {
  void *s19249c6f0;
  long double s19249c6f1;
  int s19249c6f2;
  int s19249c6f3;
  char s19249c6f4[7];
  ~S19249C6(); // tgen
  S19249C6(); // tgen
};
//SIG(-1 S19249C6) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC7{ v9 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC8{ BC9{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl FL} FC10{ v10 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC12{ BC7 v11 FC7 FC7 FU5} Fc:8 FL FD FC13{ BC7 v12 v13 v14 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC14{ BC3 VBC9 VBC4 BC8 BC6 v8 Fi} BC11 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S19249C6()
{
  extern Class_Descriptor cd_S19249C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1482)];
    init_test(&cd_S19249C6, buf);
    S19249C6 *dp, &lv = *(dp=new (buf) S19249C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5924), "sizeof(S19249C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C6)");
    /*is_ambiguous_... S19249C7::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C7*), 0, "S19249C6");
    check_base_class_offset(lv, (S19249C3*)(S19249C2*)(S19249C7*), ABISELECT(128,100), "S19249C6");
    check_base_class_offset(lv, (S19249C2*)(S19249C7*), ABISELECT(128,100), "S19249C6");
    check_base_class_offset(lv, (S19921C8*)(S19249C7*), ABISELECT(544,428), "S19249C6");
    check_base_class_offset(lv, (S19249C7*), 0, "S19249C6");
    /*is_ambiguous_... S19249C13::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C13*), ABISELECT(3840,2860), "S19249C6");
    /*is_ambiguous_... S19249C6::S19249C10 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C10*), ABISELECT(6480,4844), "S19249C6");
    /*is_ambiguous_... S19249C13::S19249C10 */ AMB_check_base_class_offset(lv, (S19249C10*)(S19249C13*), ABISELECT(6480,4844), "S19249C6");
    /*is_ambiguous_... S19249C6::S19249C2 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C2*), ABISELECT(7056,5268), "S19249C6");
    check_base_class_offset(lv, (S19249C2*)(S19249C13*), ABISELECT(7056,5268), "S19249C6");
    check_base_class_offset(lv, (S19249C2*)(S19249C9*)(S19249C13*), ABISELECT(7056,5268), "S19249C6");
    check_base_class_offset(lv, (S19249C3*)(S19249C10*)(S19249C9*)(S19249C13*), ABISELECT(3968,2960), "S19249C6");
    check_base_class_offset(lv, (S19249C10*)(S19249C9*)(S19249C13*), ABISELECT(3968,2960), "S19249C6");
    check_base_class_offset(lv, (S19921C8*)(S19249C9*)(S19249C13*), ABISELECT(7472,5596), "S19249C6");
    /*is_ambiguous_... S19249C9::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C9*)(S19249C13*), ABISELECT(4544,3384), "S19249C6");
    check_base_class_offset(lv, (S19249C9*)(S19249C13*), ABISELECT(3968,2960), "S19249C6");
    /*is_ambiguous_... S19249C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19249C13*), ABISELECT(4688,3496), "S19249C6");
    check_base_class_offset(lv, (S19249C13*), ABISELECT(3840,2860), "S19249C6");
    check_base_class_offset(lv, (S19921C12*), ABISELECT(4976,3728), "S19249C6");
    /*is_ambiguous_... S19249C6::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(6144,4584), "S19249C6");
    /*is_ambiguous_... S19249C6::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*), ABISELECT(7760,5824), "S19249C6");
    check_field_offset(lv, s19249c6f0, ABISELECT(6432,4812), "S19249C6.s19249c6f0");
    check_field_offset(lv, s19249c6f1, ABISELECT(6448,4816), "S19249C6.s19249c6f1");
    check_field_offset(lv, s19249c6f2, ABISELECT(6464,4828), "S19249C6.s19249c6f2");
    check_field_offset(lv, s19249c6f3, ABISELECT(6468,4832), "S19249C6.s19249c6f3");
    check_field_offset(lv, s19249c6f4, ABISELECT(6472,4836), "S19249C6.s19249c6f4");
    test_class_info(&lv, &cd_S19249C6);
    dp->~S19249C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C6(Test_S19249C6, "S19249C6", ABISELECT(7888,5924));

#else // __cplusplus

extern void _ZN8S19249C6C1Ev();
extern void _ZN8S19249C6D1Ev();
Name_Map name_map_S19249C6[] = {
  NSPAIR(_ZN8S19249C6C1Ev),
  NSPAIR(_ZN8S19249C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C7;
extern VTBL_ENTRY _ZTI8S19249C7[];
extern  VTBL_ENTRY _ZTV8S19249C7[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C9;
extern VTBL_ENTRY _ZTI8S19249C9[];
extern  VTBL_ENTRY _ZTV8S19249C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C13;
extern VTBL_ENTRY _ZTI9S19249C13[];
extern  VTBL_ENTRY _ZTV9S19249C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19249C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
static Base_Class bases_S19249C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19249C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C3,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19249C2,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C3,    ABISELECT(3840,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C3,    ABISELECT(6480,4844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C10,    ABISELECT(6480,4844), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19249C3,    ABISELECT(7056,5268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C2,    ABISELECT(7056,5268), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19249C3,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19249C10,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7472,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C3,    ABISELECT(4544,3384), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19249C9,    ABISELECT(3968,2960), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(4688,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C13,    ABISELECT(3840,2860), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C12,    ABISELECT(4976,3728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(6144,4584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19249C3,    ABISELECT(7760,5824), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19249C6[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C72v3Ev();
extern void _ZN8S19249C72v4Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
extern void _ZN8S19249C32v1Ev();
static  VTBL_ENTRY vtc_S19249C6[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v4Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  ABISELECT(-4544,-3384),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S19249C6[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C13__8S19249C6[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C99S19249C13__8S19249C6[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__8S19249C99S19249C13__8S19249C6[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C10__9S19249C13__8S19249C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__9S19249C13__8S19249C6[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C9__9S19249C13__8S19249C6[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
static  VTT_ENTRY vtt_S19249C6[] = {
  {&(_ZTV8S19249C6[6]),  6,51},
  {&(_tg__ZTV9S19249C13__8S19249C6[5]),  5,7},
  {&(_tg__ZTV8S19249C99S19249C13__8S19249C6[4]),  4,8},
  {&(_tg__ZTV8S19249C2__8S19249C99S19249C13__8S19249C6[4]),  4,6},
  {&(_tg__ZTV9S19249C10__9S19249C13__8S19249C6[6]),  6,10},
  {&(_tg__ZTV8S19249C2__9S19249C13__8S19249C6[4]),  4,6},
  {&(_tg__ZTV8S19249C9__9S19249C13__8S19249C6[4]),  4,8},
  {&(_ZTV8S19249C6[18]),  18,51},
  {&(_ZTV8S19249C6[37]),  37,51},
  {&(_ZTV8S19249C6[45]),  45,51},
  {&(_ZTV8S19249C6[24]),  24,51},
  {&(_ZTV8S19249C6[50]),  50,51},
};
extern VTBL_ENTRY _ZTI8S19249C6[];
extern  VTBL_ENTRY _ZTV8S19249C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C6[];
Class_Descriptor cd_S19249C6 = {  "S19249C6", // class name
  bases_S19249C6, 20,
  &(vtc_S19249C6[0]), // expected_vtbl_contents
  &(vtt_S19249C6[0]), // expected_vtt_contents
  ABISELECT(7888,5924), // object size
  NSPAIRA(_ZTI8S19249C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19249C6),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19249C6),12, //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  S19249C5  : virtual S19249C6 , virtual S19921C12 {
  ::S19249C9 s19249c5f0;
  int s19249c5f1;
  void *s19249c5f2;
  int s19249c5f3:32;
  int s19249c5f4;
  ::S19921C14 s19249c5f5;
  char  :0;
  void *s19249c5f7;
  long double s19249c5f8;
  virtual  ~S19249C5(); // _ZN8S19249C5D2Ev
  virtual void  v9(); // _ZN8S19249C52v9Ev
  S19249C5(); // tgen
};
//SIG(-1 S19249C5) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} BC5{ BC4 v3 FC4 FC4 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC7{ m Fc FU6 FC8{ v10 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU6[3] Fc} v4 v5 FU6 Fc Fc FC9{ BC10{ BC4 v6 v7 v8 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC7 BC4 VBC5 Fl FL} FC11{ v17 FD Fp FD[8] Fp[9] FC12{ m FD Fp[10] FD Fi:0 Fi FD FC13{ BC8 v16 FC8 FC8 FU6} Fc:8 FL FD FC14{ BC8 v13 v14 v15 FC8 Fi FC8 Fi Fc[6] Fc:4 Fp FC8 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC15{ BC4 VBC10 VBC5 BC9 BC7 v9 Fi} BC12 BC7 VBC4 Fp FD Fi Fi Fc[7]} VBC12 vd v1 FC9 Fi Fp Fi:32 Fi FC16{ VBC7 VBC17{ BC14 VBC7 BC8 VBC13 Fl FL} vd v11 v12 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD}


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

static void Test_S19249C5()
{
  extern Class_Descriptor cd_S19249C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,2270)];
    init_test(&cd_S19249C5, buf);
    S19249C5 *dp, &lv = *(dp=new (buf) S19249C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,9076), "sizeof(S19249C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C5)");
    /*is_ambiguous_... S19249C7::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C7*)(S19249C6*), ABISELECT(3024,2296), "S19249C5");
    check_base_class_offset(lv, (S19249C3*)(S19249C2*)(S19249C7*)(S19249C6*), ABISELECT(3152,2396), "S19249C5");
    check_base_class_offset(lv, (S19249C2*)(S19249C7*)(S19249C6*), ABISELECT(3152,2396), "S19249C5");
    check_base_class_offset(lv, (S19921C8*)(S19249C7*)(S19249C6*), ABISELECT(3568,2724), "S19249C5");
    check_base_class_offset(lv, (S19249C7*)(S19249C6*), ABISELECT(3024,2296), "S19249C5");
    /*is_ambiguous_... S19249C13::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C13*)(S19249C6*), ABISELECT(6864,5156), "S19249C5");
    /*is_ambiguous_... S19249C5::S19249C10 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C10*), ABISELECT(9504,7140), "S19249C5");
    /*is_ambiguous_... S19249C13::S19249C10 */ AMB_check_base_class_offset(lv, (S19249C10*)(S19249C13*)(S19249C6*), ABISELECT(9504,7140), "S19249C5");
    /*is_ambiguous_... S19249C5::S19249C2 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C2*), ABISELECT(10080,7564), "S19249C5");
    check_base_class_offset(lv, (S19249C2*)(S19249C13*)(S19249C6*), ABISELECT(10080,7564), "S19249C5");
    check_base_class_offset(lv, (S19249C2*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(10080,7564), "S19249C5");
    check_base_class_offset(lv, (S19249C3*)(S19249C10*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(6992,5256), "S19249C5");
    check_base_class_offset(lv, (S19249C10*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(6992,5256), "S19249C5");
    check_base_class_offset(lv, (S19921C8*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(10496,7892), "S19249C5");
    /*is_ambiguous_... S19249C9::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(7568,5680), "S19249C5");
    check_base_class_offset(lv, (S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(6992,5256), "S19249C5");
    /*is_ambiguous_... S19249C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19249C13*)(S19249C6*), ABISELECT(7712,5792), "S19249C5");
    check_base_class_offset(lv, (S19249C13*)(S19249C6*), ABISELECT(6864,5156), "S19249C5");
    check_base_class_offset(lv, (S19921C12*)(S19249C6*), ABISELECT(8000,6024), "S19249C5");
    /*is_ambiguous_... S19249C6::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19249C6*), ABISELECT(9168,6880), "S19249C5");
    /*is_ambiguous_... S19249C6::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C6*), ABISELECT(10784,8120), "S19249C5");
    check_base_class_offset(lv, (S19249C6*), ABISELECT(3024,2296), "S19249C5");
    /*is_ambiguous_... S19249C5::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*), ABISELECT(10912,8220), "S19249C5");
    check_field_offset(lv, s19249c5f0, ABISELECT(16,4), "S19249C5.s19249c5f0");
    check_field_offset(lv, s19249c5f1, ABISELECT(1440,1096), "S19249C5.s19249c5f1");
    check_field_offset(lv, s19249c5f2, ABISELECT(1448,1100), "S19249C5.s19249c5f2");
    set_bf_and_test(lv, s19249c5f3, ABISELECT(1456,1104), 0, 32, 1, "S19249C5");
    set_bf_and_test(lv, s19249c5f3, ABISELECT(1456,1104), 0, 32, hide_sll(1LL<<31), "S19249C5");
    check_field_offset(lv, s19249c5f4, ABISELECT(1460,1108), "S19249C5.s19249c5f4");
    check_field_offset(lv, s19249c5f5, ABISELECT(1472,1112), "S19249C5.s19249c5f5");
    check_field_offset(lv, s19249c5f7, ABISELECT(2992,2280), "S19249C5.s19249c5f7");
    check_field_offset(lv, s19249c5f8, ABISELECT(3008,2284), "S19249C5.s19249c5f8");
    test_class_info(&lv, &cd_S19249C5);
    dp->~S19249C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C5(Test_S19249C5, "S19249C5", ABISELECT(12080,9076));

#else // __cplusplus

extern void _ZN8S19249C5C1Ev();
extern void _ZN8S19249C5D2Ev();
Name_Map name_map_S19249C5[] = {
  NSPAIR(_ZN8S19249C5C1Ev),
  NSPAIR(_ZN8S19249C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C7;
extern VTBL_ENTRY _ZTI8S19249C7[];
extern  VTBL_ENTRY _ZTV8S19249C7[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C9;
extern VTBL_ENTRY _ZTI8S19249C9[];
extern  VTBL_ENTRY _ZTV8S19249C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C13;
extern VTBL_ENTRY _ZTI9S19249C13[];
extern  VTBL_ENTRY _ZTV9S19249C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19249C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C6;
extern VTBL_ENTRY _ZTI8S19249C6[];
extern  VTBL_ENTRY _ZTV8S19249C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C6[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
static Base_Class bases_S19249C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19249C3,    ABISELECT(3024,2296), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C3,    ABISELECT(3152,2396), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19249C2,    ABISELECT(3152,2396), //bcp->offset
    28, //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(3568,2724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C7,    ABISELECT(3024,2296), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19249C3,    ABISELECT(6864,5156), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C3,    ABISELECT(9504,7140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C10,    ABISELECT(9504,7140), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19249C3,    ABISELECT(10080,7564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C2,    ABISELECT(10080,7564), //bcp->offset
    60, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19249C3,    ABISELECT(6992,5256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19249C10,    ABISELECT(6992,5256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(10496,7892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C3,    ABISELECT(7568,5680), //bcp->offset
    47, //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19249C9,    ABISELECT(6992,5256), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7712,5792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C13,    ABISELECT(6864,5156), //bcp->offset
    32, //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(8000,6024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(9168,6880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C3,    ABISELECT(10784,8120), //bcp->offset
    66, //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_S19249C6,    ABISELECT(3024,2296), //bcp->offset
    11, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C12,    ABISELECT(10912,8220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19249C5[];
extern void _ZN8S19249C5D1Ev();
extern void _ZN8S19249C5D0Ev();
extern void _ZN8S19249C52v9Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C72v3Ev();
extern void _ZN8S19249C72v4Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
extern void _ZN8S19249C32v1Ev();
static  VTBL_ENTRY vtc_S19249C5[] = {
  ABISELECT(10912,8220),
  ABISELECT(10784,8120),
  ABISELECT(10496,7892),
  ABISELECT(10080,7564),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19249C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19249C52v9Ev,
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  ABISELECT(-3024,-2296),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v4Ev,
  ABISELECT(-3152,-2396),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-6864,-5156),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-6992,-5256),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  ABISELECT(-7568,-5680),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7140),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  0,
  0,
  ABISELECT(-10080,-7564),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
  0,
  ABISELECT(-10784,-8120),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S19249C5[];
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C72v3Ev();
extern void _ZN8S19249C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C6__8S19249C5[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v4Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C138S19249C6__8S19249C5[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C99S19249C138S19249C6__8S19249C5[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__8S19249C99S19249C138S19249C6__8S19249C5[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C10__9S19249C138S19249C6__8S19249C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__9S19249C138S19249C6__8S19249C5[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C9__9S19249C138S19249C6__8S19249C5[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C13__8S19249C6__8S19249C5[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C10__8S19249C6__8S19249C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__A1__8S19249C6__8S19249C5[] = {
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C99S19249C13__8S19249C6__8S19249C5[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C3__A7__8S19249C6__8S19249C5[] = {
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
};
static  VTT_ENTRY vtt_S19249C5[] = {
  {&(_ZTV8S19249C5[8]),  8,70},
  {&(_ZTV8S19249C5[25]),  25,70},
  {&(_ZTV8S19249C5[30]),  30,70},
  {&(_ZTV8S19249C5[37]),  37,70},
  {&(_ZTV8S19249C5[56]),  56,70},
  {&(_ZTV8S19249C5[64]),  64,70},
  {&(_ZTV8S19249C5[43]),  43,70},
  {&(_ZTV8S19249C5[49]),  49,70},
  {&(_ZTV8S19249C5[69]),  69,70},
  {&(_tg__ZTV8S19249C6__8S19249C5[6]),  6,9},
  {&(_tg__ZTV9S19249C138S19249C6__8S19249C5[5]),  5,7},
  {&(_tg__ZTV8S19249C99S19249C138S19249C6__8S19249C5[4]),  4,8},
  {&(_tg__ZTV8S19249C2__8S19249C99S19249C138S19249C6__8S19249C5[4]),  4,6},
  {&(_tg__ZTV9S19249C10__9S19249C138S19249C6__8S19249C5[6]),  6,10},
  {&(_tg__ZTV8S19249C2__9S19249C138S19249C6__8S19249C5[4]),  4,6},
  {&(_tg__ZTV8S19249C9__9S19249C138S19249C6__8S19249C5[4]),  4,8},
  {&(_tg__ZTV9S19249C13__8S19249C6__8S19249C5[5]),  5,7},
  {&(_tg__ZTV9S19249C10__8S19249C6__8S19249C5[6]),  6,10},
  {&(_tg__ZTV8S19249C2__A1__8S19249C6__8S19249C5[4]),  4,6},
  {&(_tg__ZTV8S19249C99S19249C13__8S19249C6__8S19249C5[4]),  4,8},
  {&(_tg__ZTV8S19249C3__A7__8S19249C6__8S19249C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19249C5[];
extern  VTBL_ENTRY _ZTV8S19249C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C5[];
Class_Descriptor cd_S19249C5 = {  "S19249C5", // class name
  bases_S19249C5, 22,
  &(vtc_S19249C5[0]), // expected_vtbl_contents
  &(vtt_S19249C5[0]), // expected_vtt_contents
  ABISELECT(12080,9076), // object size
  NSPAIRA(_ZTI8S19249C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19249C5),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19249C5),21, //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  S19249C1  : virtual S19249C2 , virtual S19249C5 , virtual S19249C7 , S19921C12 {
  int s19249c1f0;
  int s19249c1f1;
  char s19249c1f2;
  ::S2973C16 s19249c1f3[6];
  virtual  ~S19249C1(); // _ZN8S19249C1D2Ev
  S19249C1(); // tgen
};
//SIG(1 S19249C1) C1{ VBC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} v2 FC3 FC3 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} VBC5{ VBC6{ BC7{ BC3 BC2 BC8{ m Fc FU4 FC9{ v11 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU4[3] Fc} v3 v4 FU4 Fc Fc FC10{ BC11{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC8 BC3 VBC2 Fl FL} FC12{ v20 FD Fp FD[8] Fp[9] FC13{ m FD Fp[10] FD Fi:0 Fi FD FC14{ BC9 v10 FC9 FC9 FU4} Fc:8 FL FD FC15{ BC9 v12 v13 v14 FC9 Fi FC9 Fi Fc[6] Fc:4 Fp FC9 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC16{ BC3 VBC11 VBC2 BC10 BC8 v8 Fi} BC13 BC8 VBC3 Fp FD Fi Fi Fc[7]} VBC13 vd v9 FC10 Fi Fp Fi:32 Fi FC17{ VBC8 VBC18{ BC15 VBC8 BC9 VBC14 Fl FL} vd v18 v19 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD} VBC7 BC13 vd Fi Fi Fc FC19{ v15 FC20{ BC21{ v17 FL[8] Fc[4] Fi:7 Fi FD FL} v16 FC21 FC21 FU4} Fi[7] Fi Fp Fi}[6]}


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

static void Test_S19249C1()
{
  extern Class_Descriptor cd_S19249C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1251,3761)];
    init_test(&cd_S19249C1, buf);
    S19249C1 *dp, &lv = *(dp=new (buf) S19249C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20000,15040), "sizeof(S19249C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19249C1)");
    /*is_ambiguous_... S19249C1::S19249C2 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C2*), ABISELECT(4080,3104), "S19249C1");
    /*is_ambiguous_... S19249C1::S19249C2 */ AMB_check_base_class_offset(lv, (S19249C2*), ABISELECT(4080,3104), "S19249C1");
    check_base_class_offset(lv, (S19249C2*)(S19249C13*)(S19249C6*), ABISELECT(4080,3104), "S19249C1");
    check_base_class_offset(lv, (S19249C2*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(4080,3104), "S19249C1");
    /*is_ambiguous_... S19249C7::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C7*)(S19249C6*), ABISELECT(7520,5728), "S19249C1");
    check_base_class_offset(lv, (S19249C3*)(S19249C2*)(S19249C7*)(S19249C6*), ABISELECT(7648,5828), "S19249C1");
    check_base_class_offset(lv, (S19249C2*)(S19249C7*)(S19249C6*), ABISELECT(7648,5828), "S19249C1");
    check_base_class_offset(lv, (S19921C8*)(S19249C7*)(S19249C6*), ABISELECT(8064,6156), "S19249C1");
    check_base_class_offset(lv, (S19249C7*)(S19249C6*), ABISELECT(7520,5728), "S19249C1");
    /*is_ambiguous_... S19249C13::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C13*)(S19249C6*), ABISELECT(11360,8588), "S19249C1");
    /*is_ambiguous_... S19249C1::S19249C10 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C10*), ABISELECT(14000,10572), "S19249C1");
    /*is_ambiguous_... S19249C13::S19249C10 */ AMB_check_base_class_offset(lv, (S19249C10*)(S19249C13*)(S19249C6*), ABISELECT(14000,10572), "S19249C1");
    check_base_class_offset(lv, (S19249C3*)(S19249C10*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(11488,8688), "S19249C1");
    check_base_class_offset(lv, (S19249C10*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(11488,8688), "S19249C1");
    check_base_class_offset(lv, (S19921C8*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(14576,10996), "S19249C1");
    /*is_ambiguous_... S19249C9::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(12064,9112), "S19249C1");
    check_base_class_offset(lv, (S19249C9*)(S19249C13*)(S19249C6*), ABISELECT(11488,8688), "S19249C1");
    /*is_ambiguous_... S19249C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19249C13*)(S19249C6*), ABISELECT(12208,9224), "S19249C1");
    check_base_class_offset(lv, (S19249C13*)(S19249C6*), ABISELECT(11360,8588), "S19249C1");
    check_base_class_offset(lv, (S19921C12*)(S19249C6*), ABISELECT(12496,9456), "S19249C1");
    /*is_ambiguous_... S19249C6::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19249C6*), ABISELECT(13664,10312), "S19249C1");
    /*is_ambiguous_... S19249C6::S19249C3 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C6*), ABISELECT(14864,11224), "S19249C1");
    check_base_class_offset(lv, (S19249C6*)(S19249C5*), ABISELECT(7520,5728), "S19249C1");
    /*is_ambiguous_... S19249C5::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*)(S19249C5*), ABISELECT(14992,11324), "S19249C1");
    check_base_class_offset(lv, (S19249C5*), ABISELECT(4496,3432), "S19249C1");
    /*is_ambiguous_... S19249C1::S19249C7 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C7*), ABISELECT(16160,12180), "S19249C1");
    /*is_ambiguous_... S19249C1::S19249C7 */ AMB_check_base_class_offset(lv, (S19249C3*)(S19249C2*)(S19249C7*), ABISELECT(16288,12280), "S19249C1");
    /*is_ambiguous_... S19249C1::S19249C7 */ AMB_check_base_class_offset(lv, (S19249C2*)(S19249C7*), ABISELECT(16288,12280), "S19249C1");
    /*is_ambiguous_... S19249C1::S19249C7 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19249C7*), ABISELECT(16704,12608), "S19249C1");
    /*is_ambiguous_... S19249C1::S19249C7 */ AMB_check_base_class_offset(lv, (S19249C7*), ABISELECT(16160,12180), "S19249C1");
    /*is_ambiguous_... S19249C1::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*), ABISELECT(16,4), "S19249C1");
    check_field_offset(lv, s19249c1f0, ABISELECT(1184,860), "S19249C1.s19249c1f0");
    check_field_offset(lv, s19249c1f1, ABISELECT(1188,864), "S19249C1.s19249c1f1");
    check_field_offset(lv, s19249c1f2, ABISELECT(1192,868), "S19249C1.s19249c1f2");
    check_field_offset(lv, s19249c1f3, ABISELECT(1200,872), "S19249C1.s19249c1f3");
    test_class_info(&lv, &cd_S19249C1);
    dp->~S19249C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19249C1(Test_S19249C1, "S19249C1", ABISELECT(20000,15040));

#else // __cplusplus

extern void _ZN8S19249C1C1Ev();
extern void _ZN8S19249C1D2Ev();
Name_Map name_map_S19249C1[] = {
  NSPAIR(_ZN8S19249C1C1Ev),
  NSPAIR(_ZN8S19249C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C7;
extern VTBL_ENTRY _ZTI8S19249C7[];
extern  VTBL_ENTRY _ZTV8S19249C7[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C10;
extern VTBL_ENTRY _ZTI9S19249C10[];
extern  VTBL_ENTRY _ZTV9S19249C10[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C9;
extern VTBL_ENTRY _ZTI8S19249C9[];
extern  VTBL_ENTRY _ZTV8S19249C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C9[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C13;
extern VTBL_ENTRY _ZTI9S19249C13[];
extern  VTBL_ENTRY _ZTV9S19249C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19249C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C6;
extern VTBL_ENTRY _ZTI8S19249C6[];
extern  VTBL_ENTRY _ZTV8S19249C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C6[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19249C5;
extern VTBL_ENTRY _ZTI8S19249C5[];
extern  VTBL_ENTRY _ZTV8S19249C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C5[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C3;
extern VTBL_ENTRY _ZTI8S19249C3[];
extern  VTBL_ENTRY _ZTV8S19249C3[];
extern Class_Descriptor cd_S19249C2;
extern VTBL_ENTRY _ZTI8S19249C2[];
extern  VTBL_ENTRY _ZTV8S19249C2[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19249C7;
extern VTBL_ENTRY _ZTI8S19249C7[];
extern  VTBL_ENTRY _ZTV8S19249C7[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
static Base_Class bases_S19249C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19249C3,    ABISELECT(4080,3104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19249C2,    ABISELECT(4080,3104), //bcp->offset
    12, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19249C3,    ABISELECT(7520,5728), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C3,    ABISELECT(7648,5828), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C2,    ABISELECT(7648,5828), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(8064,6156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C7,    ABISELECT(7520,5728), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19249C3,    ABISELECT(11360,8588), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C3,    ABISELECT(14000,10572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C10,    ABISELECT(14000,10572), //bcp->offset
    70, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19249C3,    ABISELECT(11488,8688), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19249C10,    ABISELECT(11488,8688), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(14576,10996), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C3,    ABISELECT(12064,9112), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19249C9,    ABISELECT(11488,8688), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(12208,9224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C13,    ABISELECT(11360,8588), //bcp->offset
    52, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(12496,9456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(13664,10312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C3,    ABISELECT(14864,11224), //bcp->offset
    80, //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
    20, //immediately_derived
  0, 1},
  {&cd_S19249C6,    ABISELECT(7520,5728), //bcp->offset
    31, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19921C12,    ABISELECT(14992,11324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C5,    ABISELECT(4496,3432), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19249C3,    ABISELECT(16160,12180), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S19249C3,    ABISELECT(16288,12280), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19249C2,    ABISELECT(16288,12280), //bcp->offset
    93, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(16704,12608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19249C7,    ABISELECT(16160,12180), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C12,    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 _ZTI8S19249C1[];
extern void _ZN8S19249C1D1Ev();
extern void _ZN8S19249C1D0Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S19249C1D1Ev,_ZTv0_n36_N8S19249C1D1Ev)();
extern void ABISELECT(_ZThn4496_N8S19249C1D1Ev,_ZThn3432_N8S19249C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19249C1D0Ev,_ZTv0_n36_N8S19249C1D0Ev)();
extern void ABISELECT(_ZThn4496_N8S19249C1D0Ev,_ZThn3432_N8S19249C1D0Ev)() __attribute__((weak));
extern void _ZN8S19249C52v9Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C72v3Ev();
extern void _ZN8S19249C72v4Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C72v3Ev();
extern void _ZN8S19249C72v4Ev();
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY vtc_S19249C1[] = {
  ABISELECT(16160,12180),
  ABISELECT(14992,11324),
  ABISELECT(14864,11224),
  ABISELECT(14576,10996),
  ABISELECT(14000,10572),
  ABISELECT(7520,5728),
  ABISELECT(4496,3432),
  ABISELECT(4080,3104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19249C1D0Ev,
  0,
  0,
  ABISELECT(-4080,-3104),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
  0,
  ABISELECT(-4496,-3432),
  ABISELECT(10496,7892),
  ABISELECT(10368,7792),
  ABISELECT(10080,7564),
  ABISELECT(-416,-328),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  ABISELECT(-4496,-3432),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19249C1D1Ev,_ZTv0_n36_N8S19249C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19249C1D0Ev,_ZTv0_n36_N8S19249C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19249C52v9Ev,
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7344,5496),
  ABISELECT(7056,5268),
  ABISELECT(-3440,-2624),
  ABISELECT(6480,4844),
  ABISELECT(-7520,-5728),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v4Ev,
  ABISELECT(-7648,-5828),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
  ABISELECT(3216,2408),
  ABISELECT(-7280,-5484),
  ABISELECT(2640,1984),
  ABISELECT(-11360,-8588),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
  ABISELECT(-7408,-5584),
  ABISELECT(3088,2308),
  ABISELECT(-11488,-8688),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  ABISELECT(-12064,-9112),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-14000,-10572),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
  0,
  ABISELECT(-14864,-11224),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(-16160,-12180),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v4Ev,
  ABISELECT(-16288,-12280),
  (VTBL_ENTRY)&(_ZTI8S19249C1[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S19249C1[];
extern void _ZN8S19249C5D1Ev();
extern void _ZN8S19249C5D0Ev();
extern void _ZN8S19249C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C5__8S19249C1[] = {
  ABISELECT(10496,7892),
  ABISELECT(10368,7792),
  ABISELECT(10080,7564),
  ABISELECT(-416,-328),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19249C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19249C52v9Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C72v3Ev();
extern void _ZN8S19249C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C6__8S19249C5__8S19249C1[] = {
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7344,5496),
  ABISELECT(7056,5268),
  ABISELECT(-3440,-2624),
  ABISELECT(6480,4844),
  ABISELECT(-3024,-2296),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v4Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C28S19249C78S19249C6__8S19249C5__8S19249C1[] = {
  ABISELECT(-3152,-2396),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C138S19249C6__8S19249C5__8S19249C1[] = {
  ABISELECT(3216,2408),
  ABISELECT(-7280,-5484),
  ABISELECT(2640,1984),
  ABISELECT(-6864,-5156),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C10__8S19249C5__8S19249C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7140),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__A1__8S19249C5__8S19249C1[] = {
  0,
  0,
  ABISELECT(416,328),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C99S19249C138S19249C6__8S19249C5__8S19249C1[] = {
  ABISELECT(-7408,-5584),
  ABISELECT(3088,2308),
  ABISELECT(-6992,-5256),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C38S19249C99S19249C138S19249C6__A6__8S19249C5__8S19249C1[] = {
  ABISELECT(-7568,-5680),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
};
extern void _ZN8S19249C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C3__A7__8S19249C5__8S19249C1[] = {
  0,
  ABISELECT(-10368,-7792),
  (VTBL_ENTRY)&(_ZTI8S19249C5[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C72v3Ev();
extern void _ZN8S19249C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C6__8S19249C1[] = {
  ABISELECT(7344,5496),
  ABISELECT(7056,5268),
  ABISELECT(-3440,-2624),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19249C72v4Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C138S19249C6__8S19249C1[] = {
  ABISELECT(3216,2408),
  ABISELECT(-7280,-5484),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C99S19249C138S19249C6__8S19249C1[] = {
  ABISELECT(-7408,-5584),
  ABISELECT(3088,2308),
  0,
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__8S19249C99S19249C138S19249C6__8S19249C1[] = {
  0,
  0,
  ABISELECT(7408,5584),
  (VTBL_ENTRY)&(_ZTI8S19249C9[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C10__9S19249C138S19249C6__8S19249C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__9S19249C138S19249C6__8S19249C1[] = {
  0,
  0,
  ABISELECT(7280,5484),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C9__9S19249C138S19249C6__8S19249C1[] = {
  ABISELECT(-7408,-5584),
  ABISELECT(3088,2308),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19249C13[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C13__8S19249C6__8S19249C1[] = {
  ABISELECT(3216,2408),
  ABISELECT(-7280,-5484),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C132v8Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19249C10__8S19249C6__8S19249C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN8S19249C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C2__A1__8S19249C6__8S19249C1[] = {
  0,
  0,
  ABISELECT(3440,2624),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19249C22v2Ev,
};
extern void _ZN8S19249C32v1Ev();
extern void _ZN9S19249C102v5Ev();
extern void _ZN9S19249C102v6Ev();
extern void _ZN9S19249C102v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C99S19249C13__8S19249C6__8S19249C1[] = {
  ABISELECT(-7408,-5584),
  ABISELECT(3088,2308),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v5Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v6Ev,
  (VTBL_ENTRY)&_ZN9S19249C102v7Ev,
};
extern void _ZN8S19249C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19249C3__A7__8S19249C6__8S19249C1[] = {
  0,
  ABISELECT(-7344,-5496),
  (VTBL_ENTRY)&(_ZTI8S19249C6[0]),
  (VTBL_ENTRY)&_ZN8S19249C32v1Ev,
};
static  VTT_ENTRY vtt_S19249C1[] = {
  {&(_ZTV8S19249C1[10]),  10,97},
  {&(_ZTV8S19249C1[16]),  16,97},
  {&(_ZTV8S19249C1[28]),  28,97},
  {&(_ZTV8S19249C1[45]),  45,97},
  {&(_ZTV8S19249C1[50]),  50,97},
  {&(_ZTV8S19249C1[57]),  57,97},
  {&(_ZTV8S19249C1[76]),  76,97},
  {&(_ZTV8S19249C1[63]),  63,97},
  {&(_ZTV8S19249C1[69]),  69,97},
  {&(_ZTV8S19249C1[83]),  83,97},
  {&(_ZTV8S19249C1[90]),  90,97},
  {&(_ZTV8S19249C1[95]),  95,97},
  {&(_tg__ZTV8S19249C5__8S19249C1[8]),  8,11},
  {&(_tg__ZTV8S19249C6__8S19249C5__8S19249C1[14]),  14,17},
  {&(_tg__ZTV8S19249C28S19249C78S19249C6__8S19249C5__8S19249C1[2]),  2,4},
  {&(_tg__ZTV9S19249C138S19249C6__8S19249C5__8S19249C1[5]),  5,7},
  {&(_tg__ZTV9S19249C10__8S19249C5__8S19249C1[6]),  6,10},
  {&(_tg__ZTV8S19249C2__A1__8S19249C5__8S19249C1[4]),  4,6},
  {&(_tg__ZTV8S19249C99S19249C138S19249C6__8S19249C5__8S19249C1[4]),  4,8},
  {&(_tg__ZTV8S19249C38S19249C99S19249C138S19249C6__A6__8S19249C5__8S19249C1[2]),  2,3},
  {&(_tg__ZTV8S19249C3__A7__8S19249C5__8S19249C1[3]),  3,4},
  {&(_tg__ZTV8S19249C6__8S19249C1[6]),  6,9},
  {&(_tg__ZTV9S19249C138S19249C6__8S19249C1[5]),  5,7},
  {&(_tg__ZTV8S19249C99S19249C138S19249C6__8S19249C1[4]),  4,8},
  {&(_tg__ZTV8S19249C2__8S19249C99S19249C138S19249C6__8S19249C1[4]),  4,6},
  {&(_tg__ZTV9S19249C10__9S19249C138S19249C6__8S19249C1[6]),  6,10},
  {&(_tg__ZTV8S19249C2__9S19249C138S19249C6__8S19249C1[4]),  4,6},
  {&(_tg__ZTV8S19249C9__9S19249C138S19249C6__8S19249C1[4]),  4,8},
  {&(_tg__ZTV9S19249C13__8S19249C6__8S19249C1[5]),  5,7},
  {&(_tg__ZTV9S19249C10__8S19249C6__8S19249C1[6]),  6,10},
  {&(_tg__ZTV8S19249C2__A1__8S19249C6__8S19249C1[4]),  4,6},
  {&(_tg__ZTV8S19249C99S19249C13__8S19249C6__8S19249C1[4]),  4,8},
  {&(_tg__ZTV8S19249C3__A7__8S19249C6__8S19249C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19249C1[];
extern  VTBL_ENTRY _ZTV8S19249C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19249C1[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19249C1D0Ev,_ZTv0_n36_N8S19249C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S19249C1D0Ev,_ZThn3432_N8S19249C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19249C1D1Ev,_ZTv0_n36_N8S19249C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S19249C1D1Ev,_ZThn3432_N8S19249C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19249C1 = {  "S19249C1", // class name
  bases_S19249C1, 29,
  &(vtc_S19249C1[0]), // expected_vtbl_contents
  &(vtt_S19249C1[0]), // expected_vtt_contents
  ABISELECT(20000,15040), // object size
  NSPAIRA(_ZTI8S19249C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19249C1),97, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19249C1),33, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18924C2  {
  __tsi64 s18924c2f0;
  void *s18924c2f1;
  char s18924c2f2:6;
  long double s18924c2f3;
  char s18924c2f4[7];
  __tsi64 s18924c2f5;
  char s18924c2f6[9];
  long double s18924c2f7[8];
  void *s18924c2f8;
  short s18924c2f9;
  void *s18924c2f10[7];
  int s18924c2f11;
  void *s18924c2f12;
  virtual void  v3(); // _ZN8S18924C22v3Ev
  virtual void  v4(); // _ZN8S18924C22v4Ev
  ~S18924C2(); // tgen
  S18924C2(); // tgen
};
//SIG(-1 S18924C2) C1{ v1 v2 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}


void  S18924C2 ::v3(){vfunc_called(this, "_ZN8S18924C22v3Ev");}
void  S18924C2 ::v4(){vfunc_called(this, "_ZN8S18924C22v4Ev");}
S18924C2 ::~S18924C2(){ note_dtor("S18924C2", this);} // tgen
S18924C2 ::S18924C2(){ note_ctor("S18924C2", this);} // tgen

static void Test_S18924C2()
{
  extern Class_Descriptor cd_S18924C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,51)];
    init_test(&cd_S18924C2, buf);
    S18924C2 *dp, &lv = *(dp=new (buf) S18924C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S18924C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C2)");
    check_field_offset(lv, s18924c2f0, ABISELECT(8,4), "S18924C2.s18924c2f0");
    check_field_offset(lv, s18924c2f1, ABISELECT(16,12), "S18924C2.s18924c2f1");
    set_bf_and_test(lv, s18924c2f2, ABISELECT(24,16), 0, 6, 1, "S18924C2");
    set_bf_and_test(lv, s18924c2f2, ABISELECT(24,16), 0, 6, hide_sll(1LL<<5), "S18924C2");
    check_field_offset(lv, s18924c2f3, ABISELECT(32,20), "S18924C2.s18924c2f3");
    check_field_offset(lv, s18924c2f4, ABISELECT(48,32), "S18924C2.s18924c2f4");
    check_field_offset(lv, s18924c2f5, ABISELECT(56,40), "S18924C2.s18924c2f5");
    check_field_offset(lv, s18924c2f6, ABISELECT(64,48), "S18924C2.s18924c2f6");
    check_field_offset(lv, s18924c2f7, ABISELECT(80,60), "S18924C2.s18924c2f7");
    check_field_offset(lv, s18924c2f8, ABISELECT(208,156), "S18924C2.s18924c2f8");
    check_field_offset(lv, s18924c2f9, ABISELECT(216,160), "S18924C2.s18924c2f9");
    check_field_offset(lv, s18924c2f10, ABISELECT(224,164), "S18924C2.s18924c2f10");
    check_field_offset(lv, s18924c2f11, ABISELECT(280,192), "S18924C2.s18924c2f11");
    check_field_offset(lv, s18924c2f12, ABISELECT(288,196), "S18924C2.s18924c2f12");
    test_class_info(&lv, &cd_S18924C2);
    dp->~S18924C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C2(Test_S18924C2, "S18924C2", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN8S18924C2C1Ev();
extern void _ZN8S18924C2D1Ev();
Name_Map name_map_S18924C2[] = {
  NSPAIR(_ZN8S18924C2C1Ev),
  NSPAIR(_ZN8S18924C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18924C2[];
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
static  VTBL_ENTRY vtc_S18924C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C2[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
};
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
Class_Descriptor cd_S18924C2 = {  "S18924C2", // class name
  0,0,//no base classes
  &(vtc_S18924C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI8S18924C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18924C2),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  S18924C5  {
  ::S18924C2 s18924c5f0[8];
  ::S18924C2 s18924c5f1[2];
  void *s18924c5f2;
  int s18924c5f3;
  ::S468C7 s18924c5f4;
  ::S18924C2 s18924c5f5[5];
  void *s18924c5f6[5];
  ::S18924C2 s18924c5f7[5];
  virtual void  v5(); // _ZN8S18924C52v5Ev
  ~S18924C5(); // tgen
  S18924C5(); // tgen
};
//SIG(-1 S18924C5) C1{ v1 FC2{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC2[2] Fp Fi FC3{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]}


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

static void Test_S18924C5()
{
  extern Class_Descriptor cd_S18924C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(391,1020)];
    init_test(&cd_S18924C5, buf);
    S18924C5 *dp, &lv = *(dp=new (buf) S18924C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6240,4076), "sizeof(S18924C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C5)");
    check_field_offset(lv, s18924c5f0, ABISELECT(16,4), "S18924C5.s18924c5f0");
    check_field_offset(lv, s18924c5f1, ABISELECT(2448,1604), "S18924C5.s18924c5f1");
    check_field_offset(lv, s18924c5f2, ABISELECT(3056,2004), "S18924C5.s18924c5f2");
    check_field_offset(lv, s18924c5f3, ABISELECT(3064,2008), "S18924C5.s18924c5f3");
    check_field_offset(lv, s18924c5f4, ABISELECT(3072,2012), "S18924C5.s18924c5f4");
    check_field_offset(lv, s18924c5f5, ABISELECT(3152,2056), "S18924C5.s18924c5f5");
    check_field_offset(lv, s18924c5f6, ABISELECT(4672,3056), "S18924C5.s18924c5f6");
    check_field_offset(lv, s18924c5f7, ABISELECT(4720,3076), "S18924C5.s18924c5f7");
    test_class_info(&lv, &cd_S18924C5);
    dp->~S18924C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C5(Test_S18924C5, "S18924C5", ABISELECT(6240,4076));

#else // __cplusplus

extern void _ZN8S18924C5C1Ev();
extern void _ZN8S18924C5D1Ev();
Name_Map name_map_S18924C5[] = {
  NSPAIR(_ZN8S18924C5C1Ev),
  NSPAIR(_ZN8S18924C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18924C5[];
extern void _ZN8S18924C52v5Ev();
static  VTBL_ENTRY vtc_S18924C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C5[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
};
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
Class_Descriptor cd_S18924C5 = {  "S18924C5", // class name
  0,0,//no base classes
  &(vtc_S18924C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6240,4076), // object size
  NSPAIRA(_ZTI8S18924C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18924C5),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  S18924C7  : S18924C5 , S468C7 , virtual S18924C2 {
  int s18924c7f0;
  short s18924c7f1;
  unsigned short s18924c7f2:1;
  void *s18924c7f3;
  long s18924c7f4;
  ::S18924C5 s18924c7f5;
  int s18924c7f6[2];
  char s18924c7f7[3];
  int s18924c7f8;
  virtual  ~S18924C7(); // _ZN8S18924C7D2Ev
  virtual void  v6(); // _ZN8S18924C72v6Ev
  S18924C7(); // tgen
};
//SIG(-1 S18924C7) C1{ BC2{ v2 FC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC4 VBC3 vd v1 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi}


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

static void Test_S18924C7()
{
  extern Class_Descriptor cd_S18924C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(808,2108)];
    init_test(&cd_S18924C7, buf);
    S18924C7 *dp, &lv = *(dp=new (buf) S18924C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12912,8428), "sizeof(S18924C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C7)");
    check_base_class_offset(lv, (S18924C5*), 0, "S18924C7");
    check_base_class_offset(lv, (S468C7*), ABISELECT(6240,4076), "S18924C7");
    check_base_class_offset(lv, (S18924C2*), ABISELECT(12608,8228), "S18924C7");
    check_field_offset(lv, s18924c7f0, ABISELECT(6320,4120), "S18924C7.s18924c7f0");
    check_field_offset(lv, s18924c7f1, ABISELECT(6324,4124), "S18924C7.s18924c7f1");
    set_bf_and_test(lv, s18924c7f2, ABISELECT(6326,4126), 0, 1, 1, "S18924C7");
    check_field_offset(lv, s18924c7f3, ABISELECT(6328,4128), "S18924C7.s18924c7f3");
    check_field_offset(lv, s18924c7f4, ABISELECT(6336,4132), "S18924C7.s18924c7f4");
    check_field_offset(lv, s18924c7f5, ABISELECT(6352,4136), "S18924C7.s18924c7f5");
    check_field_offset(lv, s18924c7f6, ABISELECT(12592,8212), "S18924C7.s18924c7f6");
    check_field_offset(lv, s18924c7f7, ABISELECT(12600,8220), "S18924C7.s18924c7f7");
    check_field_offset(lv, s18924c7f8, ABISELECT(12604,8224), "S18924C7.s18924c7f8");
    test_class_info(&lv, &cd_S18924C7);
    dp->~S18924C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C7(Test_S18924C7, "S18924C7", ABISELECT(12912,8428));

#else // __cplusplus

extern void _ZN8S18924C7C1Ev();
extern void _ZN8S18924C7D2Ev();
Name_Map name_map_S18924C7[] = {
  NSPAIR(_ZN8S18924C7C1Ev),
  NSPAIR(_ZN8S18924C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
static Base_Class bases_S18924C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18924C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S468C7,    ABISELECT(6240,4076), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18924C2,    ABISELECT(12608,8228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18924C7[];
extern void _ZN8S18924C52v5Ev();
extern void _ZN8S18924C7D1Ev();
extern void _ZN8S18924C7D0Ev();
extern void _ZN8S18924C72v6Ev();
extern void ABISELECT(_ZThn6240_N8S18924C7D1Ev,_ZThn4076_N8S18924C7D1Ev)();
extern void ABISELECT(_ZThn6240_N8S18924C7D0Ev,_ZThn4076_N8S18924C7D0Ev)();
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
static  VTBL_ENTRY vtc_S18924C7[] = {
  ABISELECT(12608,8228),
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C7[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18924C7D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C7D0Ev,
  (VTBL_ENTRY)&_ZN8S18924C72v6Ev,
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI8S18924C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N8S18924C7D1Ev,_ZThn4076_N8S18924C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N8S18924C7D0Ev,_ZThn4076_N8S18924C7D0Ev),
  0,
  0,
  ABISELECT(-12608,-8228),
  (VTBL_ENTRY)&(_ZTI8S18924C7[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S18924C7[];
static  VTT_ENTRY vtt_S18924C7[] = {
  {&(_ZTV8S18924C7[3]),  3,17},
  {&(_ZTV8S18924C7[15]),  15,17},
};
extern VTBL_ENTRY _ZTI8S18924C7[];
extern  VTBL_ENTRY _ZTV8S18924C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18924C7[];
Class_Descriptor cd_S18924C7 = {  "S18924C7", // class name
  bases_S18924C7, 3,
  &(vtc_S18924C7[0]), // expected_vtbl_contents
  &(vtt_S18924C7[0]), // expected_vtt_contents
  ABISELECT(12912,8428), // object size
  NSPAIRA(_ZTI8S18924C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S18924C7),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18924C7),2, //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  S18924C10  {
  char s18924c10f0;
  __tsi64 s18924c10f1[10];
  long double s18924c10f2;
  ::S18924C2 s18924c10f3;
  void *s18924c10f4;
  short s18924c10f5;
  void *s18924c10f6;
  int s18924c10f7;
  virtual void  v7(); // _ZN9S18924C102v7Ev
  virtual void  v8(); // _ZN9S18924C102v8Ev
  ~S18924C10(); // tgen
  S18924C10(); // tgen
};
//SIG(-1 S18924C10) C1{ v1 v2 Fc FL[10] FD FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fp Fs Fp Fi}


void  S18924C10 ::v7(){vfunc_called(this, "_ZN9S18924C102v7Ev");}
void  S18924C10 ::v8(){vfunc_called(this, "_ZN9S18924C102v8Ev");}
S18924C10 ::~S18924C10(){ note_dtor("S18924C10", this);} // tgen
S18924C10 ::S18924C10(){ note_ctor("S18924C10", this);} // tgen

static void Test_S18924C10()
{
  extern Class_Descriptor cd_S18924C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,80)];
    init_test(&cd_S18924C10, buf);
    S18924C10 *dp, &lv = *(dp=new (buf) S18924C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,316), "sizeof(S18924C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C10)");
    check_field_offset(lv, s18924c10f0, ABISELECT(8,4), "S18924C10.s18924c10f0");
    check_field_offset(lv, s18924c10f1, ABISELECT(16,8), "S18924C10.s18924c10f1");
    check_field_offset(lv, s18924c10f2, ABISELECT(96,88), "S18924C10.s18924c10f2");
    check_field_offset(lv, s18924c10f3, ABISELECT(112,100), "S18924C10.s18924c10f3");
    check_field_offset(lv, s18924c10f4, ABISELECT(416,300), "S18924C10.s18924c10f4");
    check_field_offset(lv, s18924c10f5, ABISELECT(424,304), "S18924C10.s18924c10f5");
    check_field_offset(lv, s18924c10f6, ABISELECT(432,308), "S18924C10.s18924c10f6");
    check_field_offset(lv, s18924c10f7, ABISELECT(440,312), "S18924C10.s18924c10f7");
    test_class_info(&lv, &cd_S18924C10);
    dp->~S18924C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C10(Test_S18924C10, "S18924C10", ABISELECT(448,316));

#else // __cplusplus

extern void _ZN9S18924C10C1Ev();
extern void _ZN9S18924C10D1Ev();
Name_Map name_map_S18924C10[] = {
  NSPAIR(_ZN9S18924C10C1Ev),
  NSPAIR(_ZN9S18924C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S18924C10[];
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY vtc_S18924C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18924C10[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
extern VTBL_ENTRY _ZTI9S18924C10[];
extern  VTBL_ENTRY _ZTV9S18924C10[];
Class_Descriptor cd_S18924C10 = {  "S18924C10", // class name
  0,0,//no base classes
  &(vtc_S18924C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,316), // object size
  NSPAIRA(_ZTI9S18924C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S18924C10),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  S18924C11  : S18924C2 , virtual S18924C5 , S468C7 , virtual S18924C10 {
  __tsi64 s18924c11f0:2;
  long double s18924c11f1[7];
  void *s18924c11f2;
  ::S18924C5 s18924c11f3;
  void *s18924c11f4;
  int s18924c11f5;
  void *s18924c11f6[2];
  ::S468C7 s18924c11f7;
  ::S18924C2 s18924c11f8;
  long double s18924c11f9[8];
  virtual void  v9(); // _ZN9S18924C112v9Ev
  ~S18924C11(); // tgen
  S18924C11(); // tgen
};
//SIG(-1 S18924C11) C1{ BC2{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC3{ v4 FC2[8] FC2[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]} BC4 VBC5{ v5 v6 Fc FL[10] FD FC2 Fp Fs Fp Fi} v1 FL:2 FD[7] Fp FC3 Fp Fi Fp[2] FC4 FC2 FD[8]}


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

static void Test_S18924C11()
{
  extern Class_Descriptor cd_S18924C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(875,2291)];
    init_test(&cd_S18924C11, buf);
    S18924C11 *dp, &lv = *(dp=new (buf) S18924C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13984,9160), "sizeof(S18924C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C11)");
    check_base_class_offset(lv, (S18924C2*), 0, "S18924C11");
    check_base_class_offset(lv, (S18924C5*), ABISELECT(7296,4768), "S18924C11");
    check_base_class_offset(lv, (S468C7*), ABISELECT(296,200), "S18924C11");
    check_base_class_offset(lv, (S18924C10*), ABISELECT(13536,8844), "S18924C11");
    set_bf_and_test(lv, s18924c11f0, ABISELECT(376,244), 0, 2, 1, "S18924C11");
    set_bf_and_test(lv, s18924c11f0, ABISELECT(376,244), 0, 2, hide_sll(1LL<<1), "S18924C11");
    check_field_offset(lv, s18924c11f1, ABISELECT(384,248), "S18924C11.s18924c11f1");
    check_field_offset(lv, s18924c11f2, ABISELECT(496,332), "S18924C11.s18924c11f2");
    check_field_offset(lv, s18924c11f3, ABISELECT(512,336), "S18924C11.s18924c11f3");
    check_field_offset(lv, s18924c11f4, ABISELECT(6752,4412), "S18924C11.s18924c11f4");
    check_field_offset(lv, s18924c11f5, ABISELECT(6760,4416), "S18924C11.s18924c11f5");
    check_field_offset(lv, s18924c11f6, ABISELECT(6768,4420), "S18924C11.s18924c11f6");
    check_field_offset(lv, s18924c11f7, ABISELECT(6784,4428), "S18924C11.s18924c11f7");
    check_field_offset(lv, s18924c11f8, ABISELECT(6864,4472), "S18924C11.s18924c11f8");
    check_field_offset(lv, s18924c11f9, ABISELECT(7168,4672), "S18924C11.s18924c11f9");
    test_class_info(&lv, &cd_S18924C11);
    dp->~S18924C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C11(Test_S18924C11, "S18924C11", ABISELECT(13984,9160));

#else // __cplusplus

extern void _ZN9S18924C11C1Ev();
extern void _ZN9S18924C11D1Ev();
Name_Map name_map_S18924C11[] = {
  NSPAIR(_ZN9S18924C11C1Ev),
  NSPAIR(_ZN9S18924C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C10;
extern VTBL_ENTRY _ZTI9S18924C10[];
extern  VTBL_ENTRY _ZTV9S18924C10[];
static Base_Class bases_S18924C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18924C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18924C5,    ABISELECT(7296,4768), //bcp->offset
    13, //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_S468C7,    ABISELECT(296,200), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18924C10,    ABISELECT(13536,8844), //bcp->offset
    17, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18924C11[];
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void _ZN9S18924C11D1Ev();
extern void _ZN9S18924C11D0Ev();
extern void ABISELECT(_ZThn296_N9S18924C11D1Ev,_ZThn200_N9S18924C11D1Ev)();
extern void ABISELECT(_ZThn296_N9S18924C11D0Ev,_ZThn200_N9S18924C11D0Ev)();
extern void _ZN8S18924C52v5Ev();
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY vtc_S18924C11[] = {
  ABISELECT(13536,8844),
  ABISELECT(7296,4768),
  0,
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D0Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N9S18924C11D1Ev,_ZThn200_N9S18924C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N9S18924C11D0Ev,_ZThn200_N9S18924C11D0Ev),
  0,
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  0,
  0,
  ABISELECT(-13536,-8844),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
extern VTBL_ENTRY _ZTV9S18924C11[];
static  VTT_ENTRY vtt_S18924C11[] = {
  {&(_ZTV9S18924C11[4]),  4,23},
  {&(_ZTV9S18924C11[16]),  16,23},
  {&(_ZTV9S18924C11[21]),  21,23},
};
extern VTBL_ENTRY _ZTI9S18924C11[];
extern  VTBL_ENTRY _ZTV9S18924C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18924C11[];
Class_Descriptor cd_S18924C11 = {  "S18924C11", // class name
  bases_S18924C11, 4,
  &(vtc_S18924C11[0]), // expected_vtbl_contents
  &(vtt_S18924C11[0]), // expected_vtt_contents
  ABISELECT(13984,9160), // object size
  NSPAIRA(_ZTI9S18924C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S18924C11),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18924C11),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18924C9  : virtual S18924C5 , virtual S18924C10 , virtual S18924C11 , S468C7 {
  void *s18924c9f0;
  ::S468C7 s18924c9f1;
  ::S18924C2 s18924c9f2;
  short s18924c9f3;
  ~S18924C9(); // tgen
  S18924C9(); // tgen
};
//SIG(-1 S18924C9) C1{ VBC2{ v1 FC3{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} VBC5{ v2 v3 Fc FL[10] FD FC3 Fp Fs Fp Fi} VBC6{ BC3 VBC2 BC4 VBC5 v6 FL:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} BC4 Fp FC4 FC3 Fs}


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

static void Test_S18924C9()
{
  extern Class_Descriptor cd_S18924C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(906,2365)];
    init_test(&cd_S18924C9, buf);
    S18924C9 *dp, &lv = *(dp=new (buf) S18924C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14480,9456), "sizeof(S18924C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C9)");
    check_base_class_offset(lv, (S18924C5*), ABISELECT(496,296), "S18924C9");
    check_base_class_offset(lv, (S18924C5*)(S18924C11*), ABISELECT(496,296), "S18924C9");
    check_base_class_offset(lv, (S18924C10*), ABISELECT(6736,4372), "S18924C9");
    check_base_class_offset(lv, (S18924C10*)(S18924C11*), ABISELECT(6736,4372), "S18924C9");
    check_base_class_offset(lv, (S18924C2*)(S18924C11*), ABISELECT(7184,4688), "S18924C9");
    check_base_class_offset(lv, (S468C7*)(S18924C11*), ABISELECT(7480,4888), "S18924C9");
    check_base_class_offset(lv, (S18924C11*), ABISELECT(7184,4688), "S18924C9");
    /*is_ambiguous_... S18924C9::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), 0, "S18924C9");
    check_field_offset(lv, s18924c9f0, ABISELECT(80,44), "S18924C9.s18924c9f0");
    check_field_offset(lv, s18924c9f1, ABISELECT(88,48), "S18924C9.s18924c9f1");
    check_field_offset(lv, s18924c9f2, ABISELECT(176,92), "S18924C9.s18924c9f2");
    check_field_offset(lv, s18924c9f3, ABISELECT(480,292), "S18924C9.s18924c9f3");
    test_class_info(&lv, &cd_S18924C9);
    dp->~S18924C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C9(Test_S18924C9, "S18924C9", ABISELECT(14480,9456));

#else // __cplusplus

extern void _ZN8S18924C9C1Ev();
extern void _ZN8S18924C9D1Ev();
Name_Map name_map_S18924C9[] = {
  NSPAIR(_ZN8S18924C9C1Ev),
  NSPAIR(_ZN8S18924C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S18924C10;
extern VTBL_ENTRY _ZTI9S18924C10[];
extern  VTBL_ENTRY _ZTV9S18924C10[];
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C11;
extern VTBL_ENTRY _ZTI9S18924C11[];
extern  VTBL_ENTRY _ZTV9S18924C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18924C11[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
static Base_Class bases_S18924C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18924C5,    ABISELECT(496,296), //bcp->offset
    7, //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_S18924C10,    ABISELECT(6736,4372), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18924C2,    ABISELECT(7184,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(7480,4888), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18924C11,    ABISELECT(7184,4688), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S18924C9[];
extern void _ZN8S18924C9D1Ev();
extern void _ZN8S18924C9D0Ev();
extern void _ZN8S18924C52v5Ev();
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev)();
extern void ABISELECT(_ZThn7184_N8S18924C9D1Ev,_ZThn4688_N8S18924C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev)();
extern void ABISELECT(_ZThn7184_N8S18924C9D0Ev,_ZThn4688_N8S18924C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N8S18924C9D1Ev,_ZTvn200_n32_N8S18924C9D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18924C9D0Ev,_ZTvn200_n32_N8S18924C9D0Ev)();
static  VTBL_ENTRY vtc_S18924C9[] = {
  ABISELECT(7184,4688),
  ABISELECT(6736,4372),
  ABISELECT(496,296),
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C9D0Ev,
  0,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  0,
  0,
  ABISELECT(-6736,-4372),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
  ABISELECT(-7184,-4688),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-7184,-4688),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev),
  ABISELECT(-7480,-4888),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C9D1Ev,_ZTvn200_n32_N8S18924C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C9D0Ev,_ZTvn200_n32_N8S18924C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S18924C9[];
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void _ZN9S18924C11D1Ev();
extern void _ZN9S18924C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C11__8S18924C9[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D0Ev,
};
extern void _ZN8S18924C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C5__9S18924C11__8S18924C9[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
};
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C10__9S18924C11__8S18924C9[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
static  VTT_ENTRY vtt_S18924C9[] = {
  {&(_ZTV8S18924C9[5]),  5,34},
  {&(_ZTV8S18924C9[10]),  10,34},
  {&(_ZTV8S18924C9[15]),  15,34},
  {&(_ZTV8S18924C9[25]),  25,34},
  {&(_ZTV8S18924C9[32]),  32,34},
  {&(_tg__ZTV9S18924C11__8S18924C9[4]),  4,9},
  {&(_tg__ZTV8S18924C5__9S18924C11__8S18924C9[3]),  3,4},
  {&(_tg__ZTV9S18924C10__9S18924C11__8S18924C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S18924C9[];
extern  VTBL_ENTRY _ZTV8S18924C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18924C9[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7184_N8S18924C9D0Ev,_ZThn4688_N8S18924C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7184_N8S18924C9D1Ev,_ZThn4688_N8S18924C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18924C9 = {  "S18924C9", // class name
  bases_S18924C9, 6,
  &(vtc_S18924C9[0]), // expected_vtbl_contents
  &(vtt_S18924C9[0]), // expected_vtt_contents
  ABISELECT(14480,9456), // object size
  NSPAIRA(_ZTI8S18924C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18924C9),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18924C9),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18924C12  {
  int s18924c12f0;
  ::S18924C2 s18924c12f1;
  int s18924c12f2[2];
  ::S468C10 s18924c12f3;
  long double s18924c12f4;
  int s18924c12f5;
  int s18924c12f6;
  ::S18924C10 s18924c12f7;
  __tsi64 s18924c12f8;
  int s18924c12f9;
  ::S18924C10 s18924c12f10;
  virtual  ~S18924C12(); // _ZN9S18924C12D1Ev
  virtual void  v10(); // _ZN9S18924C123v10Ev
  virtual void  v11(); // _ZN9S18924C123v11Ev
  S18924C12(); // tgen
};
//SIG(-1 S18924C12) C1{ vd v1 v2 Fi FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fi[2] FU3{ m FL FD[10] FD Fs:0} FD Fi Fi FC4{ v5 v6 Fc FL[10] FD FC2 Fp Fs Fp Fi} FL Fi FC4}


 S18924C12 ::~S18924C12(){ note_dtor("S18924C12", this);}
void  S18924C12 ::v10(){vfunc_called(this, "_ZN9S18924C123v10Ev");}
void  S18924C12 ::v11(){vfunc_called(this, "_ZN9S18924C123v11Ev");}
S18924C12 ::S18924C12(){ note_ctor("S18924C12", this);} // tgen

static void Test_S18924C12()
{
  extern Class_Descriptor cd_S18924C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(91,251)];
    init_test(&cd_S18924C12, buf);
    S18924C12 *dp, &lv = *(dp=new (buf) S18924C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1440,1000), "sizeof(S18924C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C12)");
    check_field_offset(lv, s18924c12f0, ABISELECT(8,4), "S18924C12.s18924c12f0");
    check_field_offset(lv, s18924c12f1, ABISELECT(16,8), "S18924C12.s18924c12f1");
    check_field_offset(lv, s18924c12f2, ABISELECT(320,208), "S18924C12.s18924c12f2");
    check_field_offset(lv, s18924c12f3, ABISELECT(336,216), "S18924C12.s18924c12f3");
    check_field_offset(lv, s18924c12f4, ABISELECT(496,336), "S18924C12.s18924c12f4");
    check_field_offset(lv, s18924c12f5, ABISELECT(512,348), "S18924C12.s18924c12f5");
    check_field_offset(lv, s18924c12f6, ABISELECT(516,352), "S18924C12.s18924c12f6");
    check_field_offset(lv, s18924c12f7, ABISELECT(528,356), "S18924C12.s18924c12f7");
    check_field_offset(lv, s18924c12f8, ABISELECT(976,672), "S18924C12.s18924c12f8");
    check_field_offset(lv, s18924c12f9, ABISELECT(984,680), "S18924C12.s18924c12f9");
    check_field_offset(lv, s18924c12f10, ABISELECT(992,684), "S18924C12.s18924c12f10");
    test_class_info(&lv, &cd_S18924C12);
    dp->~S18924C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C12(Test_S18924C12, "S18924C12", ABISELECT(1440,1000));

#else // __cplusplus

extern void _ZN9S18924C12C1Ev();
extern void _ZN9S18924C12D1Ev();
Name_Map name_map_S18924C12[] = {
  NSPAIR(_ZN9S18924C12C1Ev),
  NSPAIR(_ZN9S18924C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S18924C12[];
extern void _ZN9S18924C12D1Ev();
extern void _ZN9S18924C12D0Ev();
extern void _ZN9S18924C123v10Ev();
extern void _ZN9S18924C123v11Ev();
static  VTBL_ENTRY vtc_S18924C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18924C12[0]),
  (VTBL_ENTRY)&_ZN9S18924C12D1Ev,
  (VTBL_ENTRY)&_ZN9S18924C12D0Ev,
  (VTBL_ENTRY)&_ZN9S18924C123v10Ev,
  (VTBL_ENTRY)&_ZN9S18924C123v11Ev,
};
extern VTBL_ENTRY _ZTI9S18924C12[];
extern  VTBL_ENTRY _ZTV9S18924C12[];
Class_Descriptor cd_S18924C12 = {  "S18924C12", // class name
  0,0,//no base classes
  &(vtc_S18924C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1440,1000), // object size
  NSPAIRA(_ZTI9S18924C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S18924C12),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  S18924C14  : S18924C11 , S18924C10 , S468C7 , S18924C5 , virtual S18924C2 {
  ::S468C7 s18924c14f0;
  int s18924c14f1;
  void *s18924c14f2;
  void *s18924c14f3;
  __tsi64 s18924c14f4;
  __tsi64 s18924c14f5;
  int s18924c14f6;
  int s18924c14f7;
  void *s18924c14f8;
  int s18924c14f9;
  ::S18924C10 s18924c14f10;
  int s18924c14f11;
  virtual  ~S18924C14(); // _ZN9S18924C14D2Ev
  virtual void  v12(); // _ZN9S18924C143v12Ev
  virtual void  v13(); // _ZN9S18924C143v13Ev
  S18924C14(); // tgen
};
//SIG(-1 S18924C14) C1{ BC2{ BC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC4{ v5 FC3[8] FC3[2] Fp Fi FC5{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC5 VBC6{ v6 v7 Fc FL[10] FD FC3 Fp Fs Fp Fi} v8 FL:2 FD[7] Fp FC4 Fp Fi Fp[2] FC5 FC3 FD[8]} BC6 BC5 BC4 VBC3 vd v1 v2 FC5 Fi Fp[2] FL[2] Fi[2] Fp Fi FC6 Fi}


 S18924C14 ::~S18924C14(){ note_dtor("S18924C14", this);}
void  S18924C14 ::v12(){vfunc_called(this, "_ZN9S18924C143v12Ev");}
void  S18924C14 ::v13(){vfunc_called(this, "_ZN9S18924C143v13Ev");}
S18924C14 ::S18924C14(){ note_ctor("S18924C14", this);} // tgen

static void Test_S18924C14()
{
  extern Class_Descriptor cd_S18924C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1355,3552)];
    init_test(&cd_S18924C14, buf);
    S18924C14 *dp, &lv = *(dp=new (buf) S18924C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(21664,14204), "sizeof(S18924C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C14)");
    check_base_class_offset(lv, (S18924C2*)(S18924C11*), 0, "S18924C14");
    check_base_class_offset(lv, (S18924C5*)(S18924C11*), ABISELECT(14672,9612), "S18924C14");
    check_base_class_offset(lv, (S468C7*)(S18924C11*), ABISELECT(296,200), "S18924C14");
    check_base_class_offset(lv, (S18924C10*)(S18924C11*), ABISELECT(20912,13688), "S18924C14");
    check_base_class_offset(lv, (S18924C11*), 0, "S18924C14");
    /*is_ambiguous_... S18924C14::S18924C10 */ AMB_check_base_class_offset(lv, (S18924C10*), ABISELECT(7296,4768), "S18924C14");
    /*is_ambiguous_... S18924C14::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), ABISELECT(7744,5084), "S18924C14");
    /*is_ambiguous_... S18924C14::S18924C5 */ AMB_check_base_class_offset(lv, (S18924C5*), ABISELECT(7824,5128), "S18924C14");
    /*is_ambiguous_... S18924C14::S18924C2 */ AMB_check_base_class_offset(lv, (S18924C2*), ABISELECT(21360,14004), "S18924C14");
    check_field_offset(lv, s18924c14f0, ABISELECT(14064,9204), "S18924C14.s18924c14f0");
    check_field_offset(lv, s18924c14f1, ABISELECT(14144,9248), "S18924C14.s18924c14f1");
    check_field_offset(lv, s18924c14f2, ABISELECT(14152,9252), "S18924C14.s18924c14f2");
    check_field_offset(lv, s18924c14f3, ABISELECT(14160,9256), "S18924C14.s18924c14f3");
    check_field_offset(lv, s18924c14f4, ABISELECT(14168,9260), "S18924C14.s18924c14f4");
    check_field_offset(lv, s18924c14f5, ABISELECT(14176,9268), "S18924C14.s18924c14f5");
    check_field_offset(lv, s18924c14f6, ABISELECT(14184,9276), "S18924C14.s18924c14f6");
    check_field_offset(lv, s18924c14f7, ABISELECT(14188,9280), "S18924C14.s18924c14f7");
    check_field_offset(lv, s18924c14f8, ABISELECT(14192,9284), "S18924C14.s18924c14f8");
    check_field_offset(lv, s18924c14f9, ABISELECT(14200,9288), "S18924C14.s18924c14f9");
    check_field_offset(lv, s18924c14f10, ABISELECT(14208,9292), "S18924C14.s18924c14f10");
    check_field_offset(lv, s18924c14f11, ABISELECT(14656,9608), "S18924C14.s18924c14f11");
    test_class_info(&lv, &cd_S18924C14);
    dp->~S18924C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C14(Test_S18924C14, "S18924C14", ABISELECT(21664,14204));

#else // __cplusplus

extern void _ZN9S18924C14C1Ev();
extern void _ZN9S18924C14D2Ev();
Name_Map name_map_S18924C14[] = {
  NSPAIR(_ZN9S18924C14C1Ev),
  NSPAIR(_ZN9S18924C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C10;
extern VTBL_ENTRY _ZTI9S18924C10[];
extern  VTBL_ENTRY _ZTV9S18924C10[];
extern Class_Descriptor cd_S18924C11;
extern VTBL_ENTRY _ZTI9S18924C11[];
extern  VTBL_ENTRY _ZTV9S18924C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18924C11[];
extern Class_Descriptor cd_S18924C10;
extern VTBL_ENTRY _ZTI9S18924C10[];
extern  VTBL_ENTRY _ZTV9S18924C10[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
static Base_Class bases_S18924C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18924C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18924C5,    ABISELECT(14672,9612), //bcp->offset
    27, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(296,200), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S18924C10,    ABISELECT(20912,13688), //bcp->offset
    31, //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
    4, //immediately_derived
  0, 1},
  {&cd_S18924C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18924C10,    ABISELECT(7296,4768), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C7,    ABISELECT(7744,5084), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18924C5,    ABISELECT(7824,5128), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18924C2,    ABISELECT(21360,14004), //bcp->offset
    37, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18924C14[];
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void _ZN9S18924C14D1Ev();
extern void _ZN9S18924C14D0Ev();
extern void _ZN9S18924C143v12Ev();
extern void _ZN9S18924C143v13Ev();
extern void ABISELECT(_ZThn296_N9S18924C14D1Ev,_ZThn200_N9S18924C14D1Ev)();
extern void ABISELECT(_ZThn296_N9S18924C14D0Ev,_ZThn200_N9S18924C14D0Ev)();
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
extern void ABISELECT(_ZThn7744_N9S18924C14D1Ev,_ZThn5084_N9S18924C14D1Ev)();
extern void ABISELECT(_ZThn7744_N9S18924C14D0Ev,_ZThn5084_N9S18924C14D0Ev)();
extern void _ZN8S18924C52v5Ev();
extern void _ZN8S18924C52v5Ev();
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
static  VTBL_ENTRY vtc_S18924C14[] = {
  ABISELECT(21360,14004),
  ABISELECT(20912,13688),
  ABISELECT(14672,9612),
  0,
  (VTBL_ENTRY)&(_ZTI9S18924C14[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18924C14D1Ev,
  (VTBL_ENTRY)&_ZN9S18924C14D0Ev,
  (VTBL_ENTRY)&_ZN9S18924C143v12Ev,
  (VTBL_ENTRY)&_ZN9S18924C143v13Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI9S18924C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N9S18924C14D1Ev,_ZThn200_N9S18924C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N9S18924C14D0Ev,_ZThn200_N9S18924C14D0Ev),
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI9S18924C14[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
  ABISELECT(-7744,-5084),
  (VTBL_ENTRY)&(_ZTI9S18924C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N9S18924C14D1Ev,_ZThn5084_N9S18924C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N9S18924C14D0Ev,_ZThn5084_N9S18924C14D0Ev),
  ABISELECT(-7824,-5128),
  (VTBL_ENTRY)&(_ZTI9S18924C14[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  0,
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI9S18924C14[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  0,
  0,
  ABISELECT(-20912,-13688),
  (VTBL_ENTRY)&(_ZTI9S18924C14[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
  0,
  0,
  ABISELECT(-21360,-14004),
  (VTBL_ENTRY)&(_ZTI9S18924C14[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S18924C14[];
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void _ZN9S18924C11D1Ev();
extern void _ZN9S18924C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C11__9S18924C14[] = {
  ABISELECT(20912,13688),
  ABISELECT(14672,9612),
  0,
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D0Ev,
};
extern void _ZN8S18924C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C5__9S18924C11__9S18924C14[] = {
  0,
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
};
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C10__9S18924C11__9S18924C14[] = {
  0,
  0,
  ABISELECT(-20912,-13688),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
static  VTT_ENTRY vtt_S18924C14[] = {
  {&(_ZTV9S18924C14[5]),  5,43},
  {&(_tg__ZTV9S18924C11__9S18924C14[4]),  4,9},
  {&(_tg__ZTV8S18924C5__9S18924C11__9S18924C14[3]),  3,4},
  {&(_tg__ZTV9S18924C10__9S18924C11__9S18924C14[4]),  4,6},
  {&(_ZTV9S18924C14[30]),  30,43},
  {&(_ZTV9S18924C14[35]),  35,43},
  {&(_ZTV9S18924C14[41]),  41,43},
};
extern VTBL_ENTRY _ZTI9S18924C14[];
extern  VTBL_ENTRY _ZTV9S18924C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18924C14[];
Class_Descriptor cd_S18924C14 = {  "S18924C14", // class name
  bases_S18924C14, 9,
  &(vtc_S18924C14[0]), // expected_vtbl_contents
  &(vtt_S18924C14[0]), // expected_vtt_contents
  ABISELECT(21664,14204), // object size
  NSPAIRA(_ZTI9S18924C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S18924C14),43, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18924C14),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18924C8  : S18924C9 , S18924C2 , S18924C12 {
  ::S18924C14 s18924c8f0;
  ~S18924C8(); // tgen
  S18924C8(); // tgen
};
//SIG(-1 S18924C8) C1{ BC2{ VBC3{ v1 FC4{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC4[2] Fp Fi FC5{ vd m Fp FL Fp[7]} FC4[5] Fp[5] FC4[5]} VBC6{ v2 v3 Fc FL[10] FD FC4 Fp Fs Fp Fi} VBC7{ BC4 VBC3 BC5 VBC6 v6 FL:2 FD[7] Fp FC3 Fp Fi Fp[2] FC5 FC4 FD[8]} BC5 Fp FC5 FC4 Fs} BC4 BC8{ vd v7 v8 Fi FC4 Fi[2] FU9{ m FL FD[10] FD Fs:0} FD Fi Fi FC6 FL Fi FC6} FC10{ BC7 BC6 BC5 BC3 VBC4 vd v9 v10 FC5 Fi Fp Fp FL FL Fi Fi Fp Fi FC6 Fi}}


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

static void Test_S18924C8()
{
  extern Class_Descriptor cd_S18924C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2369,6216)];
    init_test(&cd_S18924C8, buf);
    S18924C8 *dp, &lv = *(dp=new (buf) S18924C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(37888,24860), "sizeof(S18924C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C8)");
    check_base_class_offset(lv, (S18924C5*)(S18924C9*), ABISELECT(23904,15700), "S18924C8");
    check_base_class_offset(lv, (S18924C5*)(S18924C11*), ABISELECT(23904,15700), "S18924C8");
    check_base_class_offset(lv, (S18924C10*)(S18924C9*), ABISELECT(30144,19776), "S18924C8");
    check_base_class_offset(lv, (S18924C10*)(S18924C11*), ABISELECT(30144,19776), "S18924C8");
    check_base_class_offset(lv, (S18924C2*)(S18924C11*), ABISELECT(30592,20092), "S18924C8");
    check_base_class_offset(lv, (S468C7*)(S18924C11*), ABISELECT(30888,20292), "S18924C8");
    check_base_class_offset(lv, (S18924C11*)(S18924C9*), ABISELECT(30592,20092), "S18924C8");
    /*is_ambiguous_... S18924C9::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S18924C9*), 0, "S18924C8");
    check_base_class_offset(lv, (S18924C9*), 0, "S18924C8");
    /*is_ambiguous_... S18924C8::S18924C2 */ AMB_check_base_class_offset(lv, (S18924C2*), ABISELECT(496,296), "S18924C8");
    check_base_class_offset(lv, (S18924C12*), ABISELECT(800,496), "S18924C8");
    check_field_offset(lv, s18924c8f0, ABISELECT(2240,1496), "S18924C8.s18924c8f0");
    test_class_info(&lv, &cd_S18924C8);
    dp->~S18924C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C8(Test_S18924C8, "S18924C8", ABISELECT(37888,24860));

#else // __cplusplus

extern void _ZN8S18924C8C1Ev();
extern void _ZN8S18924C8D1Ev();
Name_Map name_map_S18924C8[] = {
  NSPAIR(_ZN8S18924C8C1Ev),
  NSPAIR(_ZN8S18924C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S18924C10;
extern VTBL_ENTRY _ZTI9S18924C10[];
extern  VTBL_ENTRY _ZTV9S18924C10[];
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C11;
extern VTBL_ENTRY _ZTI9S18924C11[];
extern  VTBL_ENTRY _ZTV9S18924C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18924C11[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C9;
extern VTBL_ENTRY _ZTI8S18924C9[];
extern  VTBL_ENTRY _ZTV8S18924C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18924C9[];
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
extern Class_Descriptor cd_S18924C12;
extern VTBL_ENTRY _ZTI9S18924C12[];
extern  VTBL_ENTRY _ZTV9S18924C12[];
static Base_Class bases_S18924C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18924C5,    ABISELECT(23904,15700), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S18924C10,    ABISELECT(30144,19776), //bcp->offset
    21, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18924C2,    ABISELECT(30592,20092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(30888,20292), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18924C11,    ABISELECT(30592,20092), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18924C9,    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_S18924C2,    ABISELECT(496,296), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18924C12,    ABISELECT(800,496), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18924C8[];
extern void _ZN8S18924C8D1Ev();
extern void _ZN8S18924C8D0Ev();
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void ABISELECT(_ZThn800_N8S18924C8D1Ev,_ZThn496_N8S18924C8D1Ev)();
extern void ABISELECT(_ZThn800_N8S18924C8D0Ev,_ZThn496_N8S18924C8D0Ev)();
extern void _ZN9S18924C123v10Ev();
extern void _ZN9S18924C123v11Ev();
extern void _ZN8S18924C52v5Ev();
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18924C8D1Ev,_ZTv0_n32_N8S18924C8D1Ev)();
extern void ABISELECT(_ZThn30592_N8S18924C8D1Ev,_ZThn20092_N8S18924C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18924C8D0Ev,_ZTv0_n32_N8S18924C8D0Ev)();
extern void ABISELECT(_ZThn30592_N8S18924C8D0Ev,_ZThn20092_N8S18924C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N8S18924C8D1Ev,_ZTvn200_n32_N8S18924C8D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18924C8D0Ev,_ZTvn200_n32_N8S18924C8D0Ev)();
static  VTBL_ENTRY vtc_S18924C8[] = {
  ABISELECT(30592,20092),
  ABISELECT(30144,19776),
  ABISELECT(23904,15700),
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN8S18924C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C8D0Ev,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  ABISELECT(-800,-496),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N8S18924C8D1Ev,_ZThn496_N8S18924C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N8S18924C8D0Ev,_ZThn496_N8S18924C8D0Ev),
  (VTBL_ENTRY)&_ZN9S18924C123v10Ev,
  (VTBL_ENTRY)&_ZN9S18924C123v11Ev,
  0,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  0,
  0,
  ABISELECT(-30144,-19776),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
  ABISELECT(-30592,-20092),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-30592,-20092),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C8D1Ev,_ZTv0_n32_N8S18924C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C8D0Ev,_ZTv0_n32_N8S18924C8D0Ev),
  ABISELECT(-30888,-20292),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C8D1Ev,_ZTvn200_n32_N8S18924C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C8D0Ev,_ZTvn200_n32_N8S18924C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S18924C8[];
extern void _ZN8S18924C9D1Ev();
extern void _ZN8S18924C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C9__8S18924C8[] = {
  ABISELECT(30592,20092),
  ABISELECT(30144,19776),
  ABISELECT(23904,15700),
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C9D0Ev,
};
extern void _ZN8S18924C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C5__8S18924C9__8S18924C8[] = {
  0,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
};
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C10__8S18924C9__8S18924C8[] = {
  0,
  0,
  ABISELECT(-30144,-19776),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev)();
extern void ABISELECT(_ZThn30592_N8S18924C9D1Ev,_ZThn20092_N8S18924C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev)();
extern void ABISELECT(_ZThn30592_N8S18924C9D0Ev,_ZThn20092_N8S18924C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18924C11__8S18924C9__8S18924C8[] = {
  ABISELECT(-30592,-20092),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-30592,-20092),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N8S18924C9D1Ev,_ZTvn200_n32_N8S18924C9D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18924C9D0Ev,_ZTvn200_n32_N8S18924C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C79S18924C11__8S18924C9__8S18924C8[] = {
  ABISELECT(-30888,-20292),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C9D1Ev,_ZTvn200_n32_N8S18924C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C9D0Ev,_ZTvn200_n32_N8S18924C9D0Ev),
};
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void _ZN9S18924C11D1Ev();
extern void _ZN9S18924C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C11__8S18924C8[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D0Ev,
};
extern void _ZN8S18924C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C5__9S18924C11__8S18924C8[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
};
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C10__9S18924C11__8S18924C8[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
static  VTT_ENTRY vtt_S18924C8[] = {
  {&(_ZTV8S18924C8[5]),  5,44},
  {&(_tg__ZTV8S18924C9__8S18924C8[5]),  5,7},
  {&(_tg__ZTV8S18924C5__8S18924C9__8S18924C8[3]),  3,4},
  {&(_tg__ZTV9S18924C10__8S18924C9__8S18924C8[4]),  4,6},
  {&(_tg__ZTV9S18924C11__8S18924C9__8S18924C8[8]),  8,13},
  {&(_tg__ZTV6S468C79S18924C11__8S18924C9__8S18924C8[2]),  2,4},
  {&(_ZTV8S18924C8[20]),  20,44},
  {&(_ZTV8S18924C8[25]),  25,44},
  {&(_ZTV8S18924C8[35]),  35,44},
  {&(_ZTV8S18924C8[42]),  42,44},
  {&(_tg__ZTV9S18924C11__8S18924C8[4]),  4,9},
  {&(_tg__ZTV8S18924C5__9S18924C11__8S18924C8[3]),  3,4},
  {&(_tg__ZTV9S18924C10__9S18924C11__8S18924C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S18924C8[];
extern  VTBL_ENTRY _ZTV8S18924C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18924C8[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N8S18924C9D0Ev,_ZThn20092_N8S18924C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N8S18924C9D1Ev,_ZThn20092_N8S18924C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C8D0Ev,_ZTv0_n32_N8S18924C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N8S18924C8D0Ev,_ZThn20092_N8S18924C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C8D1Ev,_ZTv0_n32_N8S18924C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N8S18924C8D1Ev,_ZThn20092_N8S18924C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18924C8 = {  "S18924C8", // class name
  bases_S18924C8, 9,
  &(vtc_S18924C8[0]), // expected_vtbl_contents
  &(vtt_S18924C8[0]), // expected_vtt_contents
  ABISELECT(37888,24860), // object size
  NSPAIRA(_ZTI8S18924C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S18924C8),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18924C8),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18924C4  : S18924C5 , virtual S18924C2 , virtual S18924C7 , S18924C8 {
  void *s18924c4f0;
  virtual  ~S18924C4(); // _ZN8S18924C4D2Ev
  S18924C4(); // tgen
};
//SIG(-1 S18924C4) C1{ BC2{ v1 FC3{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} VBC3 VBC5{ BC2 BC4 VBC3 vd v4 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi} BC6{ BC7{ VBC2 VBC8{ v5 v6 Fc FL[10] FD FC3 Fp Fs Fp Fi} VBC9{ BC3 VBC2 BC4 VBC8 v7 FL:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} BC4 Fp FC4 FC3 Fs} BC3 BC10{ vd v8 v9 Fi FC3 Fi[2] FU11{ m FL FD[10] FD Fs:0} FD Fi Fi FC8 FL Fi FC8} FC12{ BC9 BC8 BC4 BC2 VBC3 vd v10 v11 FC4 Fi Fp Fp FL FL Fi Fi Fp Fi FC8 Fi}} vd Fp}


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

static void Test_S18924C4()
{
  extern Class_Descriptor cd_S18924C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3567,9343)];
    init_test(&cd_S18924C4, buf);
    S18924C4 *dp, &lv = *(dp=new (buf) S18924C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(57056,37368), "sizeof(S18924C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C4)");
    /*is_ambiguous_... S18924C4::S18924C5 */ AMB_check_base_class_offset(lv, (S18924C5*), 0, "S18924C4");
    /*is_ambiguous_... S18924C4::S18924C2 */ AMB_check_base_class_offset(lv, (S18924C2*), ABISELECT(30160,19780), "S18924C4");
    check_base_class_offset(lv, (S18924C2*)(S18924C7*), ABISELECT(30160,19780), "S18924C4");
    check_base_class_offset(lv, (S18924C5*)(S18924C7*), ABISELECT(30464,19980), "S18924C4");
    check_base_class_offset(lv, (S468C7*)(S18924C7*), ABISELECT(36704,24056), "S18924C4");
    check_base_class_offset(lv, (S18924C7*), ABISELECT(30464,19980), "S18924C4");
    check_base_class_offset(lv, (S18924C5*)(S18924C9*)(S18924C8*), ABISELECT(43072,28208), "S18924C4");
    check_base_class_offset(lv, (S18924C5*)(S18924C11*), ABISELECT(43072,28208), "S18924C4");
    check_base_class_offset(lv, (S18924C10*)(S18924C9*)(S18924C8*), ABISELECT(49312,32284), "S18924C4");
    check_base_class_offset(lv, (S18924C10*)(S18924C11*), ABISELECT(49312,32284), "S18924C4");
    check_base_class_offset(lv, (S18924C2*)(S18924C11*), ABISELECT(49760,32600), "S18924C4");
    check_base_class_offset(lv, (S468C7*)(S18924C11*), ABISELECT(50056,32800), "S18924C4");
    check_base_class_offset(lv, (S18924C11*)(S18924C9*)(S18924C8*), ABISELECT(49760,32600), "S18924C4");
    /*is_ambiguous_... S18924C9::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S18924C9*)(S18924C8*), ABISELECT(6240,4076), "S18924C4");
    check_base_class_offset(lv, (S18924C9*)(S18924C8*), ABISELECT(6240,4076), "S18924C4");
    /*is_ambiguous_... S18924C8::S18924C2 */ AMB_check_base_class_offset(lv, (S18924C2*)(S18924C8*), ABISELECT(6736,4372), "S18924C4");
    check_base_class_offset(lv, (S18924C12*)(S18924C8*), ABISELECT(7040,4572), "S18924C4");
    check_base_class_offset(lv, (S18924C8*), ABISELECT(6240,4076), "S18924C4");
    check_field_offset(lv, s18924c4f0, ABISELECT(30144,19776), "S18924C4.s18924c4f0");
    test_class_info(&lv, &cd_S18924C4);
    dp->~S18924C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C4(Test_S18924C4, "S18924C4", ABISELECT(57056,37368));

#else // __cplusplus

extern void _ZN8S18924C4C1Ev();
extern void _ZN8S18924C4D2Ev();
Name_Map name_map_S18924C4[] = {
  NSPAIR(_ZN8S18924C4C1Ev),
  NSPAIR(_ZN8S18924C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C7;
extern VTBL_ENTRY _ZTI8S18924C7[];
extern  VTBL_ENTRY _ZTV8S18924C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18924C7[];
extern Class_Descriptor cd_S18924C5;
extern VTBL_ENTRY _ZTI8S18924C5[];
extern  VTBL_ENTRY _ZTV8S18924C5[];
extern Class_Descriptor cd_S18924C10;
extern VTBL_ENTRY _ZTI9S18924C10[];
extern  VTBL_ENTRY _ZTV9S18924C10[];
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C11;
extern VTBL_ENTRY _ZTI9S18924C11[];
extern  VTBL_ENTRY _ZTV9S18924C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18924C11[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18924C9;
extern VTBL_ENTRY _ZTI8S18924C9[];
extern  VTBL_ENTRY _ZTV8S18924C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18924C9[];
extern Class_Descriptor cd_S18924C2;
extern VTBL_ENTRY _ZTI8S18924C2[];
extern  VTBL_ENTRY _ZTV8S18924C2[];
extern Class_Descriptor cd_S18924C12;
extern VTBL_ENTRY _ZTI9S18924C12[];
extern  VTBL_ENTRY _ZTV9S18924C12[];
extern Class_Descriptor cd_S18924C8;
extern VTBL_ENTRY _ZTI8S18924C8[];
extern  VTBL_ENTRY _ZTV8S18924C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18924C8[];
static Base_Class bases_S18924C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18924C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18924C2,    ABISELECT(30160,19780), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18924C5,    ABISELECT(30464,19980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(36704,24056), //bcp->offset
    43, //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18924C7,    ABISELECT(30464,19980), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18924C5,    ABISELECT(43072,28208), //bcp->offset
    47, //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
    9, //immediately_derived
  0, 1},
  {&cd_S18924C10,    ABISELECT(49312,32284), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 1},
  {&cd_S18924C2,    ABISELECT(49760,32600), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C7,    ABISELECT(50056,32800), //bcp->offset
    70, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18924C11,    ABISELECT(49760,32600), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(6240,4076), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S18924C9,    ABISELECT(6240,4076), //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18924C2,    ABISELECT(6736,4372), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18924C12,    ABISELECT(7040,4572), //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
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18924C8,    ABISELECT(6240,4076), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18924C4[];
extern void _ZN8S18924C52v5Ev();
extern void _ZN8S18924C4D1Ev();
extern void _ZN8S18924C4D0Ev();
extern void ABISELECT(_ZThn6240_N8S18924C4D1Ev,_ZThn4076_N8S18924C4D1Ev)();
extern void ABISELECT(_ZThn6240_N8S18924C4D0Ev,_ZThn4076_N8S18924C4D0Ev)();
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void ABISELECT(_ZThn7040_N8S18924C4D1Ev,_ZThn4572_N8S18924C4D1Ev)();
extern void ABISELECT(_ZThn7040_N8S18924C4D0Ev,_ZThn4572_N8S18924C4D0Ev)();
extern void _ZN9S18924C123v10Ev();
extern void _ZN9S18924C123v11Ev();
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN8S18924C52v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S18924C4D1Ev,_ZTv0_n20_N8S18924C4D1Ev)();
extern void ABISELECT(_ZThn30464_N8S18924C4D1Ev,_ZThn19980_N8S18924C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18924C4D0Ev,_ZTv0_n20_N8S18924C4D0Ev)();
extern void ABISELECT(_ZThn30464_N8S18924C4D0Ev,_ZThn19980_N8S18924C4D0Ev)() __attribute__((weak));
extern void _ZN8S18924C72v6Ev();
extern void ABISELECT(_ZTvn6240_n40_N8S18924C4D1Ev,_ZTvn4076_n20_N8S18924C4D1Ev)();
extern void ABISELECT(_ZTvn6240_n40_N8S18924C4D0Ev,_ZTvn4076_n20_N8S18924C4D0Ev)();
extern void _ZN8S18924C52v5Ev();
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18924C4D1Ev,_ZTv0_n32_N8S18924C4D1Ev)();
extern void ABISELECT(_ZThn49760_N8S18924C4D1Ev,_ZThn32600_N8S18924C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18924C4D0Ev,_ZTv0_n32_N8S18924C4D0Ev)();
extern void ABISELECT(_ZThn49760_N8S18924C4D0Ev,_ZThn32600_N8S18924C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N8S18924C4D1Ev,_ZTvn200_n32_N8S18924C4D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18924C4D0Ev,_ZTvn200_n32_N8S18924C4D0Ev)();
static  VTBL_ENTRY vtc_S18924C4[] = {
  ABISELECT(49760,32600),
  ABISELECT(49312,32284),
  ABISELECT(43072,28208),
  ABISELECT(30464,19980),
  ABISELECT(30160,19780),
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18924C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C4D0Ev,
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N8S18924C4D1Ev,_ZThn4076_N8S18924C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N8S18924C4D0Ev,_ZThn4076_N8S18924C4D0Ev),
  ABISELECT(-6736,-4372),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  ABISELECT(-7040,-4572),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7040_N8S18924C4D1Ev,_ZThn4572_N8S18924C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7040_N8S18924C4D0Ev,_ZThn4572_N8S18924C4D0Ev),
  (VTBL_ENTRY)&_ZN9S18924C123v10Ev,
  (VTBL_ENTRY)&_ZN9S18924C123v11Ev,
  0,
  0,
  ABISELECT(-30160,-19780),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  0,
  ABISELECT(-30464,-19980),
  0,
  ABISELECT(-304,-200),
  ABISELECT(-30464,-19980),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18924C4D1Ev,_ZTv0_n20_N8S18924C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18924C4D0Ev,_ZTv0_n20_N8S18924C4D0Ev),
  (VTBL_ENTRY)&_ZN8S18924C72v6Ev,
  ABISELECT(-36704,-24056),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N8S18924C4D1Ev,_ZTvn4076_n20_N8S18924C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N8S18924C4D0Ev,_ZTvn4076_n20_N8S18924C4D0Ev),
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  0,
  0,
  ABISELECT(-49312,-32284),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
  ABISELECT(-49760,-32600),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-49760,-32600),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C4D1Ev,_ZTv0_n32_N8S18924C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C4D0Ev,_ZTv0_n32_N8S18924C4D0Ev),
  ABISELECT(-50056,-32800),
  (VTBL_ENTRY)&(_ZTI8S18924C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C4D1Ev,_ZTvn200_n32_N8S18924C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C4D0Ev,_ZTvn200_n32_N8S18924C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S18924C4[];
extern void _ZN8S18924C8D1Ev();
extern void _ZN8S18924C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C8__8S18924C4[] = {
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN8S18924C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C8D0Ev,
};
extern void _ZN8S18924C9D1Ev();
extern void _ZN8S18924C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C98S18924C8__8S18924C4[] = {
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C9D0Ev,
};
extern void _ZN8S18924C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C5__8S18924C98S18924C8__8S18924C4[] = {
  0,
  ABISELECT(-36832,-24132),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
};
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C10__8S18924C98S18924C8__8S18924C4[] = {
  0,
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev)();
extern void ABISELECT(_ZThn43520_N8S18924C9D1Ev,_ZThn28524_N8S18924C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev)();
extern void ABISELECT(_ZThn43520_N8S18924C9D0Ev,_ZThn28524_N8S18924C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18924C11__8S18924C98S18924C8__8S18924C4[] = {
  ABISELECT(-43520,-28524),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-43520,-28524),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N8S18924C9D1Ev,_ZTvn200_n32_N8S18924C9D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18924C9D0Ev,_ZTvn200_n32_N8S18924C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C79S18924C11__8S18924C98S18924C8__8S18924C4[] = {
  ABISELECT(-43816,-28724),
  (VTBL_ENTRY)&(_ZTI8S18924C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C9D1Ev,_ZTvn200_n32_N8S18924C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C9D0Ev,_ZTvn200_n32_N8S18924C9D0Ev),
};
extern void _ZN8S18924C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C5__8S18924C8__8S18924C4[] = {
  0,
  ABISELECT(-36832,-24132),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
};
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C10__8S18924C8__8S18924C4[] = {
  0,
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18924C8D1Ev,_ZTv0_n32_N8S18924C8D1Ev)();
extern void ABISELECT(_ZThn43520_N8S18924C8D1Ev,_ZThn28524_N8S18924C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18924C8D0Ev,_ZTv0_n32_N8S18924C8D0Ev)();
extern void ABISELECT(_ZThn43520_N8S18924C8D0Ev,_ZThn28524_N8S18924C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18924C11__8S18924C8__8S18924C4[] = {
  ABISELECT(-43520,-28524),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-43520,-28524),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C8D1Ev,_ZTv0_n32_N8S18924C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18924C8D0Ev,_ZTv0_n32_N8S18924C8D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N8S18924C8D1Ev,_ZTvn200_n32_N8S18924C8D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18924C8D0Ev,_ZTvn200_n32_N8S18924C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C79S18924C11__8S18924C8__8S18924C4[] = {
  ABISELECT(-43816,-28724),
  (VTBL_ENTRY)&(_ZTI8S18924C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C8D1Ev,_ZTvn200_n32_N8S18924C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18924C8D0Ev,_ZTvn200_n32_N8S18924C8D0Ev),
};
extern void _ZN8S18924C52v5Ev();
extern void _ZN8S18924C7D1Ev();
extern void _ZN8S18924C7D0Ev();
extern void _ZN8S18924C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C7__8S18924C4[] = {
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C7[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18924C7D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C7D0Ev,
  (VTBL_ENTRY)&_ZN8S18924C72v6Ev,
};
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C2__8S18924C7__8S18924C4[] = {
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI8S18924C7[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
};
extern void _ZN8S18924C22v3Ev();
extern void _ZN8S18924C22v4Ev();
extern void _ZN9S18924C112v9Ev();
extern void _ZN9S18924C11D1Ev();
extern void _ZN9S18924C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C11__8S18924C4[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18924C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18924C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18924C11D0Ev,
};
extern void _ZN8S18924C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18924C5__9S18924C11__8S18924C4[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN8S18924C52v5Ev,
};
extern void _ZN9S18924C102v7Ev();
extern void _ZN9S18924C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18924C10__9S18924C11__8S18924C4[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI9S18924C11[0]),
  (VTBL_ENTRY)&_ZN9S18924C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18924C102v8Ev,
};
static  VTT_ENTRY vtt_S18924C4[] = {
  {&(_ZTV8S18924C4[7]),  7,74},
  {&(_tg__ZTV8S18924C8__8S18924C4[5]),  5,7},
  {&(_tg__ZTV8S18924C98S18924C8__8S18924C4[5]),  5,7},
  {&(_tg__ZTV8S18924C5__8S18924C98S18924C8__8S18924C4[3]),  3,4},
  {&(_tg__ZTV9S18924C10__8S18924C98S18924C8__8S18924C4[4]),  4,6},
  {&(_tg__ZTV9S18924C11__8S18924C98S18924C8__8S18924C4[8]),  8,13},
  {&(_tg__ZTV6S468C79S18924C11__8S18924C98S18924C8__8S18924C4[2]),  2,4},
  {&(_tg__ZTV8S18924C5__8S18924C8__8S18924C4[3]),  3,4},
  {&(_tg__ZTV9S18924C10__8S18924C8__8S18924C4[4]),  4,6},
  {&(_tg__ZTV9S18924C11__8S18924C8__8S18924C4[8]),  8,13},
  {&(_tg__ZTV6S468C79S18924C11__8S18924C8__8S18924C4[2]),  2,4},
  {&(_ZTV8S18924C4[31]),  31,74},
  {&(_ZTV8S18924C4[39]),  39,74},
  {&(_ZTV8S18924C4[45]),  45,74},
  {&(_ZTV8S18924C4[15]),  15,74},
  {&(_ZTV8S18924C4[50]),  50,74},
  {&(_ZTV8S18924C4[55]),  55,74},
  {&(_ZTV8S18924C4[65]),  65,74},
  {&(_ZTV8S18924C4[72]),  72,74},
  {&(_tg__ZTV8S18924C7__8S18924C4[3]),  3,7},
  {&(_tg__ZTV8S18924C2__8S18924C7__8S18924C4[4]),  4,6},
  {&(_tg__ZTV9S18924C11__8S18924C4[4]),  4,9},
  {&(_tg__ZTV8S18924C5__9S18924C11__8S18924C4[3]),  3,4},
  {&(_tg__ZTV9S18924C10__9S18924C11__8S18924C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S18924C4[];
extern  VTBL_ENTRY _ZTV8S18924C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18924C4[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C8D0Ev,_ZTv0_n32_N8S18924C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N8S18924C8D0Ev,_ZThn28524_N8S18924C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C8D1Ev,_ZTv0_n32_N8S18924C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N8S18924C8D1Ev,_ZThn28524_N8S18924C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C9D0Ev,_ZTv0_n32_N8S18924C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N8S18924C9D0Ev,_ZThn28524_N8S18924C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C9D1Ev,_ZTv0_n32_N8S18924C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N8S18924C9D1Ev,_ZThn28524_N8S18924C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C4D0Ev,_ZTv0_n32_N8S18924C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49760_N8S18924C4D0Ev,_ZThn32600_N8S18924C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18924C4D1Ev,_ZTv0_n32_N8S18924C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49760_N8S18924C4D1Ev,_ZThn32600_N8S18924C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18924C4D0Ev,_ZTv0_n20_N8S18924C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N8S18924C4D0Ev,_ZThn19980_N8S18924C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18924C4D1Ev,_ZTv0_n20_N8S18924C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N8S18924C4D1Ev,_ZThn19980_N8S18924C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18924C4 = {  "S18924C4", // class name
  bases_S18924C4, 15,
  &(vtc_S18924C4[0]), // expected_vtbl_contents
  &(vtt_S18924C4[0]), // expected_vtt_contents
  ABISELECT(57056,37368), // object size
  NSPAIRA(_ZTI8S18924C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18924C4),74, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18924C4),24, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18924C1  {
  ::S18924C2 s18924c1f0;
  int s18924c1f1[4];
  long double s18924c1f2;
  ::S468C14_nt s18924c1f3;
  ::S18924C4 s18924c1f4;
  void *s18924c1f5;
  virtual  ~S18924C1(); // _ZN8S18924C1D1Ev
  virtual void  v1(); // _ZN8S18924C12v1Ev
  virtual void  v2(); // _ZN8S18924C12v2Ev
  S18924C1(); // tgen
};
//SIG(1 S18924C1) C1{ vd v1 v2 FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fi[4] FD FC3{ m Fc} FC4{ BC5{ v5 FC2[8] FC2[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]} VBC2 VBC7{ BC5 BC6 VBC2 vd v6 Fi Fs Fs:1 Fp Fl FC5 Fi[2] Fc[3] Fi} BC8{ BC9{ VBC5 VBC10{ v7 v8 Fc FL[10] FD FC2 Fp Fs Fp Fi} VBC11{ BC2 VBC5 BC6 VBC10 v9 FL:2 FD[7] Fp FC5 Fp Fi Fp[2] FC6 FC2 FD[8]} BC6 Fp FC6 FC2 Fs} BC2 BC12{ vd v10 v11 Fi FC2 Fi[2] FU13{ m FL FD[10] FD Fs:0} FD Fi Fi FC10 FL Fi FC10} FC14{ BC11 BC10 BC6 BC5 VBC2 vd v12 v13 FC6 Fi Fp Fp FL FL Fi Fi Fp Fi FC10 Fi}} vd Fp} Fp}


 S18924C1 ::~S18924C1(){ note_dtor("S18924C1", this);}
void  S18924C1 ::v1(){vfunc_called(this, "_ZN8S18924C12v1Ev");}
void  S18924C1 ::v2(){vfunc_called(this, "_ZN8S18924C12v2Ev");}
S18924C1 ::S18924C1(){ note_ctor("S18924C1", this);} // tgen

static void Test_S18924C1()
{
  extern Class_Descriptor cd_S18924C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3591,9403)];
    init_test(&cd_S18924C1, buf);
    S18924C1 *dp, &lv = *(dp=new (buf) S18924C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(57440,37608), "sizeof(S18924C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18924C1)");
    check_field_offset(lv, s18924c1f0, ABISELECT(16,4), "S18924C1.s18924c1f0");
    check_field_offset(lv, s18924c1f1, ABISELECT(320,204), "S18924C1.s18924c1f1");
    check_field_offset(lv, s18924c1f2, ABISELECT(336,220), "S18924C1.s18924c1f2");
    check_field_offset(lv, s18924c1f3, ABISELECT(352,232), "S18924C1.s18924c1f3");
    check_field_offset(lv, s18924c1f4, ABISELECT(368,236), "S18924C1.s18924c1f4");
    check_field_offset(lv, s18924c1f5, ABISELECT(57424,37604), "S18924C1.s18924c1f5");
    test_class_info(&lv, &cd_S18924C1);
    dp->~S18924C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18924C1(Test_S18924C1, "S18924C1", ABISELECT(57440,37608));

#else // __cplusplus

extern void _ZN8S18924C1C1Ev();
extern void _ZN8S18924C1D1Ev();
Name_Map name_map_S18924C1[] = {
  NSPAIR(_ZN8S18924C1C1Ev),
  NSPAIR(_ZN8S18924C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18924C1[];
extern void _ZN8S18924C1D1Ev();
extern void _ZN8S18924C1D0Ev();
extern void _ZN8S18924C12v1Ev();
extern void _ZN8S18924C12v2Ev();
static  VTBL_ENTRY vtc_S18924C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18924C1[0]),
  (VTBL_ENTRY)&_ZN8S18924C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18924C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18924C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18924C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18924C1[];
extern  VTBL_ENTRY _ZTV8S18924C1[];
Class_Descriptor cd_S18924C1 = {  "S18924C1", // class name
  0,0,//no base classes
  &(vtc_S18924C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(57440,37608), // object size
  NSPAIRA(_ZTI8S18924C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18924C1),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  S18923C2  {
  __tsi64 s18923c2f0;
  void *s18923c2f1;
  char s18923c2f2:6;
  long double s18923c2f3;
  char s18923c2f4[7];
  __tsi64 s18923c2f5;
  char s18923c2f6[9];
  long double s18923c2f7[8];
  void *s18923c2f8;
  short s18923c2f9;
  void *s18923c2f10[7];
  int s18923c2f11;
  void *s18923c2f12;
  virtual void  v3(); // _ZN8S18923C22v3Ev
  virtual void  v4(); // _ZN8S18923C22v4Ev
  ~S18923C2(); // tgen
  S18923C2(); // tgen
};
//SIG(-1 S18923C2) C1{ v1 v2 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}


void  S18923C2 ::v3(){vfunc_called(this, "_ZN8S18923C22v3Ev");}
void  S18923C2 ::v4(){vfunc_called(this, "_ZN8S18923C22v4Ev");}
S18923C2 ::~S18923C2(){ note_dtor("S18923C2", this);} // tgen
S18923C2 ::S18923C2(){ note_ctor("S18923C2", this);} // tgen

static void Test_S18923C2()
{
  extern Class_Descriptor cd_S18923C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,51)];
    init_test(&cd_S18923C2, buf);
    S18923C2 *dp, &lv = *(dp=new (buf) S18923C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S18923C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C2)");
    check_field_offset(lv, s18923c2f0, ABISELECT(8,4), "S18923C2.s18923c2f0");
    check_field_offset(lv, s18923c2f1, ABISELECT(16,12), "S18923C2.s18923c2f1");
    set_bf_and_test(lv, s18923c2f2, ABISELECT(24,16), 0, 6, 1, "S18923C2");
    set_bf_and_test(lv, s18923c2f2, ABISELECT(24,16), 0, 6, hide_sll(1LL<<5), "S18923C2");
    check_field_offset(lv, s18923c2f3, ABISELECT(32,20), "S18923C2.s18923c2f3");
    check_field_offset(lv, s18923c2f4, ABISELECT(48,32), "S18923C2.s18923c2f4");
    check_field_offset(lv, s18923c2f5, ABISELECT(56,40), "S18923C2.s18923c2f5");
    check_field_offset(lv, s18923c2f6, ABISELECT(64,48), "S18923C2.s18923c2f6");
    check_field_offset(lv, s18923c2f7, ABISELECT(80,60), "S18923C2.s18923c2f7");
    check_field_offset(lv, s18923c2f8, ABISELECT(208,156), "S18923C2.s18923c2f8");
    check_field_offset(lv, s18923c2f9, ABISELECT(216,160), "S18923C2.s18923c2f9");
    check_field_offset(lv, s18923c2f10, ABISELECT(224,164), "S18923C2.s18923c2f10");
    check_field_offset(lv, s18923c2f11, ABISELECT(280,192), "S18923C2.s18923c2f11");
    check_field_offset(lv, s18923c2f12, ABISELECT(288,196), "S18923C2.s18923c2f12");
    test_class_info(&lv, &cd_S18923C2);
    dp->~S18923C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C2(Test_S18923C2, "S18923C2", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN8S18923C2C1Ev();
extern void _ZN8S18923C2D1Ev();
Name_Map name_map_S18923C2[] = {
  NSPAIR(_ZN8S18923C2C1Ev),
  NSPAIR(_ZN8S18923C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18923C2[];
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
static  VTBL_ENTRY vtc_S18923C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C2[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
};
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
Class_Descriptor cd_S18923C2 = {  "S18923C2", // class name
  0,0,//no base classes
  &(vtc_S18923C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI8S18923C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18923C2),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  S18923C5  {
  ::S18923C2 s18923c5f0[8];
  ::S18923C2 s18923c5f1[2];
  void *s18923c5f2;
  int s18923c5f3;
  ::S468C7 s18923c5f4;
  ::S18923C2 s18923c5f5[5];
  void *s18923c5f6[5];
  ::S18923C2 s18923c5f7[5];
  virtual void  v5(); // _ZN8S18923C52v5Ev
  ~S18923C5(); // tgen
  S18923C5(); // tgen
};
//SIG(-1 S18923C5) C1{ v1 FC2{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC2[2] Fp Fi FC3{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]}


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

static void Test_S18923C5()
{
  extern Class_Descriptor cd_S18923C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(391,1020)];
    init_test(&cd_S18923C5, buf);
    S18923C5 *dp, &lv = *(dp=new (buf) S18923C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6240,4076), "sizeof(S18923C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C5)");
    check_field_offset(lv, s18923c5f0, ABISELECT(16,4), "S18923C5.s18923c5f0");
    check_field_offset(lv, s18923c5f1, ABISELECT(2448,1604), "S18923C5.s18923c5f1");
    check_field_offset(lv, s18923c5f2, ABISELECT(3056,2004), "S18923C5.s18923c5f2");
    check_field_offset(lv, s18923c5f3, ABISELECT(3064,2008), "S18923C5.s18923c5f3");
    check_field_offset(lv, s18923c5f4, ABISELECT(3072,2012), "S18923C5.s18923c5f4");
    check_field_offset(lv, s18923c5f5, ABISELECT(3152,2056), "S18923C5.s18923c5f5");
    check_field_offset(lv, s18923c5f6, ABISELECT(4672,3056), "S18923C5.s18923c5f6");
    check_field_offset(lv, s18923c5f7, ABISELECT(4720,3076), "S18923C5.s18923c5f7");
    test_class_info(&lv, &cd_S18923C5);
    dp->~S18923C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C5(Test_S18923C5, "S18923C5", ABISELECT(6240,4076));

#else // __cplusplus

extern void _ZN8S18923C5C1Ev();
extern void _ZN8S18923C5D1Ev();
Name_Map name_map_S18923C5[] = {
  NSPAIR(_ZN8S18923C5C1Ev),
  NSPAIR(_ZN8S18923C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18923C5[];
extern void _ZN8S18923C52v5Ev();
static  VTBL_ENTRY vtc_S18923C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C5[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
};
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
Class_Descriptor cd_S18923C5 = {  "S18923C5", // class name
  0,0,//no base classes
  &(vtc_S18923C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6240,4076), // object size
  NSPAIRA(_ZTI8S18923C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18923C5),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  S18923C7  : S18923C5 , S468C7 , virtual S18923C2 {
  int s18923c7f0;
  short s18923c7f1;
  unsigned short s18923c7f2:1;
  void *s18923c7f3;
  long s18923c7f4;
  ::S18923C5 s18923c7f5;
  int s18923c7f6[2];
  char s18923c7f7[3];
  int s18923c7f8;
  virtual  ~S18923C7(); // _ZN8S18923C7D2Ev
  virtual void  v6(); // _ZN8S18923C72v6Ev
  S18923C7(); // tgen
};
//SIG(-1 S18923C7) C1{ BC2{ v2 FC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC4 VBC3 vd v1 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi}


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

static void Test_S18923C7()
{
  extern Class_Descriptor cd_S18923C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(808,2108)];
    init_test(&cd_S18923C7, buf);
    S18923C7 *dp, &lv = *(dp=new (buf) S18923C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12912,8428), "sizeof(S18923C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C7)");
    check_base_class_offset(lv, (S18923C5*), 0, "S18923C7");
    check_base_class_offset(lv, (S468C7*), ABISELECT(6240,4076), "S18923C7");
    check_base_class_offset(lv, (S18923C2*), ABISELECT(12608,8228), "S18923C7");
    check_field_offset(lv, s18923c7f0, ABISELECT(6320,4120), "S18923C7.s18923c7f0");
    check_field_offset(lv, s18923c7f1, ABISELECT(6324,4124), "S18923C7.s18923c7f1");
    set_bf_and_test(lv, s18923c7f2, ABISELECT(6326,4126), 0, 1, 1, "S18923C7");
    check_field_offset(lv, s18923c7f3, ABISELECT(6328,4128), "S18923C7.s18923c7f3");
    check_field_offset(lv, s18923c7f4, ABISELECT(6336,4132), "S18923C7.s18923c7f4");
    check_field_offset(lv, s18923c7f5, ABISELECT(6352,4136), "S18923C7.s18923c7f5");
    check_field_offset(lv, s18923c7f6, ABISELECT(12592,8212), "S18923C7.s18923c7f6");
    check_field_offset(lv, s18923c7f7, ABISELECT(12600,8220), "S18923C7.s18923c7f7");
    check_field_offset(lv, s18923c7f8, ABISELECT(12604,8224), "S18923C7.s18923c7f8");
    test_class_info(&lv, &cd_S18923C7);
    dp->~S18923C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C7(Test_S18923C7, "S18923C7", ABISELECT(12912,8428));

#else // __cplusplus

extern void _ZN8S18923C7C1Ev();
extern void _ZN8S18923C7D2Ev();
Name_Map name_map_S18923C7[] = {
  NSPAIR(_ZN8S18923C7C1Ev),
  NSPAIR(_ZN8S18923C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
static Base_Class bases_S18923C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18923C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S468C7,    ABISELECT(6240,4076), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18923C2,    ABISELECT(12608,8228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18923C7[];
extern void _ZN8S18923C52v5Ev();
extern void _ZN8S18923C7D1Ev();
extern void _ZN8S18923C7D0Ev();
extern void _ZN8S18923C72v6Ev();
extern void ABISELECT(_ZThn6240_N8S18923C7D1Ev,_ZThn4076_N8S18923C7D1Ev)();
extern void ABISELECT(_ZThn6240_N8S18923C7D0Ev,_ZThn4076_N8S18923C7D0Ev)();
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
static  VTBL_ENTRY vtc_S18923C7[] = {
  ABISELECT(12608,8228),
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C7[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18923C7D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C7D0Ev,
  (VTBL_ENTRY)&_ZN8S18923C72v6Ev,
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI8S18923C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N8S18923C7D1Ev,_ZThn4076_N8S18923C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N8S18923C7D0Ev,_ZThn4076_N8S18923C7D0Ev),
  0,
  0,
  ABISELECT(-12608,-8228),
  (VTBL_ENTRY)&(_ZTI8S18923C7[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S18923C7[];
static  VTT_ENTRY vtt_S18923C7[] = {
  {&(_ZTV8S18923C7[3]),  3,17},
  {&(_ZTV8S18923C7[15]),  15,17},
};
extern VTBL_ENTRY _ZTI8S18923C7[];
extern  VTBL_ENTRY _ZTV8S18923C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18923C7[];
Class_Descriptor cd_S18923C7 = {  "S18923C7", // class name
  bases_S18923C7, 3,
  &(vtc_S18923C7[0]), // expected_vtbl_contents
  &(vtt_S18923C7[0]), // expected_vtt_contents
  ABISELECT(12912,8428), // object size
  NSPAIRA(_ZTI8S18923C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S18923C7),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18923C7),2, //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  S18923C10  {
  char s18923c10f0;
  __tsi64 s18923c10f1[10];
  long double s18923c10f2;
  ::S18923C2 s18923c10f3;
  void *s18923c10f4;
  short s18923c10f5;
  void *s18923c10f6;
  int s18923c10f7;
  virtual void  v7(); // _ZN9S18923C102v7Ev
  virtual void  v8(); // _ZN9S18923C102v8Ev
  ~S18923C10(); // tgen
  S18923C10(); // tgen
};
//SIG(-1 S18923C10) C1{ v1 v2 Fc FL[10] FD FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fp Fs Fp Fi}


void  S18923C10 ::v7(){vfunc_called(this, "_ZN9S18923C102v7Ev");}
void  S18923C10 ::v8(){vfunc_called(this, "_ZN9S18923C102v8Ev");}
S18923C10 ::~S18923C10(){ note_dtor("S18923C10", this);} // tgen
S18923C10 ::S18923C10(){ note_ctor("S18923C10", this);} // tgen

static void Test_S18923C10()
{
  extern Class_Descriptor cd_S18923C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,80)];
    init_test(&cd_S18923C10, buf);
    S18923C10 *dp, &lv = *(dp=new (buf) S18923C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,316), "sizeof(S18923C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C10)");
    check_field_offset(lv, s18923c10f0, ABISELECT(8,4), "S18923C10.s18923c10f0");
    check_field_offset(lv, s18923c10f1, ABISELECT(16,8), "S18923C10.s18923c10f1");
    check_field_offset(lv, s18923c10f2, ABISELECT(96,88), "S18923C10.s18923c10f2");
    check_field_offset(lv, s18923c10f3, ABISELECT(112,100), "S18923C10.s18923c10f3");
    check_field_offset(lv, s18923c10f4, ABISELECT(416,300), "S18923C10.s18923c10f4");
    check_field_offset(lv, s18923c10f5, ABISELECT(424,304), "S18923C10.s18923c10f5");
    check_field_offset(lv, s18923c10f6, ABISELECT(432,308), "S18923C10.s18923c10f6");
    check_field_offset(lv, s18923c10f7, ABISELECT(440,312), "S18923C10.s18923c10f7");
    test_class_info(&lv, &cd_S18923C10);
    dp->~S18923C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C10(Test_S18923C10, "S18923C10", ABISELECT(448,316));

#else // __cplusplus

extern void _ZN9S18923C10C1Ev();
extern void _ZN9S18923C10D1Ev();
Name_Map name_map_S18923C10[] = {
  NSPAIR(_ZN9S18923C10C1Ev),
  NSPAIR(_ZN9S18923C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S18923C10[];
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY vtc_S18923C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18923C10[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
extern VTBL_ENTRY _ZTI9S18923C10[];
extern  VTBL_ENTRY _ZTV9S18923C10[];
Class_Descriptor cd_S18923C10 = {  "S18923C10", // class name
  0,0,//no base classes
  &(vtc_S18923C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,316), // object size
  NSPAIRA(_ZTI9S18923C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S18923C10),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  S18923C11  : S18923C2 , virtual S18923C5 , S468C7 , virtual S18923C10 {
  int s18923c11f0:2;
  long double s18923c11f1[7];
  void *s18923c11f2;
  ::S18923C5 s18923c11f3;
  void *s18923c11f4;
  int s18923c11f5;
  void *s18923c11f6[2];
  ::S468C7 s18923c11f7;
  ::S18923C2 s18923c11f8;
  long double s18923c11f9[8];
  virtual void  v9(); // _ZN9S18923C112v9Ev
  ~S18923C11(); // tgen
  S18923C11(); // tgen
};
//SIG(-1 S18923C11) C1{ BC2{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC3{ v4 FC2[8] FC2[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]} BC4 VBC5{ v5 v6 Fc FL[10] FD FC2 Fp Fs Fp Fi} v1 Fi:2 FD[7] Fp FC3 Fp Fi Fp[2] FC4 FC2 FD[8]}


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

static void Test_S18923C11()
{
  extern Class_Descriptor cd_S18923C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(875,2291)];
    init_test(&cd_S18923C11, buf);
    S18923C11 *dp, &lv = *(dp=new (buf) S18923C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13984,9160), "sizeof(S18923C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C11)");
    check_base_class_offset(lv, (S18923C2*), 0, "S18923C11");
    check_base_class_offset(lv, (S18923C5*), ABISELECT(7296,4768), "S18923C11");
    check_base_class_offset(lv, (S468C7*), ABISELECT(296,200), "S18923C11");
    check_base_class_offset(lv, (S18923C10*), ABISELECT(13536,8844), "S18923C11");
    set_bf_and_test(lv, s18923c11f0, ABISELECT(376,244), 0, 2, 1, "S18923C11");
    set_bf_and_test(lv, s18923c11f0, ABISELECT(376,244), 0, 2, hide_sll(1LL<<1), "S18923C11");
    check_field_offset(lv, s18923c11f1, ABISELECT(384,248), "S18923C11.s18923c11f1");
    check_field_offset(lv, s18923c11f2, ABISELECT(496,332), "S18923C11.s18923c11f2");
    check_field_offset(lv, s18923c11f3, ABISELECT(512,336), "S18923C11.s18923c11f3");
    check_field_offset(lv, s18923c11f4, ABISELECT(6752,4412), "S18923C11.s18923c11f4");
    check_field_offset(lv, s18923c11f5, ABISELECT(6760,4416), "S18923C11.s18923c11f5");
    check_field_offset(lv, s18923c11f6, ABISELECT(6768,4420), "S18923C11.s18923c11f6");
    check_field_offset(lv, s18923c11f7, ABISELECT(6784,4428), "S18923C11.s18923c11f7");
    check_field_offset(lv, s18923c11f8, ABISELECT(6864,4472), "S18923C11.s18923c11f8");
    check_field_offset(lv, s18923c11f9, ABISELECT(7168,4672), "S18923C11.s18923c11f9");
    test_class_info(&lv, &cd_S18923C11);
    dp->~S18923C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C11(Test_S18923C11, "S18923C11", ABISELECT(13984,9160));

#else // __cplusplus

extern void _ZN9S18923C11C1Ev();
extern void _ZN9S18923C11D1Ev();
Name_Map name_map_S18923C11[] = {
  NSPAIR(_ZN9S18923C11C1Ev),
  NSPAIR(_ZN9S18923C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C10;
extern VTBL_ENTRY _ZTI9S18923C10[];
extern  VTBL_ENTRY _ZTV9S18923C10[];
static Base_Class bases_S18923C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18923C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18923C5,    ABISELECT(7296,4768), //bcp->offset
    13, //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_S468C7,    ABISELECT(296,200), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18923C10,    ABISELECT(13536,8844), //bcp->offset
    17, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18923C11[];
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void _ZN9S18923C11D1Ev();
extern void _ZN9S18923C11D0Ev();
extern void ABISELECT(_ZThn296_N9S18923C11D1Ev,_ZThn200_N9S18923C11D1Ev)();
extern void ABISELECT(_ZThn296_N9S18923C11D0Ev,_ZThn200_N9S18923C11D0Ev)();
extern void _ZN8S18923C52v5Ev();
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY vtc_S18923C11[] = {
  ABISELECT(13536,8844),
  ABISELECT(7296,4768),
  0,
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D0Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N9S18923C11D1Ev,_ZThn200_N9S18923C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N9S18923C11D0Ev,_ZThn200_N9S18923C11D0Ev),
  0,
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  0,
  0,
  ABISELECT(-13536,-8844),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
extern VTBL_ENTRY _ZTV9S18923C11[];
static  VTT_ENTRY vtt_S18923C11[] = {
  {&(_ZTV9S18923C11[4]),  4,23},
  {&(_ZTV9S18923C11[16]),  16,23},
  {&(_ZTV9S18923C11[21]),  21,23},
};
extern VTBL_ENTRY _ZTI9S18923C11[];
extern  VTBL_ENTRY _ZTV9S18923C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18923C11[];
Class_Descriptor cd_S18923C11 = {  "S18923C11", // class name
  bases_S18923C11, 4,
  &(vtc_S18923C11[0]), // expected_vtbl_contents
  &(vtt_S18923C11[0]), // expected_vtt_contents
  ABISELECT(13984,9160), // object size
  NSPAIRA(_ZTI9S18923C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S18923C11),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18923C11),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18923C9  : virtual S18923C5 , virtual S18923C10 , virtual S18923C11 , S468C7 {
  void *s18923c9f0;
  ::S468C7 s18923c9f1;
  ::S18923C2 s18923c9f2;
  short s18923c9f3;
  ~S18923C9(); // tgen
  S18923C9(); // tgen
};
//SIG(-1 S18923C9) C1{ VBC2{ v1 FC3{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} VBC5{ v2 v3 Fc FL[10] FD FC3 Fp Fs Fp Fi} VBC6{ BC3 VBC2 BC4 VBC5 v6 Fi:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} BC4 Fp FC4 FC3 Fs}


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

static void Test_S18923C9()
{
  extern Class_Descriptor cd_S18923C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(906,2365)];
    init_test(&cd_S18923C9, buf);
    S18923C9 *dp, &lv = *(dp=new (buf) S18923C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14480,9456), "sizeof(S18923C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C9)");
    check_base_class_offset(lv, (S18923C5*), ABISELECT(496,296), "S18923C9");
    check_base_class_offset(lv, (S18923C5*)(S18923C11*), ABISELECT(496,296), "S18923C9");
    check_base_class_offset(lv, (S18923C10*), ABISELECT(6736,4372), "S18923C9");
    check_base_class_offset(lv, (S18923C10*)(S18923C11*), ABISELECT(6736,4372), "S18923C9");
    check_base_class_offset(lv, (S18923C2*)(S18923C11*), ABISELECT(7184,4688), "S18923C9");
    check_base_class_offset(lv, (S468C7*)(S18923C11*), ABISELECT(7480,4888), "S18923C9");
    check_base_class_offset(lv, (S18923C11*), ABISELECT(7184,4688), "S18923C9");
    /*is_ambiguous_... S18923C9::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), 0, "S18923C9");
    check_field_offset(lv, s18923c9f0, ABISELECT(80,44), "S18923C9.s18923c9f0");
    check_field_offset(lv, s18923c9f1, ABISELECT(88,48), "S18923C9.s18923c9f1");
    check_field_offset(lv, s18923c9f2, ABISELECT(176,92), "S18923C9.s18923c9f2");
    check_field_offset(lv, s18923c9f3, ABISELECT(480,292), "S18923C9.s18923c9f3");
    test_class_info(&lv, &cd_S18923C9);
    dp->~S18923C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C9(Test_S18923C9, "S18923C9", ABISELECT(14480,9456));

#else // __cplusplus

extern void _ZN8S18923C9C1Ev();
extern void _ZN8S18923C9D1Ev();
Name_Map name_map_S18923C9[] = {
  NSPAIR(_ZN8S18923C9C1Ev),
  NSPAIR(_ZN8S18923C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S18923C10;
extern VTBL_ENTRY _ZTI9S18923C10[];
extern  VTBL_ENTRY _ZTV9S18923C10[];
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C11;
extern VTBL_ENTRY _ZTI9S18923C11[];
extern  VTBL_ENTRY _ZTV9S18923C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18923C11[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
static Base_Class bases_S18923C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18923C5,    ABISELECT(496,296), //bcp->offset
    7, //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_S18923C10,    ABISELECT(6736,4372), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18923C2,    ABISELECT(7184,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(7480,4888), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18923C11,    ABISELECT(7184,4688), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S18923C9[];
extern void _ZN8S18923C9D1Ev();
extern void _ZN8S18923C9D0Ev();
extern void _ZN8S18923C52v5Ev();
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev)();
extern void ABISELECT(_ZThn7184_N8S18923C9D1Ev,_ZThn4688_N8S18923C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev)();
extern void ABISELECT(_ZThn7184_N8S18923C9D0Ev,_ZThn4688_N8S18923C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N8S18923C9D1Ev,_ZTvn200_n32_N8S18923C9D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18923C9D0Ev,_ZTvn200_n32_N8S18923C9D0Ev)();
static  VTBL_ENTRY vtc_S18923C9[] = {
  ABISELECT(7184,4688),
  ABISELECT(6736,4372),
  ABISELECT(496,296),
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C9D0Ev,
  0,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  0,
  0,
  ABISELECT(-6736,-4372),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
  ABISELECT(-7184,-4688),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-7184,-4688),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev),
  ABISELECT(-7480,-4888),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C9D1Ev,_ZTvn200_n32_N8S18923C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C9D0Ev,_ZTvn200_n32_N8S18923C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S18923C9[];
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void _ZN9S18923C11D1Ev();
extern void _ZN9S18923C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C11__8S18923C9[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D0Ev,
};
extern void _ZN8S18923C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C5__9S18923C11__8S18923C9[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
};
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C10__9S18923C11__8S18923C9[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
static  VTT_ENTRY vtt_S18923C9[] = {
  {&(_ZTV8S18923C9[5]),  5,34},
  {&(_ZTV8S18923C9[10]),  10,34},
  {&(_ZTV8S18923C9[15]),  15,34},
  {&(_ZTV8S18923C9[25]),  25,34},
  {&(_ZTV8S18923C9[32]),  32,34},
  {&(_tg__ZTV9S18923C11__8S18923C9[4]),  4,9},
  {&(_tg__ZTV8S18923C5__9S18923C11__8S18923C9[3]),  3,4},
  {&(_tg__ZTV9S18923C10__9S18923C11__8S18923C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S18923C9[];
extern  VTBL_ENTRY _ZTV8S18923C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18923C9[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7184_N8S18923C9D0Ev,_ZThn4688_N8S18923C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7184_N8S18923C9D1Ev,_ZThn4688_N8S18923C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18923C9 = {  "S18923C9", // class name
  bases_S18923C9, 6,
  &(vtc_S18923C9[0]), // expected_vtbl_contents
  &(vtt_S18923C9[0]), // expected_vtt_contents
  ABISELECT(14480,9456), // object size
  NSPAIRA(_ZTI8S18923C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18923C9),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18923C9),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18923C12  {
  int s18923c12f0;
  ::S18923C2 s18923c12f1;
  int s18923c12f2[2];
  ::S468C10 s18923c12f3;
  long double s18923c12f4;
  int s18923c12f5;
  int s18923c12f6;
  ::S18923C10 s18923c12f7;
  __tsi64 s18923c12f8;
  int s18923c12f9;
  ::S18923C10 s18923c12f10;
  virtual  ~S18923C12(); // _ZN9S18923C12D1Ev
  virtual void  v10(); // _ZN9S18923C123v10Ev
  virtual void  v11(); // _ZN9S18923C123v11Ev
  S18923C12(); // tgen
};
//SIG(-1 S18923C12) C1{ vd v1 v2 Fi FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fi[2] FU3{ m FL FD[10] FD Fs:0} FD Fi Fi FC4{ v5 v6 Fc FL[10] FD FC2 Fp Fs Fp Fi} FL Fi FC4}


 S18923C12 ::~S18923C12(){ note_dtor("S18923C12", this);}
void  S18923C12 ::v10(){vfunc_called(this, "_ZN9S18923C123v10Ev");}
void  S18923C12 ::v11(){vfunc_called(this, "_ZN9S18923C123v11Ev");}
S18923C12 ::S18923C12(){ note_ctor("S18923C12", this);} // tgen

static void Test_S18923C12()
{
  extern Class_Descriptor cd_S18923C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(91,251)];
    init_test(&cd_S18923C12, buf);
    S18923C12 *dp, &lv = *(dp=new (buf) S18923C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1440,1000), "sizeof(S18923C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C12)");
    check_field_offset(lv, s18923c12f0, ABISELECT(8,4), "S18923C12.s18923c12f0");
    check_field_offset(lv, s18923c12f1, ABISELECT(16,8), "S18923C12.s18923c12f1");
    check_field_offset(lv, s18923c12f2, ABISELECT(320,208), "S18923C12.s18923c12f2");
    check_field_offset(lv, s18923c12f3, ABISELECT(336,216), "S18923C12.s18923c12f3");
    check_field_offset(lv, s18923c12f4, ABISELECT(496,336), "S18923C12.s18923c12f4");
    check_field_offset(lv, s18923c12f5, ABISELECT(512,348), "S18923C12.s18923c12f5");
    check_field_offset(lv, s18923c12f6, ABISELECT(516,352), "S18923C12.s18923c12f6");
    check_field_offset(lv, s18923c12f7, ABISELECT(528,356), "S18923C12.s18923c12f7");
    check_field_offset(lv, s18923c12f8, ABISELECT(976,672), "S18923C12.s18923c12f8");
    check_field_offset(lv, s18923c12f9, ABISELECT(984,680), "S18923C12.s18923c12f9");
    check_field_offset(lv, s18923c12f10, ABISELECT(992,684), "S18923C12.s18923c12f10");
    test_class_info(&lv, &cd_S18923C12);
    dp->~S18923C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C12(Test_S18923C12, "S18923C12", ABISELECT(1440,1000));

#else // __cplusplus

extern void _ZN9S18923C12C1Ev();
extern void _ZN9S18923C12D1Ev();
Name_Map name_map_S18923C12[] = {
  NSPAIR(_ZN9S18923C12C1Ev),
  NSPAIR(_ZN9S18923C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S18923C12[];
extern void _ZN9S18923C12D1Ev();
extern void _ZN9S18923C12D0Ev();
extern void _ZN9S18923C123v10Ev();
extern void _ZN9S18923C123v11Ev();
static  VTBL_ENTRY vtc_S18923C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18923C12[0]),
  (VTBL_ENTRY)&_ZN9S18923C12D1Ev,
  (VTBL_ENTRY)&_ZN9S18923C12D0Ev,
  (VTBL_ENTRY)&_ZN9S18923C123v10Ev,
  (VTBL_ENTRY)&_ZN9S18923C123v11Ev,
};
extern VTBL_ENTRY _ZTI9S18923C12[];
extern  VTBL_ENTRY _ZTV9S18923C12[];
Class_Descriptor cd_S18923C12 = {  "S18923C12", // class name
  0,0,//no base classes
  &(vtc_S18923C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1440,1000), // object size
  NSPAIRA(_ZTI9S18923C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S18923C12),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  S18923C14  : S18923C11 , S18923C10 , S468C7 , S18923C5 , virtual S18923C2 {
  ::S468C7 s18923c14f0;
  int s18923c14f1;
  void *s18923c14f2;
  void *s18923c14f3;
  __tsi64 s18923c14f4;
  __tsi64 s18923c14f5;
  int s18923c14f6;
  int s18923c14f7;
  void *s18923c14f8;
  int s18923c14f9;
  ::S18923C10 s18923c14f10;
  int s18923c14f11;
  virtual  ~S18923C14(); // _ZN9S18923C14D2Ev
  virtual void  v12(); // _ZN9S18923C143v12Ev
  virtual void  v13(); // _ZN9S18923C143v13Ev
  S18923C14(); // tgen
};
//SIG(-1 S18923C14) C1{ BC2{ BC3{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} VBC4{ v5 FC3[8] FC3[2] Fp Fi FC5{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} BC5 VBC6{ v6 v7 Fc FL[10] FD FC3 Fp Fs Fp Fi} v8 Fi:2 FD[7] Fp FC4 Fp Fi Fp[2] FC5 FC3 FD[8]} BC6 BC5 BC4 VBC3 vd v1 v2 FC5 Fi Fp[2] FL[2] Fi[2] Fp Fi FC6 Fi}


 S18923C14 ::~S18923C14(){ note_dtor("S18923C14", this);}
void  S18923C14 ::v12(){vfunc_called(this, "_ZN9S18923C143v12Ev");}
void  S18923C14 ::v13(){vfunc_called(this, "_ZN9S18923C143v13Ev");}
S18923C14 ::S18923C14(){ note_ctor("S18923C14", this);} // tgen

static void Test_S18923C14()
{
  extern Class_Descriptor cd_S18923C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1355,3552)];
    init_test(&cd_S18923C14, buf);
    S18923C14 *dp, &lv = *(dp=new (buf) S18923C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(21664,14204), "sizeof(S18923C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C14)");
    check_base_class_offset(lv, (S18923C2*)(S18923C11*), 0, "S18923C14");
    check_base_class_offset(lv, (S18923C5*)(S18923C11*), ABISELECT(14672,9612), "S18923C14");
    check_base_class_offset(lv, (S468C7*)(S18923C11*), ABISELECT(296,200), "S18923C14");
    check_base_class_offset(lv, (S18923C10*)(S18923C11*), ABISELECT(20912,13688), "S18923C14");
    check_base_class_offset(lv, (S18923C11*), 0, "S18923C14");
    /*is_ambiguous_... S18923C14::S18923C10 */ AMB_check_base_class_offset(lv, (S18923C10*), ABISELECT(7296,4768), "S18923C14");
    /*is_ambiguous_... S18923C14::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*), ABISELECT(7744,5084), "S18923C14");
    /*is_ambiguous_... S18923C14::S18923C5 */ AMB_check_base_class_offset(lv, (S18923C5*), ABISELECT(7824,5128), "S18923C14");
    /*is_ambiguous_... S18923C14::S18923C2 */ AMB_check_base_class_offset(lv, (S18923C2*), ABISELECT(21360,14004), "S18923C14");
    check_field_offset(lv, s18923c14f0, ABISELECT(14064,9204), "S18923C14.s18923c14f0");
    check_field_offset(lv, s18923c14f1, ABISELECT(14144,9248), "S18923C14.s18923c14f1");
    check_field_offset(lv, s18923c14f2, ABISELECT(14152,9252), "S18923C14.s18923c14f2");
    check_field_offset(lv, s18923c14f3, ABISELECT(14160,9256), "S18923C14.s18923c14f3");
    check_field_offset(lv, s18923c14f4, ABISELECT(14168,9260), "S18923C14.s18923c14f4");
    check_field_offset(lv, s18923c14f5, ABISELECT(14176,9268), "S18923C14.s18923c14f5");
    check_field_offset(lv, s18923c14f6, ABISELECT(14184,9276), "S18923C14.s18923c14f6");
    check_field_offset(lv, s18923c14f7, ABISELECT(14188,9280), "S18923C14.s18923c14f7");
    check_field_offset(lv, s18923c14f8, ABISELECT(14192,9284), "S18923C14.s18923c14f8");
    check_field_offset(lv, s18923c14f9, ABISELECT(14200,9288), "S18923C14.s18923c14f9");
    check_field_offset(lv, s18923c14f10, ABISELECT(14208,9292), "S18923C14.s18923c14f10");
    check_field_offset(lv, s18923c14f11, ABISELECT(14656,9608), "S18923C14.s18923c14f11");
    test_class_info(&lv, &cd_S18923C14);
    dp->~S18923C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C14(Test_S18923C14, "S18923C14", ABISELECT(21664,14204));

#else // __cplusplus

extern void _ZN9S18923C14C1Ev();
extern void _ZN9S18923C14D2Ev();
Name_Map name_map_S18923C14[] = {
  NSPAIR(_ZN9S18923C14C1Ev),
  NSPAIR(_ZN9S18923C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C10;
extern VTBL_ENTRY _ZTI9S18923C10[];
extern  VTBL_ENTRY _ZTV9S18923C10[];
extern Class_Descriptor cd_S18923C11;
extern VTBL_ENTRY _ZTI9S18923C11[];
extern  VTBL_ENTRY _ZTV9S18923C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18923C11[];
extern Class_Descriptor cd_S18923C10;
extern VTBL_ENTRY _ZTI9S18923C10[];
extern  VTBL_ENTRY _ZTV9S18923C10[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
static Base_Class bases_S18923C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18923C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18923C5,    ABISELECT(14672,9612), //bcp->offset
    27, //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
    4, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(296,200), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S18923C10,    ABISELECT(20912,13688), //bcp->offset
    31, //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
    4, //immediately_derived
  0, 1},
  {&cd_S18923C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18923C10,    ABISELECT(7296,4768), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S468C7,    ABISELECT(7744,5084), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18923C5,    ABISELECT(7824,5128), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18923C2,    ABISELECT(21360,14004), //bcp->offset
    37, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18923C14[];
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void _ZN9S18923C14D1Ev();
extern void _ZN9S18923C14D0Ev();
extern void _ZN9S18923C143v12Ev();
extern void _ZN9S18923C143v13Ev();
extern void ABISELECT(_ZThn296_N9S18923C14D1Ev,_ZThn200_N9S18923C14D1Ev)();
extern void ABISELECT(_ZThn296_N9S18923C14D0Ev,_ZThn200_N9S18923C14D0Ev)();
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
extern void ABISELECT(_ZThn7744_N9S18923C14D1Ev,_ZThn5084_N9S18923C14D1Ev)();
extern void ABISELECT(_ZThn7744_N9S18923C14D0Ev,_ZThn5084_N9S18923C14D0Ev)();
extern void _ZN8S18923C52v5Ev();
extern void _ZN8S18923C52v5Ev();
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
static  VTBL_ENTRY vtc_S18923C14[] = {
  ABISELECT(21360,14004),
  ABISELECT(20912,13688),
  ABISELECT(14672,9612),
  0,
  (VTBL_ENTRY)&(_ZTI9S18923C14[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18923C14D1Ev,
  (VTBL_ENTRY)&_ZN9S18923C14D0Ev,
  (VTBL_ENTRY)&_ZN9S18923C143v12Ev,
  (VTBL_ENTRY)&_ZN9S18923C143v13Ev,
  ABISELECT(-296,-200),
  (VTBL_ENTRY)&(_ZTI9S18923C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N9S18923C14D1Ev,_ZThn200_N9S18923C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn296_N9S18923C14D0Ev,_ZThn200_N9S18923C14D0Ev),
  ABISELECT(-7296,-4768),
  (VTBL_ENTRY)&(_ZTI9S18923C14[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
  ABISELECT(-7744,-5084),
  (VTBL_ENTRY)&(_ZTI9S18923C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N9S18923C14D1Ev,_ZThn5084_N9S18923C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7744_N9S18923C14D0Ev,_ZThn5084_N9S18923C14D0Ev),
  ABISELECT(-7824,-5128),
  (VTBL_ENTRY)&(_ZTI9S18923C14[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  0,
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI9S18923C14[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  0,
  0,
  ABISELECT(-20912,-13688),
  (VTBL_ENTRY)&(_ZTI9S18923C14[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
  0,
  0,
  ABISELECT(-21360,-14004),
  (VTBL_ENTRY)&(_ZTI9S18923C14[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S18923C14[];
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void _ZN9S18923C11D1Ev();
extern void _ZN9S18923C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C11__9S18923C14[] = {
  ABISELECT(20912,13688),
  ABISELECT(14672,9612),
  0,
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D0Ev,
};
extern void _ZN8S18923C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C5__9S18923C11__9S18923C14[] = {
  0,
  ABISELECT(-14672,-9612),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
};
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C10__9S18923C11__9S18923C14[] = {
  0,
  0,
  ABISELECT(-20912,-13688),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
static  VTT_ENTRY vtt_S18923C14[] = {
  {&(_ZTV9S18923C14[5]),  5,43},
  {&(_tg__ZTV9S18923C11__9S18923C14[4]),  4,9},
  {&(_tg__ZTV8S18923C5__9S18923C11__9S18923C14[3]),  3,4},
  {&(_tg__ZTV9S18923C10__9S18923C11__9S18923C14[4]),  4,6},
  {&(_ZTV9S18923C14[30]),  30,43},
  {&(_ZTV9S18923C14[35]),  35,43},
  {&(_ZTV9S18923C14[41]),  41,43},
};
extern VTBL_ENTRY _ZTI9S18923C14[];
extern  VTBL_ENTRY _ZTV9S18923C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18923C14[];
Class_Descriptor cd_S18923C14 = {  "S18923C14", // class name
  bases_S18923C14, 9,
  &(vtc_S18923C14[0]), // expected_vtbl_contents
  &(vtt_S18923C14[0]), // expected_vtt_contents
  ABISELECT(21664,14204), // object size
  NSPAIRA(_ZTI9S18923C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S18923C14),43, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18923C14),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18923C8  : S18923C9 , S18923C2 , S18923C12 {
  ::S18923C14 s18923c8f0;
  ~S18923C8(); // tgen
  S18923C8(); // tgen
};
//SIG(-1 S18923C8) C1{ BC2{ VBC3{ v1 FC4{ v4 v5 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC4[2] Fp Fi FC5{ vd m Fp FL Fp[7]} FC4[5] Fp[5] FC4[5]} VBC6{ v2 v3 Fc FL[10] FD FC4 Fp Fs Fp Fi} VBC7{ BC4 VBC3 BC5 VBC6 v6 Fi:2 FD[7] Fp FC3 Fp Fi Fp[2] FC5 FC4 FD[8]} BC5 Fp FC5 FC4 Fs} BC4 BC8{ vd v7 v8 Fi FC4 Fi[2] FU9{ m FL FD[10] FD Fs:0} FD Fi Fi FC6 FL Fi FC6} FC10{ BC7 BC6 BC5 BC3 VBC4 vd v9 v10 FC5 Fi Fp Fp FL FL Fi Fi Fp Fi FC6 Fi}}


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

static void Test_S18923C8()
{
  extern Class_Descriptor cd_S18923C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2369,6216)];
    init_test(&cd_S18923C8, buf);
    S18923C8 *dp, &lv = *(dp=new (buf) S18923C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(37888,24860), "sizeof(S18923C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C8)");
    check_base_class_offset(lv, (S18923C5*)(S18923C9*), ABISELECT(23904,15700), "S18923C8");
    check_base_class_offset(lv, (S18923C5*)(S18923C11*), ABISELECT(23904,15700), "S18923C8");
    check_base_class_offset(lv, (S18923C10*)(S18923C9*), ABISELECT(30144,19776), "S18923C8");
    check_base_class_offset(lv, (S18923C10*)(S18923C11*), ABISELECT(30144,19776), "S18923C8");
    check_base_class_offset(lv, (S18923C2*)(S18923C11*), ABISELECT(30592,20092), "S18923C8");
    check_base_class_offset(lv, (S468C7*)(S18923C11*), ABISELECT(30888,20292), "S18923C8");
    check_base_class_offset(lv, (S18923C11*)(S18923C9*), ABISELECT(30592,20092), "S18923C8");
    /*is_ambiguous_... S18923C9::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S18923C9*), 0, "S18923C8");
    check_base_class_offset(lv, (S18923C9*), 0, "S18923C8");
    /*is_ambiguous_... S18923C8::S18923C2 */ AMB_check_base_class_offset(lv, (S18923C2*), ABISELECT(496,296), "S18923C8");
    check_base_class_offset(lv, (S18923C12*), ABISELECT(800,496), "S18923C8");
    check_field_offset(lv, s18923c8f0, ABISELECT(2240,1496), "S18923C8.s18923c8f0");
    test_class_info(&lv, &cd_S18923C8);
    dp->~S18923C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C8(Test_S18923C8, "S18923C8", ABISELECT(37888,24860));

#else // __cplusplus

extern void _ZN8S18923C8C1Ev();
extern void _ZN8S18923C8D1Ev();
Name_Map name_map_S18923C8[] = {
  NSPAIR(_ZN8S18923C8C1Ev),
  NSPAIR(_ZN8S18923C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S18923C10;
extern VTBL_ENTRY _ZTI9S18923C10[];
extern  VTBL_ENTRY _ZTV9S18923C10[];
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C11;
extern VTBL_ENTRY _ZTI9S18923C11[];
extern  VTBL_ENTRY _ZTV9S18923C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18923C11[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C9;
extern VTBL_ENTRY _ZTI8S18923C9[];
extern  VTBL_ENTRY _ZTV8S18923C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18923C9[];
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
extern Class_Descriptor cd_S18923C12;
extern VTBL_ENTRY _ZTI9S18923C12[];
extern  VTBL_ENTRY _ZTV9S18923C12[];
static Base_Class bases_S18923C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18923C5,    ABISELECT(23904,15700), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S18923C10,    ABISELECT(30144,19776), //bcp->offset
    21, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18923C2,    ABISELECT(30592,20092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(30888,20292), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18923C11,    ABISELECT(30592,20092), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S468C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18923C9,    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_S18923C2,    ABISELECT(496,296), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18923C12,    ABISELECT(800,496), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18923C8[];
extern void _ZN8S18923C8D1Ev();
extern void _ZN8S18923C8D0Ev();
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void ABISELECT(_ZThn800_N8S18923C8D1Ev,_ZThn496_N8S18923C8D1Ev)();
extern void ABISELECT(_ZThn800_N8S18923C8D0Ev,_ZThn496_N8S18923C8D0Ev)();
extern void _ZN9S18923C123v10Ev();
extern void _ZN9S18923C123v11Ev();
extern void _ZN8S18923C52v5Ev();
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18923C8D1Ev,_ZTv0_n32_N8S18923C8D1Ev)();
extern void ABISELECT(_ZThn30592_N8S18923C8D1Ev,_ZThn20092_N8S18923C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18923C8D0Ev,_ZTv0_n32_N8S18923C8D0Ev)();
extern void ABISELECT(_ZThn30592_N8S18923C8D0Ev,_ZThn20092_N8S18923C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N8S18923C8D1Ev,_ZTvn200_n32_N8S18923C8D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18923C8D0Ev,_ZTvn200_n32_N8S18923C8D0Ev)();
static  VTBL_ENTRY vtc_S18923C8[] = {
  ABISELECT(30592,20092),
  ABISELECT(30144,19776),
  ABISELECT(23904,15700),
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN8S18923C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C8D0Ev,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  ABISELECT(-800,-496),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N8S18923C8D1Ev,_ZThn496_N8S18923C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn800_N8S18923C8D0Ev,_ZThn496_N8S18923C8D0Ev),
  (VTBL_ENTRY)&_ZN9S18923C123v10Ev,
  (VTBL_ENTRY)&_ZN9S18923C123v11Ev,
  0,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  0,
  0,
  ABISELECT(-30144,-19776),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
  ABISELECT(-30592,-20092),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-30592,-20092),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C8D1Ev,_ZTv0_n32_N8S18923C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C8D0Ev,_ZTv0_n32_N8S18923C8D0Ev),
  ABISELECT(-30888,-20292),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C8D1Ev,_ZTvn200_n32_N8S18923C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C8D0Ev,_ZTvn200_n32_N8S18923C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S18923C8[];
extern void _ZN8S18923C9D1Ev();
extern void _ZN8S18923C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C9__8S18923C8[] = {
  ABISELECT(30592,20092),
  ABISELECT(30144,19776),
  ABISELECT(23904,15700),
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C9D0Ev,
};
extern void _ZN8S18923C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C5__8S18923C9__8S18923C8[] = {
  0,
  ABISELECT(-23904,-15700),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
};
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C10__8S18923C9__8S18923C8[] = {
  0,
  0,
  ABISELECT(-30144,-19776),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev)();
extern void ABISELECT(_ZThn30592_N8S18923C9D1Ev,_ZThn20092_N8S18923C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev)();
extern void ABISELECT(_ZThn30592_N8S18923C9D0Ev,_ZThn20092_N8S18923C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18923C11__8S18923C9__8S18923C8[] = {
  ABISELECT(-30592,-20092),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-30592,-20092),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N8S18923C9D1Ev,_ZTvn200_n32_N8S18923C9D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18923C9D0Ev,_ZTvn200_n32_N8S18923C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C79S18923C11__8S18923C9__8S18923C8[] = {
  ABISELECT(-30888,-20292),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C9D1Ev,_ZTvn200_n32_N8S18923C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C9D0Ev,_ZTvn200_n32_N8S18923C9D0Ev),
};
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void _ZN9S18923C11D1Ev();
extern void _ZN9S18923C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C11__8S18923C8[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D0Ev,
};
extern void _ZN8S18923C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C5__9S18923C11__8S18923C8[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
};
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C10__9S18923C11__8S18923C8[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
static  VTT_ENTRY vtt_S18923C8[] = {
  {&(_ZTV8S18923C8[5]),  5,44},
  {&(_tg__ZTV8S18923C9__8S18923C8[5]),  5,7},
  {&(_tg__ZTV8S18923C5__8S18923C9__8S18923C8[3]),  3,4},
  {&(_tg__ZTV9S18923C10__8S18923C9__8S18923C8[4]),  4,6},
  {&(_tg__ZTV9S18923C11__8S18923C9__8S18923C8[8]),  8,13},
  {&(_tg__ZTV6S468C79S18923C11__8S18923C9__8S18923C8[2]),  2,4},
  {&(_ZTV8S18923C8[20]),  20,44},
  {&(_ZTV8S18923C8[25]),  25,44},
  {&(_ZTV8S18923C8[35]),  35,44},
  {&(_ZTV8S18923C8[42]),  42,44},
  {&(_tg__ZTV9S18923C11__8S18923C8[4]),  4,9},
  {&(_tg__ZTV8S18923C5__9S18923C11__8S18923C8[3]),  3,4},
  {&(_tg__ZTV9S18923C10__9S18923C11__8S18923C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S18923C8[];
extern  VTBL_ENTRY _ZTV8S18923C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18923C8[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N8S18923C9D0Ev,_ZThn20092_N8S18923C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N8S18923C9D1Ev,_ZThn20092_N8S18923C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C8D0Ev,_ZTv0_n32_N8S18923C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N8S18923C8D0Ev,_ZThn20092_N8S18923C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C8D1Ev,_ZTv0_n32_N8S18923C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30592_N8S18923C8D1Ev,_ZThn20092_N8S18923C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18923C8 = {  "S18923C8", // class name
  bases_S18923C8, 9,
  &(vtc_S18923C8[0]), // expected_vtbl_contents
  &(vtt_S18923C8[0]), // expected_vtt_contents
  ABISELECT(37888,24860), // object size
  NSPAIRA(_ZTI8S18923C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S18923C8),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18923C8),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18923C4  : S18923C5 , virtual S18923C2 , virtual S18923C7 , S18923C8 {
  void *s18923c4f0;
  virtual  ~S18923C4(); // _ZN8S18923C4D2Ev
  S18923C4(); // tgen
};
//SIG(-1 S18923C4) C1{ BC2{ v1 FC3{ v2 v3 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp}[8] FC3[2] Fp Fi FC4{ vd m Fp FL Fp[7]} FC3[5] Fp[5] FC3[5]} VBC3 VBC5{ BC2 BC4 VBC3 vd v4 Fi Fs Fs:1 Fp Fl FC2 Fi[2] Fc[3] Fi} BC6{ BC7{ VBC2 VBC8{ v5 v6 Fc FL[10] FD FC3 Fp Fs Fp Fi} VBC9{ BC3 VBC2 BC4 VBC8 v7 Fi:2 FD[7] Fp FC2 Fp Fi Fp[2] FC4 FC3 FD[8]} BC4 Fp FC4 FC3 Fs} BC3 BC10{ vd v8 v9 Fi FC3 Fi[2] FU11{ m FL FD[10] FD Fs:0} FD Fi Fi FC8 FL Fi FC8} FC12{ BC9 BC8 BC4 BC2 VBC3 vd v10 v11 FC4 Fi Fp Fp FL FL Fi Fi Fp Fi FC8 Fi}} vd Fp}


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

static void Test_S18923C4()
{
  extern Class_Descriptor cd_S18923C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3567,9343)];
    init_test(&cd_S18923C4, buf);
    S18923C4 *dp, &lv = *(dp=new (buf) S18923C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(57056,37368), "sizeof(S18923C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C4)");
    /*is_ambiguous_... S18923C4::S18923C5 */ AMB_check_base_class_offset(lv, (S18923C5*), 0, "S18923C4");
    /*is_ambiguous_... S18923C4::S18923C2 */ AMB_check_base_class_offset(lv, (S18923C2*), ABISELECT(30160,19780), "S18923C4");
    check_base_class_offset(lv, (S18923C2*)(S18923C7*), ABISELECT(30160,19780), "S18923C4");
    check_base_class_offset(lv, (S18923C5*)(S18923C7*), ABISELECT(30464,19980), "S18923C4");
    check_base_class_offset(lv, (S468C7*)(S18923C7*), ABISELECT(36704,24056), "S18923C4");
    check_base_class_offset(lv, (S18923C7*), ABISELECT(30464,19980), "S18923C4");
    check_base_class_offset(lv, (S18923C5*)(S18923C9*)(S18923C8*), ABISELECT(43072,28208), "S18923C4");
    check_base_class_offset(lv, (S18923C5*)(S18923C11*), ABISELECT(43072,28208), "S18923C4");
    check_base_class_offset(lv, (S18923C10*)(S18923C9*)(S18923C8*), ABISELECT(49312,32284), "S18923C4");
    check_base_class_offset(lv, (S18923C10*)(S18923C11*), ABISELECT(49312,32284), "S18923C4");
    check_base_class_offset(lv, (S18923C2*)(S18923C11*), ABISELECT(49760,32600), "S18923C4");
    check_base_class_offset(lv, (S468C7*)(S18923C11*), ABISELECT(50056,32800), "S18923C4");
    check_base_class_offset(lv, (S18923C11*)(S18923C9*)(S18923C8*), ABISELECT(49760,32600), "S18923C4");
    /*is_ambiguous_... S18923C9::S468C7 */ AMB_check_base_class_offset(lv, (S468C7*)(S18923C9*)(S18923C8*), ABISELECT(6240,4076), "S18923C4");
    check_base_class_offset(lv, (S18923C9*)(S18923C8*), ABISELECT(6240,4076), "S18923C4");
    /*is_ambiguous_... S18923C8::S18923C2 */ AMB_check_base_class_offset(lv, (S18923C2*)(S18923C8*), ABISELECT(6736,4372), "S18923C4");
    check_base_class_offset(lv, (S18923C12*)(S18923C8*), ABISELECT(7040,4572), "S18923C4");
    check_base_class_offset(lv, (S18923C8*), ABISELECT(6240,4076), "S18923C4");
    check_field_offset(lv, s18923c4f0, ABISELECT(30144,19776), "S18923C4.s18923c4f0");
    test_class_info(&lv, &cd_S18923C4);
    dp->~S18923C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C4(Test_S18923C4, "S18923C4", ABISELECT(57056,37368));

#else // __cplusplus

extern void _ZN8S18923C4C1Ev();
extern void _ZN8S18923C4D2Ev();
Name_Map name_map_S18923C4[] = {
  NSPAIR(_ZN8S18923C4C1Ev),
  NSPAIR(_ZN8S18923C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C7;
extern VTBL_ENTRY _ZTI8S18923C7[];
extern  VTBL_ENTRY _ZTV8S18923C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18923C7[];
extern Class_Descriptor cd_S18923C5;
extern VTBL_ENTRY _ZTI8S18923C5[];
extern  VTBL_ENTRY _ZTV8S18923C5[];
extern Class_Descriptor cd_S18923C10;
extern VTBL_ENTRY _ZTI9S18923C10[];
extern  VTBL_ENTRY _ZTV9S18923C10[];
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C11;
extern VTBL_ENTRY _ZTI9S18923C11[];
extern  VTBL_ENTRY _ZTV9S18923C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18923C11[];
extern Class_Descriptor cd_S468C7;
extern VTBL_ENTRY _ZTI6S468C7[];
extern  VTBL_ENTRY _ZTV6S468C7[];
extern Class_Descriptor cd_S18923C9;
extern VTBL_ENTRY _ZTI8S18923C9[];
extern  VTBL_ENTRY _ZTV8S18923C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18923C9[];
extern Class_Descriptor cd_S18923C2;
extern VTBL_ENTRY _ZTI8S18923C2[];
extern  VTBL_ENTRY _ZTV8S18923C2[];
extern Class_Descriptor cd_S18923C12;
extern VTBL_ENTRY _ZTI9S18923C12[];
extern  VTBL_ENTRY _ZTV9S18923C12[];
extern Class_Descriptor cd_S18923C8;
extern VTBL_ENTRY _ZTI8S18923C8[];
extern  VTBL_ENTRY _ZTV8S18923C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18923C8[];
static Base_Class bases_S18923C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18923C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18923C2,    ABISELECT(30160,19780), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18923C5,    ABISELECT(30464,19980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S468C7,    ABISELECT(36704,24056), //bcp->offset
    43, //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18923C7,    ABISELECT(30464,19980), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18923C5,    ABISELECT(43072,28208), //bcp->offset
    47, //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
    9, //immediately_derived
  0, 1},
  {&cd_S18923C10,    ABISELECT(49312,32284), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 1},
  {&cd_S18923C2,    ABISELECT(49760,32600), //bcp->offset
    -1, //bcp->virtual_function_table_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_S468C7,    ABISELECT(50056,32800), //bcp->offset
    70, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18923C11,    ABISELECT(49760,32600), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S468C7,    ABISELECT(6240,4076), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S18923C9,    ABISELECT(6240,4076), //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18923C2,    ABISELECT(6736,4372), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18923C12,    ABISELECT(7040,4572), //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
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18923C8,    ABISELECT(6240,4076), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18923C4[];
extern void _ZN8S18923C52v5Ev();
extern void _ZN8S18923C4D1Ev();
extern void _ZN8S18923C4D0Ev();
extern void ABISELECT(_ZThn6240_N8S18923C4D1Ev,_ZThn4076_N8S18923C4D1Ev)();
extern void ABISELECT(_ZThn6240_N8S18923C4D0Ev,_ZThn4076_N8S18923C4D0Ev)();
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void ABISELECT(_ZThn7040_N8S18923C4D1Ev,_ZThn4572_N8S18923C4D1Ev)();
extern void ABISELECT(_ZThn7040_N8S18923C4D0Ev,_ZThn4572_N8S18923C4D0Ev)();
extern void _ZN9S18923C123v10Ev();
extern void _ZN9S18923C123v11Ev();
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN8S18923C52v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S18923C4D1Ev,_ZTv0_n20_N8S18923C4D1Ev)();
extern void ABISELECT(_ZThn30464_N8S18923C4D1Ev,_ZThn19980_N8S18923C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18923C4D0Ev,_ZTv0_n20_N8S18923C4D0Ev)();
extern void ABISELECT(_ZThn30464_N8S18923C4D0Ev,_ZThn19980_N8S18923C4D0Ev)() __attribute__((weak));
extern void _ZN8S18923C72v6Ev();
extern void ABISELECT(_ZTvn6240_n40_N8S18923C4D1Ev,_ZTvn4076_n20_N8S18923C4D1Ev)();
extern void ABISELECT(_ZTvn6240_n40_N8S18923C4D0Ev,_ZTvn4076_n20_N8S18923C4D0Ev)();
extern void _ZN8S18923C52v5Ev();
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18923C4D1Ev,_ZTv0_n32_N8S18923C4D1Ev)();
extern void ABISELECT(_ZThn49760_N8S18923C4D1Ev,_ZThn32600_N8S18923C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18923C4D0Ev,_ZTv0_n32_N8S18923C4D0Ev)();
extern void ABISELECT(_ZThn49760_N8S18923C4D0Ev,_ZThn32600_N8S18923C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn296_n64_N8S18923C4D1Ev,_ZTvn200_n32_N8S18923C4D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18923C4D0Ev,_ZTvn200_n32_N8S18923C4D0Ev)();
static  VTBL_ENTRY vtc_S18923C4[] = {
  ABISELECT(49760,32600),
  ABISELECT(49312,32284),
  ABISELECT(43072,28208),
  ABISELECT(30464,19980),
  ABISELECT(30160,19780),
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18923C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C4D0Ev,
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  ABISELECT(-6240,-4076),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N8S18923C4D1Ev,_ZThn4076_N8S18923C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6240_N8S18923C4D0Ev,_ZThn4076_N8S18923C4D0Ev),
  ABISELECT(-6736,-4372),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  ABISELECT(-7040,-4572),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7040_N8S18923C4D1Ev,_ZThn4572_N8S18923C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7040_N8S18923C4D0Ev,_ZThn4572_N8S18923C4D0Ev),
  (VTBL_ENTRY)&_ZN9S18923C123v10Ev,
  (VTBL_ENTRY)&_ZN9S18923C123v11Ev,
  0,
  0,
  ABISELECT(-30160,-19780),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  0,
  ABISELECT(-30464,-19980),
  0,
  ABISELECT(-304,-200),
  ABISELECT(-30464,-19980),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18923C4D1Ev,_ZTv0_n20_N8S18923C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18923C4D0Ev,_ZTv0_n20_N8S18923C4D0Ev),
  (VTBL_ENTRY)&_ZN8S18923C72v6Ev,
  ABISELECT(-36704,-24056),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N8S18923C4D1Ev,_ZTvn4076_n20_N8S18923C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6240_n40_N8S18923C4D0Ev,_ZTvn4076_n20_N8S18923C4D0Ev),
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  0,
  0,
  ABISELECT(-49312,-32284),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
  ABISELECT(-49760,-32600),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-49760,-32600),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C4D1Ev,_ZTv0_n32_N8S18923C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C4D0Ev,_ZTv0_n32_N8S18923C4D0Ev),
  ABISELECT(-50056,-32800),
  (VTBL_ENTRY)&(_ZTI8S18923C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C4D1Ev,_ZTvn200_n32_N8S18923C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C4D0Ev,_ZTvn200_n32_N8S18923C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S18923C4[];
extern void _ZN8S18923C8D1Ev();
extern void _ZN8S18923C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C8__8S18923C4[] = {
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN8S18923C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C8D0Ev,
};
extern void _ZN8S18923C9D1Ev();
extern void _ZN8S18923C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C98S18923C8__8S18923C4[] = {
  ABISELECT(43520,28524),
  ABISELECT(43072,28208),
  ABISELECT(36832,24132),
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C9D0Ev,
};
extern void _ZN8S18923C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C5__8S18923C98S18923C8__8S18923C4[] = {
  0,
  ABISELECT(-36832,-24132),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
};
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C10__8S18923C98S18923C8__8S18923C4[] = {
  0,
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev)();
extern void ABISELECT(_ZThn43520_N8S18923C9D1Ev,_ZThn28524_N8S18923C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev)();
extern void ABISELECT(_ZThn43520_N8S18923C9D0Ev,_ZThn28524_N8S18923C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18923C11__8S18923C98S18923C8__8S18923C4[] = {
  ABISELECT(-43520,-28524),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-43520,-28524),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N8S18923C9D1Ev,_ZTvn200_n32_N8S18923C9D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18923C9D0Ev,_ZTvn200_n32_N8S18923C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C79S18923C11__8S18923C98S18923C8__8S18923C4[] = {
  ABISELECT(-43816,-28724),
  (VTBL_ENTRY)&(_ZTI8S18923C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C9D1Ev,_ZTvn200_n32_N8S18923C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C9D0Ev,_ZTvn200_n32_N8S18923C9D0Ev),
};
extern void _ZN8S18923C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C5__8S18923C8__8S18923C4[] = {
  0,
  ABISELECT(-36832,-24132),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
};
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C10__8S18923C8__8S18923C4[] = {
  0,
  0,
  ABISELECT(-43072,-28208),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S18923C8D1Ev,_ZTv0_n32_N8S18923C8D1Ev)();
extern void ABISELECT(_ZThn43520_N8S18923C8D1Ev,_ZThn28524_N8S18923C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S18923C8D0Ev,_ZTv0_n32_N8S18923C8D0Ev)();
extern void ABISELECT(_ZThn43520_N8S18923C8D0Ev,_ZThn28524_N8S18923C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18923C11__8S18923C8__8S18923C4[] = {
  ABISELECT(-43520,-28524),
  0,
  0,
  0,
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  ABISELECT(-43520,-28524),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C8D1Ev,_ZTv0_n32_N8S18923C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S18923C8D0Ev,_ZTv0_n32_N8S18923C8D0Ev),
};
extern void ABISELECT(_ZTvn296_n64_N8S18923C8D1Ev,_ZTvn200_n32_N8S18923C8D1Ev)();
extern void ABISELECT(_ZTvn296_n64_N8S18923C8D0Ev,_ZTvn200_n32_N8S18923C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV6S468C79S18923C11__8S18923C8__8S18923C4[] = {
  ABISELECT(-43816,-28724),
  (VTBL_ENTRY)&(_ZTI8S18923C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C8D1Ev,_ZTvn200_n32_N8S18923C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn296_n64_N8S18923C8D0Ev,_ZTvn200_n32_N8S18923C8D0Ev),
};
extern void _ZN8S18923C52v5Ev();
extern void _ZN8S18923C7D1Ev();
extern void _ZN8S18923C7D0Ev();
extern void _ZN8S18923C72v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C7__8S18923C4[] = {
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C7[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18923C7D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C7D0Ev,
  (VTBL_ENTRY)&_ZN8S18923C72v6Ev,
};
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C2__8S18923C7__8S18923C4[] = {
  0,
  0,
  ABISELECT(304,200),
  (VTBL_ENTRY)&(_ZTI8S18923C7[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
};
extern void _ZN8S18923C22v3Ev();
extern void _ZN8S18923C22v4Ev();
extern void _ZN9S18923C112v9Ev();
extern void _ZN9S18923C11D1Ev();
extern void _ZN9S18923C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C11__8S18923C4[] = {
  ABISELECT(-448,-316),
  ABISELECT(-6688,-4392),
  0,
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18923C22v4Ev,
  (VTBL_ENTRY)&_ZN9S18923C112v9Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18923C11D0Ev,
};
extern void _ZN8S18923C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18923C5__9S18923C11__8S18923C4[] = {
  0,
  ABISELECT(6688,4392),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN8S18923C52v5Ev,
};
extern void _ZN9S18923C102v7Ev();
extern void _ZN9S18923C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S18923C10__9S18923C11__8S18923C4[] = {
  0,
  0,
  ABISELECT(448,316),
  (VTBL_ENTRY)&(_ZTI9S18923C11[0]),
  (VTBL_ENTRY)&_ZN9S18923C102v7Ev,
  (VTBL_ENTRY)&_ZN9S18923C102v8Ev,
};
static  VTT_ENTRY vtt_S18923C4[] = {
  {&(_ZTV8S18923C4[7]),  7,74},
  {&(_tg__ZTV8S18923C8__8S18923C4[5]),  5,7},
  {&(_tg__ZTV8S18923C98S18923C8__8S18923C4[5]),  5,7},
  {&(_tg__ZTV8S18923C5__8S18923C98S18923C8__8S18923C4[3]),  3,4},
  {&(_tg__ZTV9S18923C10__8S18923C98S18923C8__8S18923C4[4]),  4,6},
  {&(_tg__ZTV9S18923C11__8S18923C98S18923C8__8S18923C4[8]),  8,13},
  {&(_tg__ZTV6S468C79S18923C11__8S18923C98S18923C8__8S18923C4[2]),  2,4},
  {&(_tg__ZTV8S18923C5__8S18923C8__8S18923C4[3]),  3,4},
  {&(_tg__ZTV9S18923C10__8S18923C8__8S18923C4[4]),  4,6},
  {&(_tg__ZTV9S18923C11__8S18923C8__8S18923C4[8]),  8,13},
  {&(_tg__ZTV6S468C79S18923C11__8S18923C8__8S18923C4[2]),  2,4},
  {&(_ZTV8S18923C4[31]),  31,74},
  {&(_ZTV8S18923C4[39]),  39,74},
  {&(_ZTV8S18923C4[45]),  45,74},
  {&(_ZTV8S18923C4[15]),  15,74},
  {&(_ZTV8S18923C4[50]),  50,74},
  {&(_ZTV8S18923C4[55]),  55,74},
  {&(_ZTV8S18923C4[65]),  65,74},
  {&(_ZTV8S18923C4[72]),  72,74},
  {&(_tg__ZTV8S18923C7__8S18923C4[3]),  3,7},
  {&(_tg__ZTV8S18923C2__8S18923C7__8S18923C4[4]),  4,6},
  {&(_tg__ZTV9S18923C11__8S18923C4[4]),  4,9},
  {&(_tg__ZTV8S18923C5__9S18923C11__8S18923C4[3]),  3,4},
  {&(_tg__ZTV9S18923C10__9S18923C11__8S18923C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S18923C4[];
extern  VTBL_ENTRY _ZTV8S18923C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18923C4[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C8D0Ev,_ZTv0_n32_N8S18923C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N8S18923C8D0Ev,_ZThn28524_N8S18923C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C8D1Ev,_ZTv0_n32_N8S18923C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N8S18923C8D1Ev,_ZThn28524_N8S18923C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C9D0Ev,_ZTv0_n32_N8S18923C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N8S18923C9D0Ev,_ZThn28524_N8S18923C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C9D1Ev,_ZTv0_n32_N8S18923C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43520_N8S18923C9D1Ev,_ZThn28524_N8S18923C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C4D0Ev,_ZTv0_n32_N8S18923C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49760_N8S18923C4D0Ev,_ZThn32600_N8S18923C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S18923C4D1Ev,_ZTv0_n32_N8S18923C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49760_N8S18923C4D1Ev,_ZThn32600_N8S18923C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18923C4D0Ev,_ZTv0_n20_N8S18923C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N8S18923C4D0Ev,_ZThn19980_N8S18923C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18923C4D1Ev,_ZTv0_n20_N8S18923C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N8S18923C4D1Ev,_ZThn19980_N8S18923C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18923C4 = {  "S18923C4", // class name
  bases_S18923C4, 15,
  &(vtc_S18923C4[0]), // expected_vtbl_contents
  &(vtt_S18923C4[0]), // expected_vtt_contents
  ABISELECT(57056,37368), // object size
  NSPAIRA(_ZTI8S18923C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18923C4),74, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18923C4),24, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18923C1  {
  ::S18923C2 s18923c1f0;
  int s18923c1f1[4];
  long double s18923c1f2;
  ::S468C14_nt s18923c1f3;
  ::S18923C4 s18923c1f4;
  void *s18923c1f5;
  virtual  ~S18923C1(); // _ZN8S18923C1D1Ev
  virtual void  v1(); // _ZN8S18923C12v1Ev
  virtual void  v2(); // _ZN8S18923C12v2Ev
  S18923C1(); // tgen
};
//SIG(1 S18923C1) C1{ vd v1 v2 FC2{ v3 v4 FL Fp Fc:6 FD Fc[7] FL Fc[9] FD[8] Fp Fs Fp[7] Fi Fp} Fi[4] FD FC3{ m Fc} FC4{ BC5{ v5 FC2[8] FC2[2] Fp Fi FC6{ vd m Fp FL Fp[7]} FC2[5] Fp[5] FC2[5]} VBC2 VBC7{ BC5 BC6 VBC2 vd v6 Fi Fs Fs:1 Fp Fl FC5 Fi[2] Fc[3] Fi} BC8{ BC9{ VBC5 VBC10{ v7 v8 Fc FL[10] FD FC2 Fp Fs Fp Fi} VBC11{ BC2 VBC5 BC6 VBC10 v9 Fi:2 FD[7] Fp FC5 Fp Fi Fp[2] FC6 FC2 FD[8]} BC6 Fp FC6 FC2 Fs} BC2 BC12{ vd v10 v11 Fi FC2 Fi[2] FU13{ m FL FD[10] FD Fs:0} FD Fi Fi FC10 FL Fi FC10} FC14{ BC11 BC10 BC6 BC5 VBC2 vd v12 v13 FC6 Fi Fp Fp FL FL Fi Fi Fp Fi FC10 Fi}} vd Fp} Fp}


 S18923C1 ::~S18923C1(){ note_dtor("S18923C1", this);}
void  S18923C1 ::v1(){vfunc_called(this, "_ZN8S18923C12v1Ev");}
void  S18923C1 ::v2(){vfunc_called(this, "_ZN8S18923C12v2Ev");}
S18923C1 ::S18923C1(){ note_ctor("S18923C1", this);} // tgen

static void Test_S18923C1()
{
  extern Class_Descriptor cd_S18923C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3591,9403)];
    init_test(&cd_S18923C1, buf);
    S18923C1 *dp, &lv = *(dp=new (buf) S18923C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(57440,37608), "sizeof(S18923C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18923C1)");
    check_field_offset(lv, s18923c1f0, ABISELECT(16,4), "S18923C1.s18923c1f0");
    check_field_offset(lv, s18923c1f1, ABISELECT(320,204), "S18923C1.s18923c1f1");
    check_field_offset(lv, s18923c1f2, ABISELECT(336,220), "S18923C1.s18923c1f2");
    check_field_offset(lv, s18923c1f3, ABISELECT(352,232), "S18923C1.s18923c1f3");
    check_field_offset(lv, s18923c1f4, ABISELECT(368,236), "S18923C1.s18923c1f4");
    check_field_offset(lv, s18923c1f5, ABISELECT(57424,37604), "S18923C1.s18923c1f5");
    test_class_info(&lv, &cd_S18923C1);
    dp->~S18923C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18923C1(Test_S18923C1, "S18923C1", ABISELECT(57440,37608));

#else // __cplusplus

extern void _ZN8S18923C1C1Ev();
extern void _ZN8S18923C1D1Ev();
Name_Map name_map_S18923C1[] = {
  NSPAIR(_ZN8S18923C1C1Ev),
  NSPAIR(_ZN8S18923C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18923C1[];
extern void _ZN8S18923C1D1Ev();
extern void _ZN8S18923C1D0Ev();
extern void _ZN8S18923C12v1Ev();
extern void _ZN8S18923C12v2Ev();
static  VTBL_ENTRY vtc_S18923C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18923C1[0]),
  (VTBL_ENTRY)&_ZN8S18923C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18923C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18923C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18923C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18923C1[];
extern  VTBL_ENTRY _ZTV8S18923C1[];
Class_Descriptor cd_S18923C1 = {  "S18923C1", // class name
  0,0,//no base classes
  &(vtc_S18923C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(57440,37608), // object size
  NSPAIRA(_ZTI8S18923C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18923C1),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  S19646C4  {
  __tsi64 s19646c4f0[8];
  char s19646c4f1[4];
  __tsi64 s19646c4f2:7;
  int s19646c4f3;
  long double s19646c4f4;
  __tsi64 s19646c4f5;
  virtual void  v1(); // _ZN8S19646C42v1Ev
  ~S19646C4(); // tgen
  S19646C4(); // tgen
};
//SIG(-1 S19646C4) C1{ v1 FL[8] Fc[4] FL:7 Fi FD FL}


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

static void Test_S19646C4()
{
  extern Class_Descriptor cd_S19646C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S19646C4, buf);
    S19646C4 *dp, &lv = *(dp=new (buf) S19646C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S19646C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C4)");
    check_field_offset(lv, s19646c4f0, ABISELECT(8,4), "S19646C4.s19646c4f0");
    check_field_offset(lv, s19646c4f1, ABISELECT(72,68), "S19646C4.s19646c4f1");
    set_bf_and_test(lv, s19646c4f2, ABISELECT(76,72), 0, 7, 1, "S19646C4");
    set_bf_and_test(lv, s19646c4f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S19646C4");
    check_field_offset(lv, s19646c4f3, ABISELECT(80,76), "S19646C4.s19646c4f3");
    check_field_offset(lv, s19646c4f4, ABISELECT(96,80), "S19646C4.s19646c4f4");
    check_field_offset(lv, s19646c4f5, ABISELECT(112,92), "S19646C4.s19646c4f5");
    test_class_info(&lv, &cd_S19646C4);
    dp->~S19646C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C4(Test_S19646C4, "S19646C4", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S19646C4C1Ev();
extern void _ZN8S19646C4D1Ev();
Name_Map name_map_S19646C4[] = {
  NSPAIR(_ZN8S19646C4C1Ev),
  NSPAIR(_ZN8S19646C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19646C4[];
extern void _ZN8S19646C42v1Ev();
static  VTBL_ENTRY vtc_S19646C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C4[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
};
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
Class_Descriptor cd_S19646C4 = {  "S19646C4", // class name
  0,0,//no base classes
  &(vtc_S19646C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S19646C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19646C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19646C6  : S19646C4 {
  ::S19646C4 s19646c6f0;
  int s19646c6f1;
  ::S19646C4 s19646c6f2;
  int s19646c6f3;
  char s19646c6f4[6];
  char s19646c6f5:4;
  void *s19646c6f6;
  ::S19646C4 s19646c6f7;
  int s19646c6f8;
  virtual void  v2(); // _ZN8S19646C62v2Ev
  virtual void  v3(); // _ZN8S19646C62v3Ev
  virtual void  v4(); // _ZN8S19646C62v4Ev
  ~S19646C6(); // tgen
  S19646C6(); // tgen
};
//SIG(-1 S19646C6) C1{ BC2{ v4 FL[8] Fc[4] FL:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S19646C6 ::v2(){vfunc_called(this, "_ZN8S19646C62v2Ev");}
void  S19646C6 ::v3(){vfunc_called(this, "_ZN8S19646C62v3Ev");}
void  S19646C6 ::v4(){vfunc_called(this, "_ZN8S19646C62v4Ev");}
S19646C6 ::~S19646C6(){ note_dtor("S19646C6", this);} // tgen
S19646C6 ::S19646C6(){ note_ctor("S19646C6", this);} // tgen

static void Test_S19646C6()
{
  extern Class_Descriptor cd_S19646C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S19646C6, buf);
    S19646C6 *dp, &lv = *(dp=new (buf) S19646C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S19646C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C6)");
    check_base_class_offset(lv, (S19646C4*), 0, "S19646C6");
    check_field_offset(lv, s19646c6f0, ABISELECT(128,100), "S19646C6.s19646c6f0");
    check_field_offset(lv, s19646c6f1, ABISELECT(256,200), "S19646C6.s19646c6f1");
    check_field_offset(lv, s19646c6f2, ABISELECT(272,204), "S19646C6.s19646c6f2");
    check_field_offset(lv, s19646c6f3, ABISELECT(400,304), "S19646C6.s19646c6f3");
    check_field_offset(lv, s19646c6f4, ABISELECT(404,308), "S19646C6.s19646c6f4");
    set_bf_and_test(lv, s19646c6f5, ABISELECT(410,314), 0, 4, 1, "S19646C6");
    set_bf_and_test(lv, s19646c6f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S19646C6");
    check_field_offset(lv, s19646c6f6, ABISELECT(416,316), "S19646C6.s19646c6f6");
    check_field_offset(lv, s19646c6f7, ABISELECT(432,320), "S19646C6.s19646c6f7");
    check_field_offset(lv, s19646c6f8, ABISELECT(560,420), "S19646C6.s19646c6f8");
    test_class_info(&lv, &cd_S19646C6);
    dp->~S19646C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C6(Test_S19646C6, "S19646C6", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN8S19646C6C1Ev();
extern void _ZN8S19646C6D1Ev();
Name_Map name_map_S19646C6[] = {
  NSPAIR(_ZN8S19646C6C1Ev),
  NSPAIR(_ZN8S19646C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
static Base_Class bases_S19646C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19646C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19646C6[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY vtc_S19646C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C6[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
Class_Descriptor cd_S19646C6 = {  "S19646C6", // class name
  bases_S19646C6, 1,
  &(vtc_S19646C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI8S19646C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19646C6),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  S19646C7  : S19646C4 {
  ::S19646C4 s19646c7f0;
  ::S19646C4 s19646c7f1;
  ::S19921C7 s19646c7f2;
  virtual void  v5(); // _ZN8S19646C72v5Ev
  ~S19646C7(); // tgen
  S19646C7(); // tgen
};
//SIG(-1 S19646C7) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


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

static void Test_S19646C7()
{
  extern Class_Descriptor cd_S19646C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S19646C7, buf);
    S19646C7 *dp, &lv = *(dp=new (buf) S19646C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S19646C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C7)");
    check_base_class_offset(lv, (S19646C4*), 0, "S19646C7");
    check_field_offset(lv, s19646c7f0, ABISELECT(128,100), "S19646C7.s19646c7f0");
    check_field_offset(lv, s19646c7f1, ABISELECT(256,200), "S19646C7.s19646c7f1");
    check_field_offset(lv, s19646c7f2, ABISELECT(384,300), "S19646C7.s19646c7f2");
    test_class_info(&lv, &cd_S19646C7);
    dp->~S19646C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C7(Test_S19646C7, "S19646C7", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S19646C7C1Ev();
extern void _ZN8S19646C7D1Ev();
Name_Map name_map_S19646C7[] = {
  NSPAIR(_ZN8S19646C7C1Ev),
  NSPAIR(_ZN8S19646C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
static Base_Class bases_S19646C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19646C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19646C7[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY vtc_S19646C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C7[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
Class_Descriptor cd_S19646C7 = {  "S19646C7", // class name
  bases_S19646C7, 1,
  &(vtc_S19646C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S19646C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19646C7),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  S19646C5  : S19646C6 , virtual S19922C8 , S19646C4 , virtual S19646C7 {
  long s19646c5f0;
  long s19646c5f1;
  ~S19646C5(); // tgen
  S19646C5(); // tgen
};
//SIG(-1 S19646C5) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC6{ v6 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} BC3 VBC7{ BC3 v5 FC3 FC3 FU5} Fl Fl}


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

static void Test_S19646C5()
{
  extern Class_Descriptor cd_S19646C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,273)];
    init_test(&cd_S19646C5, buf);
    S19646C5 *dp, &lv = *(dp=new (buf) S19646C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1088), "sizeof(S19646C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C5)");
    check_base_class_offset(lv, (S19646C4*)(S19646C6*), 0, "S19646C5");
    check_base_class_offset(lv, (S19646C6*), 0, "S19646C5");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(720,532), "S19646C5");
    /*is_ambiguous_... S19646C5::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*), ABISELECT(576,424), "S19646C5");
    check_base_class_offset(lv, (S19646C4*)(S19646C7*), ABISELECT(1008,760), "S19646C5");
    check_base_class_offset(lv, (S19646C7*), ABISELECT(1008,760), "S19646C5");
    check_field_offset(lv, s19646c5f0, ABISELECT(696,524), "S19646C5.s19646c5f0");
    check_field_offset(lv, s19646c5f1, ABISELECT(704,528), "S19646C5.s19646c5f1");
    test_class_info(&lv, &cd_S19646C5);
    dp->~S19646C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C5(Test_S19646C5, "S19646C5", ABISELECT(1424,1088));

#else // __cplusplus

extern void _ZN8S19646C5C1Ev();
extern void _ZN8S19646C5D1Ev();
Name_Map name_map_S19646C5[] = {
  NSPAIR(_ZN8S19646C5C1Ev),
  NSPAIR(_ZN8S19646C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
static Base_Class bases_S19646C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19646C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19646C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19922C8,    ABISELECT(720,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19646C4,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19646C4,    ABISELECT(1008,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C7,    ABISELECT(1008,760), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19646C5[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY vtc_S19646C5[] = {
  ABISELECT(1008,760),
  ABISELECT(720,532),
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  0,
  0,
  ABISELECT(-1008,-760),
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S19646C5[];
static  VTT_ENTRY vtt_S19646C5[] = {
  {&(_ZTV8S19646C5[4]),  4,17},
  {&(_ZTV8S19646C5[15]),  15,17},
};
extern VTBL_ENTRY _ZTI8S19646C5[];
extern  VTBL_ENTRY _ZTV8S19646C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19646C5[];
Class_Descriptor cd_S19646C5 = {  "S19646C5", // class name
  bases_S19646C5, 6,
  &(vtc_S19646C5[0]), // expected_vtbl_contents
  &(vtt_S19646C5[0]), // expected_vtt_contents
  ABISELECT(1424,1088), // object size
  NSPAIRA(_ZTI8S19646C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19646C5),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19646C5),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19646C9  {
  long double s19646c9f0;
  void *s19646c9f1;
  long double s19646c9f2[8];
  void *s19646c9f3[9];
  ::S19922C12 s19646c9f4;
  int s19646c9f5;
  char s19646c9f6;
  long double s19646c9f7[4];
  char s19646c9f8;
  int s19646c9f9;
  virtual void  v6(); // _ZN8S19646C92v6Ev
  ~S19646C9(); // tgen
  S19646C9(); // tgen
};
//SIG(-1 S19646C9) C1{ v1 FD Fp FD[8] Fp[9] FC2{ m FD Fp[10] FD Fi:0 Fi FD FC3{ BC4{ v3 FL[8] Fc[4] FL:7 Fi FD FL} v2 FC4 FC4 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 Fl FD FC6{ BC4 v4 v5 v6 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi}} Fi Fc FD[4] Fc Fi}


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

static void Test_S19646C9()
{
  extern Class_Descriptor cd_S19646C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,268)];
    init_test(&cd_S19646C9, buf);
    S19646C9 *dp, &lv = *(dp=new (buf) S19646C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1068), "sizeof(S19646C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C9)");
    check_field_offset(lv, s19646c9f0, ABISELECT(16,4), "S19646C9.s19646c9f0");
    check_field_offset(lv, s19646c9f1, ABISELECT(32,16), "S19646C9.s19646c9f1");
    check_field_offset(lv, s19646c9f2, ABISELECT(48,20), "S19646C9.s19646c9f2");
    check_field_offset(lv, s19646c9f3, ABISELECT(176,116), "S19646C9.s19646c9f3");
    check_field_offset(lv, s19646c9f4, ABISELECT(256,152), "S19646C9.s19646c9f4");
    check_field_offset(lv, s19646c9f5, ABISELECT(1424,1004), "S19646C9.s19646c9f5");
    check_field_offset(lv, s19646c9f6, ABISELECT(1428,1008), "S19646C9.s19646c9f6");
    check_field_offset(lv, s19646c9f7, ABISELECT(1440,1012), "S19646C9.s19646c9f7");
    check_field_offset(lv, s19646c9f8, ABISELECT(1504,1060), "S19646C9.s19646c9f8");
    check_field_offset(lv, s19646c9f9, ABISELECT(1508,1064), "S19646C9.s19646c9f9");
    test_class_info(&lv, &cd_S19646C9);
    dp->~S19646C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C9(Test_S19646C9, "S19646C9", ABISELECT(1520,1068));

#else // __cplusplus

extern void _ZN8S19646C9C1Ev();
extern void _ZN8S19646C9D1Ev();
Name_Map name_map_S19646C9[] = {
  NSPAIR(_ZN8S19646C9C1Ev),
  NSPAIR(_ZN8S19646C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19646C9[];
extern void _ZN8S19646C92v6Ev();
static  VTBL_ENTRY vtc_S19646C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C9[0]),
  (VTBL_ENTRY)&_ZN8S19646C92v6Ev,
};
extern VTBL_ENTRY _ZTI8S19646C9[];
extern  VTBL_ENTRY _ZTV8S19646C9[];
Class_Descriptor cd_S19646C9 = {  "S19646C9", // class name
  0,0,//no base classes
  &(vtc_S19646C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1520,1068), // object size
  NSPAIRA(_ZTI8S19646C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19646C9),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  S19646C12  : S19646C4 , S19646C7 , S19922C8 {
  ::S19921C7 s19646c12f0;
  char s19646c12f1;
  char s19646c12f2;
  ::S19646C5 s19646c12f3;
  ::S19646C9 s19646c12f4;
  int s19646c12f5;
  long s19646c12f6;
  virtual void  v7(); // _ZN9S19646C122v7Ev
  virtual void  v8(); // _ZN9S19646C122v8Ev
  ~S19646C12(); // tgen
  S19646C12(); // tgen
};
//SIG(-1 S19646C12) C1{ BC2{ v3 FL[8] Fc[4] FL:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC6{ v5 FL[8] Fc[4] FL:7 Fi FD FL} FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC7{ BC8{ BC2 v6 v7 v8 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl Fl} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC11{ BC6 v10 FC6 FC6 FU4} Fc:8 Fl FD FC12{ BC6 v11 v12 v13 FC6 Fi FC6 Fi Fc[6] Fc:4 Fp FC6 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S19646C12 ::v7(){vfunc_called(this, "_ZN9S19646C122v7Ev");}
void  S19646C12 ::v8(){vfunc_called(this, "_ZN9S19646C122v8Ev");}
S19646C12 ::~S19646C12(){ note_dtor("S19646C12", this);} // tgen
S19646C12 ::S19646C12(){ note_ctor("S19646C12", this);} // tgen

static void Test_S19646C12()
{
  extern Class_Descriptor cd_S19646C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,714)];
    init_test(&cd_S19646C12, buf);
    S19646C12 *dp, &lv = *(dp=new (buf) S19646C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2852), "sizeof(S19646C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C12)");
    /*is_ambiguous_... S19646C12::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*), 0, "S19646C12");
    check_base_class_offset(lv, (S19646C4*)(S19646C7*), ABISELECT(128,100), "S19646C12");
    check_base_class_offset(lv, (S19646C7*), ABISELECT(128,100), "S19646C12");
    check_base_class_offset(lv, (S19922C8*), ABISELECT(544,428), "S19646C12");
    check_field_offset(lv, s19646c12f0, ABISELECT(832,656), "S19646C12.s19646c12f0");
    check_field_offset(lv, s19646c12f1, ABISELECT(864,684), "S19646C12.s19646c12f1");
    check_field_offset(lv, s19646c12f2, ABISELECT(865,685), "S19646C12.s19646c12f2");
    check_field_offset(lv, s19646c12f3, ABISELECT(880,688), "S19646C12.s19646c12f3");
    check_field_offset(lv, s19646c12f4, ABISELECT(2304,1776), "S19646C12.s19646c12f4");
    check_field_offset(lv, s19646c12f5, ABISELECT(3824,2844), "S19646C12.s19646c12f5");
    check_field_offset(lv, s19646c12f6, ABISELECT(3832,2848), "S19646C12.s19646c12f6");
    test_class_info(&lv, &cd_S19646C12);
    dp->~S19646C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C12(Test_S19646C12, "S19646C12", ABISELECT(3840,2852));

#else // __cplusplus

extern void _ZN9S19646C12C1Ev();
extern void _ZN9S19646C12D1Ev();
Name_Map name_map_S19646C12[] = {
  NSPAIR(_ZN9S19646C12C1Ev),
  NSPAIR(_ZN9S19646C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S19646C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19646C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19646C4,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19646C7,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19646C12[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C122v7Ev();
extern void _ZN9S19646C122v8Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY vtc_S19646C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C12[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v8Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19646C12[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern VTBL_ENTRY _ZTI9S19646C12[];
extern  VTBL_ENTRY _ZTV9S19646C12[];
Class_Descriptor cd_S19646C12 = {  "S19646C12", // class name
  bases_S19646C12, 4,
  &(vtc_S19646C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2852), // object size
  NSPAIRA(_ZTI9S19646C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19646C12),9, //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  S19646C13  : S19646C4 , virtual S19646C6 , virtual S19646C7 , S19646C5 , S19922C8 {
  int s19646c13f0;
  virtual void  v9(); // _ZN9S19646C132v9Ev
  ~S19646C13(); // tgen
  S19646C13(); // tgen
};
//SIG(-1 S19646C13) C1{ BC2{ v2 FL[8] Fc[4] FL:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC8{ v7 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} BC2 VBC4 Fl Fl} BC7 v1 Fi}


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

static void Test_S19646C13()
{
  extern Class_Descriptor cd_S19646C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,462)];
    init_test(&cd_S19646C13, buf);
    S19646C13 *dp, &lv = *(dp=new (buf) S19646C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1844), "sizeof(S19646C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C13)");
    /*is_ambiguous_... S19646C13::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*), 0, "S19646C13");
    /*is_ambiguous_... S19646C13::S19646C6 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C6*), ABISELECT(1136,864), "S19646C13");
    /*is_ambiguous_... S19646C13::S19646C6 */ AMB_check_base_class_offset(lv, (S19646C6*), ABISELECT(1136,864), "S19646C13");
    check_base_class_offset(lv, (S19646C4*)(S19646C7*), ABISELECT(1712,1288), "S19646C13");
    check_base_class_offset(lv, (S19646C7*), ABISELECT(1712,1288), "S19646C13");
    check_base_class_offset(lv, (S19646C7*)(S19646C5*), ABISELECT(1712,1288), "S19646C13");
    check_base_class_offset(lv, (S19646C4*)(S19646C6*)(S19646C5*), ABISELECT(128,100), "S19646C13");
    check_base_class_offset(lv, (S19646C6*)(S19646C5*), ABISELECT(128,100), "S19646C13");
    check_base_class_offset(lv, (S19922C8*)(S19646C5*), ABISELECT(2128,1616), "S19646C13");
    /*is_ambiguous_... S19646C5::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C5*), ABISELECT(704,524), "S19646C13");
    check_base_class_offset(lv, (S19646C5*), ABISELECT(128,100), "S19646C13");
    /*is_ambiguous_... S19646C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(848,632), "S19646C13");
    check_field_offset(lv, s19646c13f0, ABISELECT(1132,860), "S19646C13.s19646c13f0");
    test_class_info(&lv, &cd_S19646C13);
    dp->~S19646C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C13(Test_S19646C13, "S19646C13", ABISELECT(2416,1844));

#else // __cplusplus

extern void _ZN9S19646C13C1Ev();
extern void _ZN9S19646C13D1Ev();
Name_Map name_map_S19646C13[] = {
  NSPAIR(_ZN9S19646C13C1Ev),
  NSPAIR(_ZN9S19646C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C5;
extern VTBL_ENTRY _ZTI8S19646C5[];
extern  VTBL_ENTRY _ZTV8S19646C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19646C5[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
static Base_Class bases_S19646C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19646C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C4,    ABISELECT(1136,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19646C6,    ABISELECT(1136,864), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19646C4,    ABISELECT(1712,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19646C7,    ABISELECT(1712,1288), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19646C4,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19646C6,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(2128,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C4,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19646C5,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(848,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19646C13[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY vtc_S19646C13[] = {
  ABISELECT(2128,1616),
  ABISELECT(1712,1288),
  ABISELECT(1136,864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-864),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  0,
  0,
  ABISELECT(-1712,-1288),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern VTBL_ENTRY _ZTV9S19646C13[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C5__9S19646C13[] = {
  ABISELECT(1584,1188),
  ABISELECT(2000,1516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__8S19646C5__9S19646C13[] = {
  0,
  0,
  ABISELECT(-1584,-1188),
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
static  VTT_ENTRY vtt_S19646C13[] = {
  {&(_ZTV9S19646C13[5]),  5,34},
  {&(_tg__ZTV8S19646C5__9S19646C13[4]),  4,8},
  {&(_tg__ZTV8S19646C7__8S19646C5__9S19646C13[4]),  4,6},
  {&(_ZTV9S19646C13[24]),  24,34},
  {&(_ZTV9S19646C13[32]),  32,34},
  {&(_ZTV9S19646C13[11]),  11,34},
};
extern VTBL_ENTRY _ZTI9S19646C13[];
extern  VTBL_ENTRY _ZTV9S19646C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C13[];
Class_Descriptor cd_S19646C13 = {  "S19646C13", // class name
  bases_S19646C13, 11,
  &(vtc_S19646C13[0]), // expected_vtbl_contents
  &(vtt_S19646C13[0]), // expected_vtt_contents
  ABISELECT(2416,1844), // object size
  NSPAIRA(_ZTI9S19646C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19646C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19646C13),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19646C11  : S19646C12 , S19646C13 , S19922C12 , S19922C8 , virtual S19646C4 {
  void *s19646c11f0;
  long double s19646c11f1;
  int s19646c11f2;
  int s19646c11f3;
  char s19646c11f4[7];
  ~S19646C11(); // tgen
  S19646C11(); // tgen
};
//SIG(-1 S19646C11) C1{ BC2{ BC3{ v1 FL[8] Fc[4] FL:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC7{ v9 FL[8] Fc[4] FL:7 Fi FD FL} FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC8{ BC9{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl Fl} FC10{ v10 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC12{ BC7 v11 FC7 FC7 FU5} Fc:8 Fl FD FC13{ BC7 v12 v13 v14 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC14{ BC3 VBC9 VBC4 BC8 BC6 v8 Fi} BC11 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S19646C11()
{
  extern Class_Descriptor cd_S19646C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1478)];
    init_test(&cd_S19646C11, buf);
    S19646C11 *dp, &lv = *(dp=new (buf) S19646C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5908), "sizeof(S19646C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C11)");
    /*is_ambiguous_... S19646C12::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C12*), 0, "S19646C11");
    check_base_class_offset(lv, (S19646C4*)(S19646C7*)(S19646C12*), ABISELECT(128,100), "S19646C11");
    check_base_class_offset(lv, (S19646C7*)(S19646C12*), ABISELECT(128,100), "S19646C11");
    check_base_class_offset(lv, (S19922C8*)(S19646C12*), ABISELECT(544,428), "S19646C11");
    check_base_class_offset(lv, (S19646C12*), 0, "S19646C11");
    /*is_ambiguous_... S19646C13::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C13*), ABISELECT(3840,2852), "S19646C11");
    /*is_ambiguous_... S19646C11::S19646C6 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C6*), ABISELECT(6480,4828), "S19646C11");
    /*is_ambiguous_... S19646C13::S19646C6 */ AMB_check_base_class_offset(lv, (S19646C6*)(S19646C13*), ABISELECT(6480,4828), "S19646C11");
    /*is_ambiguous_... S19646C11::S19646C7 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C7*), ABISELECT(7056,5252), "S19646C11");
    check_base_class_offset(lv, (S19646C7*)(S19646C13*), ABISELECT(7056,5252), "S19646C11");
    check_base_class_offset(lv, (S19646C7*)(S19646C5*)(S19646C13*), ABISELECT(7056,5252), "S19646C11");
    check_base_class_offset(lv, (S19646C4*)(S19646C6*)(S19646C5*)(S19646C13*), ABISELECT(3968,2952), "S19646C11");
    check_base_class_offset(lv, (S19646C6*)(S19646C5*)(S19646C13*), ABISELECT(3968,2952), "S19646C11");
    check_base_class_offset(lv, (S19922C8*)(S19646C5*)(S19646C13*), ABISELECT(7472,5580), "S19646C11");
    /*is_ambiguous_... S19646C5::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C5*)(S19646C13*), ABISELECT(4544,3376), "S19646C11");
    check_base_class_offset(lv, (S19646C5*)(S19646C13*), ABISELECT(3968,2952), "S19646C11");
    /*is_ambiguous_... S19646C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19646C13*), ABISELECT(4688,3484), "S19646C11");
    check_base_class_offset(lv, (S19646C13*), ABISELECT(3840,2852), "S19646C11");
    check_base_class_offset(lv, (S19922C12*), ABISELECT(4976,3716), "S19646C11");
    /*is_ambiguous_... S19646C11::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(6144,4568), "S19646C11");
    /*is_ambiguous_... S19646C11::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*), ABISELECT(7760,5808), "S19646C11");
    check_field_offset(lv, s19646c11f0, ABISELECT(6432,4796), "S19646C11.s19646c11f0");
    check_field_offset(lv, s19646c11f1, ABISELECT(6448,4800), "S19646C11.s19646c11f1");
    check_field_offset(lv, s19646c11f2, ABISELECT(6464,4812), "S19646C11.s19646c11f2");
    check_field_offset(lv, s19646c11f3, ABISELECT(6468,4816), "S19646C11.s19646c11f3");
    check_field_offset(lv, s19646c11f4, ABISELECT(6472,4820), "S19646C11.s19646c11f4");
    test_class_info(&lv, &cd_S19646C11);
    dp->~S19646C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C11(Test_S19646C11, "S19646C11", ABISELECT(7888,5908));

#else // __cplusplus

extern void _ZN9S19646C11C1Ev();
extern void _ZN9S19646C11D1Ev();
Name_Map name_map_S19646C11[] = {
  NSPAIR(_ZN9S19646C11C1Ev),
  NSPAIR(_ZN9S19646C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C12;
extern VTBL_ENTRY _ZTI9S19646C12[];
extern  VTBL_ENTRY _ZTV9S19646C12[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C5;
extern VTBL_ENTRY _ZTI8S19646C5[];
extern  VTBL_ENTRY _ZTV8S19646C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19646C5[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C13;
extern VTBL_ENTRY _ZTI9S19646C13[];
extern  VTBL_ENTRY _ZTV9S19646C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
static Base_Class bases_S19646C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19646C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19646C4,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19646C7,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19646C4,    ABISELECT(3840,2852), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19646C4,    ABISELECT(6480,4828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C6,    ABISELECT(6480,4828), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19646C4,    ABISELECT(7056,5252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C7,    ABISELECT(7056,5252), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19646C4,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19646C6,    ABISELECT(3968,2952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7472,5580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C4,    ABISELECT(4544,3376), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19646C5,    ABISELECT(3968,2952), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(4688,3484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C13,    ABISELECT(3840,2852), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C12,    ABISELECT(4976,3716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C8,    ABISELECT(6144,4568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19646C4,    ABISELECT(7760,5808), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19646C11[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C122v7Ev();
extern void _ZN9S19646C122v8Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
extern void _ZN8S19646C42v1Ev();
static  VTBL_ENTRY vtc_S19646C11[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v8Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  ABISELECT(-4544,-3376),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
};
extern VTBL_ENTRY _ZTV9S19646C11[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C13__9S19646C11[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C59S19646C13__9S19646C11[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__8S19646C59S19646C13__9S19646C11[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C6__9S19646C13__9S19646C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__9S19646C13__9S19646C11[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C5__9S19646C13__9S19646C11[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
static  VTT_ENTRY vtt_S19646C11[] = {
  {&(_ZTV9S19646C11[6]),  6,51},
  {&(_tg__ZTV9S19646C13__9S19646C11[5]),  5,7},
  {&(_tg__ZTV8S19646C59S19646C13__9S19646C11[4]),  4,8},
  {&(_tg__ZTV8S19646C7__8S19646C59S19646C13__9S19646C11[4]),  4,6},
  {&(_tg__ZTV8S19646C6__9S19646C13__9S19646C11[6]),  6,10},
  {&(_tg__ZTV8S19646C7__9S19646C13__9S19646C11[4]),  4,6},
  {&(_tg__ZTV8S19646C5__9S19646C13__9S19646C11[4]),  4,8},
  {&(_ZTV9S19646C11[18]),  18,51},
  {&(_ZTV9S19646C11[37]),  37,51},
  {&(_ZTV9S19646C11[45]),  45,51},
  {&(_ZTV9S19646C11[24]),  24,51},
  {&(_ZTV9S19646C11[50]),  50,51},
};
extern VTBL_ENTRY _ZTI9S19646C11[];
extern  VTBL_ENTRY _ZTV9S19646C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C11[];
Class_Descriptor cd_S19646C11 = {  "S19646C11", // class name
  bases_S19646C11, 20,
  &(vtc_S19646C11[0]), // expected_vtbl_contents
  &(vtt_S19646C11[0]), // expected_vtt_contents
  ABISELECT(7888,5908), // object size
  NSPAIRA(_ZTI9S19646C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19646C11),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19646C11),12, //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  S19646C10  : virtual S19646C11 , virtual S19922C12 {
  ::S19646C5 s19646c10f0;
  int s19646c10f1;
  void *s19646c10f2;
  int s19646c10f3:32;
  int s19646c10f4;
  ::S19922C14 s19646c10f5;
  char  :0;
  void *s19646c10f7;
  long double s19646c10f8;
  virtual  ~S19646C10(); // _ZN9S19646C10D2Ev
  virtual void  v10(); // _ZN9S19646C103v10Ev
  S19646C10(); // tgen
};
//SIG(-1 S19646C10) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] FL:7 Fi FD FL} BC5{ BC4 v3 FC4 FC4 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC7{ m Fc FU6 FC8{ v10 FL[8] Fc[4] FL:7 Fi FD FL} FL FU6[3] Fc} v4 v5 FU6 Fc Fc FC9{ BC10{ BC4 v6 v7 v8 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC7 BC4 VBC5 Fl Fl} FC11{ v17 FD Fp FD[8] Fp[9] FC12{ m FD Fp[10] FD Fi:0 Fi FD FC13{ BC8 v16 FC8 FC8 FU6} Fc:8 Fl FD FC14{ BC8 v13 v14 v15 FC8 Fi FC8 Fi Fc[6] Fc:4 Fp FC8 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC15{ BC4 VBC10 VBC5 BC9 BC7 v9 Fi} BC12 BC7 VBC4 Fp FD Fi Fi Fc[7]} VBC12 vd v1 FC9 Fi Fp Fi:32 Fi FC16{ VBC7 VBC17{ BC14 VBC7 BC8 VBC13 Fl Fl} vd v11 v12 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD}


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

static void Test_S19646C10()
{
  extern Class_Descriptor cd_S19646C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,2263)];
    init_test(&cd_S19646C10, buf);
    S19646C10 *dp, &lv = *(dp=new (buf) S19646C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,9048), "sizeof(S19646C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C10)");
    /*is_ambiguous_... S19646C12::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C12*)(S19646C11*), ABISELECT(3024,2288), "S19646C10");
    check_base_class_offset(lv, (S19646C4*)(S19646C7*)(S19646C12*)(S19646C11*), ABISELECT(3152,2388), "S19646C10");
    check_base_class_offset(lv, (S19646C7*)(S19646C12*)(S19646C11*), ABISELECT(3152,2388), "S19646C10");
    check_base_class_offset(lv, (S19922C8*)(S19646C12*)(S19646C11*), ABISELECT(3568,2716), "S19646C10");
    check_base_class_offset(lv, (S19646C12*)(S19646C11*), ABISELECT(3024,2288), "S19646C10");
    /*is_ambiguous_... S19646C13::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C13*)(S19646C11*), ABISELECT(6864,5140), "S19646C10");
    /*is_ambiguous_... S19646C10::S19646C6 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C6*), ABISELECT(9504,7116), "S19646C10");
    /*is_ambiguous_... S19646C13::S19646C6 */ AMB_check_base_class_offset(lv, (S19646C6*)(S19646C13*)(S19646C11*), ABISELECT(9504,7116), "S19646C10");
    /*is_ambiguous_... S19646C10::S19646C7 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C7*), ABISELECT(10080,7540), "S19646C10");
    check_base_class_offset(lv, (S19646C7*)(S19646C13*)(S19646C11*), ABISELECT(10080,7540), "S19646C10");
    check_base_class_offset(lv, (S19646C7*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(10080,7540), "S19646C10");
    check_base_class_offset(lv, (S19646C4*)(S19646C6*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(6992,5240), "S19646C10");
    check_base_class_offset(lv, (S19646C6*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(6992,5240), "S19646C10");
    check_base_class_offset(lv, (S19922C8*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(10496,7868), "S19646C10");
    /*is_ambiguous_... S19646C5::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(7568,5664), "S19646C10");
    check_base_class_offset(lv, (S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(6992,5240), "S19646C10");
    /*is_ambiguous_... S19646C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19646C13*)(S19646C11*), ABISELECT(7712,5772), "S19646C10");
    check_base_class_offset(lv, (S19646C13*)(S19646C11*), ABISELECT(6864,5140), "S19646C10");
    check_base_class_offset(lv, (S19922C12*)(S19646C11*), ABISELECT(8000,6004), "S19646C10");
    /*is_ambiguous_... S19646C11::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19646C11*), ABISELECT(9168,6856), "S19646C10");
    /*is_ambiguous_... S19646C11::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C11*), ABISELECT(10784,8096), "S19646C10");
    check_base_class_offset(lv, (S19646C11*), ABISELECT(3024,2288), "S19646C10");
    /*is_ambiguous_... S19646C10::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*), ABISELECT(10912,8196), "S19646C10");
    check_field_offset(lv, s19646c10f0, ABISELECT(16,4), "S19646C10.s19646c10f0");
    check_field_offset(lv, s19646c10f1, ABISELECT(1440,1092), "S19646C10.s19646c10f1");
    check_field_offset(lv, s19646c10f2, ABISELECT(1448,1096), "S19646C10.s19646c10f2");
    set_bf_and_test(lv, s19646c10f3, ABISELECT(1456,1100), 0, 32, 1, "S19646C10");
    set_bf_and_test(lv, s19646c10f3, ABISELECT(1456,1100), 0, 32, hide_sll(1LL<<31), "S19646C10");
    check_field_offset(lv, s19646c10f4, ABISELECT(1460,1104), "S19646C10.s19646c10f4");
    check_field_offset(lv, s19646c10f5, ABISELECT(1472,1108), "S19646C10.s19646c10f5");
    check_field_offset(lv, s19646c10f7, ABISELECT(2992,2272), "S19646C10.s19646c10f7");
    check_field_offset(lv, s19646c10f8, ABISELECT(3008,2276), "S19646C10.s19646c10f8");
    test_class_info(&lv, &cd_S19646C10);
    dp->~S19646C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C10(Test_S19646C10, "S19646C10", ABISELECT(12080,9048));

#else // __cplusplus

extern void _ZN9S19646C10C1Ev();
extern void _ZN9S19646C10D2Ev();
Name_Map name_map_S19646C10[] = {
  NSPAIR(_ZN9S19646C10C1Ev),
  NSPAIR(_ZN9S19646C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C12;
extern VTBL_ENTRY _ZTI9S19646C12[];
extern  VTBL_ENTRY _ZTV9S19646C12[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C5;
extern VTBL_ENTRY _ZTI8S19646C5[];
extern  VTBL_ENTRY _ZTV8S19646C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19646C5[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C13;
extern VTBL_ENTRY _ZTI9S19646C13[];
extern  VTBL_ENTRY _ZTV9S19646C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C11;
extern VTBL_ENTRY _ZTI9S19646C11[];
extern  VTBL_ENTRY _ZTV9S19646C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C11[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
static Base_Class bases_S19646C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19646C4,    ABISELECT(3024,2288), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19646C4,    ABISELECT(3152,2388), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19646C7,    ABISELECT(3152,2388), //bcp->offset
    28, //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(3568,2716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19646C12,    ABISELECT(3024,2288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19646C4,    ABISELECT(6864,5140), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19646C4,    ABISELECT(9504,7116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C6,    ABISELECT(9504,7116), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19646C4,    ABISELECT(10080,7540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C7,    ABISELECT(10080,7540), //bcp->offset
    60, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19646C4,    ABISELECT(6992,5240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19646C6,    ABISELECT(6992,5240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(10496,7868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C4,    ABISELECT(7568,5664), //bcp->offset
    47, //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19646C5,    ABISELECT(6992,5240), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7712,5772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C13,    ABISELECT(6864,5140), //bcp->offset
    32, //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(8000,6004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(9168,6856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C4,    ABISELECT(10784,8096), //bcp->offset
    66, //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_S19646C11,    ABISELECT(3024,2288), //bcp->offset
    11, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19922C12,    ABISELECT(10912,8196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S19646C10[];
extern void _ZN9S19646C10D1Ev();
extern void _ZN9S19646C10D0Ev();
extern void _ZN9S19646C103v10Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C122v7Ev();
extern void _ZN9S19646C122v8Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
extern void _ZN8S19646C42v1Ev();
static  VTBL_ENTRY vtc_S19646C10[] = {
  ABISELECT(10912,8196),
  ABISELECT(10784,8096),
  ABISELECT(10496,7868),
  ABISELECT(10080,7540),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN9S19646C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19646C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19646C103v10Ev,
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  ABISELECT(-3024,-2288),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v8Ev,
  ABISELECT(-3152,-2388),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-6864,-5140),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-6992,-5240),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  ABISELECT(-7568,-5664),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7116),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  0,
  0,
  ABISELECT(-10080,-7540),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
  0,
  ABISELECT(-10784,-8096),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
};
extern VTBL_ENTRY _ZTV9S19646C10[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C122v7Ev();
extern void _ZN9S19646C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C11__9S19646C10[] = {
  ABISELECT(7760,5808),
  ABISELECT(7472,5580),
  ABISELECT(7056,5252),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v8Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C139S19646C11__9S19646C10[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C59S19646C139S19646C11__9S19646C10[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__8S19646C59S19646C139S19646C11__9S19646C10[] = {
  0,
  0,
  ABISELECT(-3088,-2300),
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C6__9S19646C139S19646C11__9S19646C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__9S19646C139S19646C11__9S19646C10[] = {
  0,
  0,
  ABISELECT(-3216,-2400),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C5__9S19646C139S19646C11__9S19646C10[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C13__9S19646C11__9S19646C10[] = {
  ABISELECT(3632,2728),
  ABISELECT(3216,2400),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C6__9S19646C11__9S19646C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__A1__9S19646C11__9S19646C10[] = {
  0,
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C59S19646C13__9S19646C11__9S19646C10[] = {
  ABISELECT(3088,2300),
  ABISELECT(3504,2628),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C4__A7__9S19646C11__9S19646C10[] = {
  0,
  ABISELECT(-7760,-5808),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
};
static  VTT_ENTRY vtt_S19646C10[] = {
  {&(_ZTV9S19646C10[8]),  8,70},
  {&(_ZTV9S19646C10[25]),  25,70},
  {&(_ZTV9S19646C10[30]),  30,70},
  {&(_ZTV9S19646C10[37]),  37,70},
  {&(_ZTV9S19646C10[56]),  56,70},
  {&(_ZTV9S19646C10[64]),  64,70},
  {&(_ZTV9S19646C10[43]),  43,70},
  {&(_ZTV9S19646C10[49]),  49,70},
  {&(_ZTV9S19646C10[69]),  69,70},
  {&(_tg__ZTV9S19646C11__9S19646C10[6]),  6,9},
  {&(_tg__ZTV9S19646C139S19646C11__9S19646C10[5]),  5,7},
  {&(_tg__ZTV8S19646C59S19646C139S19646C11__9S19646C10[4]),  4,8},
  {&(_tg__ZTV8S19646C7__8S19646C59S19646C139S19646C11__9S19646C10[4]),  4,6},
  {&(_tg__ZTV8S19646C6__9S19646C139S19646C11__9S19646C10[6]),  6,10},
  {&(_tg__ZTV8S19646C7__9S19646C139S19646C11__9S19646C10[4]),  4,6},
  {&(_tg__ZTV8S19646C5__9S19646C139S19646C11__9S19646C10[4]),  4,8},
  {&(_tg__ZTV9S19646C13__9S19646C11__9S19646C10[5]),  5,7},
  {&(_tg__ZTV8S19646C6__9S19646C11__9S19646C10[6]),  6,10},
  {&(_tg__ZTV8S19646C7__A1__9S19646C11__9S19646C10[4]),  4,6},
  {&(_tg__ZTV8S19646C59S19646C13__9S19646C11__9S19646C10[4]),  4,8},
  {&(_tg__ZTV8S19646C4__A7__9S19646C11__9S19646C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19646C10[];
extern  VTBL_ENTRY _ZTV9S19646C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C10[];
Class_Descriptor cd_S19646C10 = {  "S19646C10", // class name
  bases_S19646C10, 22,
  &(vtc_S19646C10[0]), // expected_vtbl_contents
  &(vtt_S19646C10[0]), // expected_vtt_contents
  ABISELECT(12080,9048), // object size
  NSPAIRA(_ZTI9S19646C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19646C10),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19646C10),21, //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  S19646C1  : virtual S19922C8 , S19646C5 , virtual S19922C12 , virtual S19646C9 , virtual S19646C10 {
  void *s19646c1f0;
  int s19646c1f1;
  virtual  ~S19646C1(); // _ZN8S19646C1D2Ev
  S19646C1(); // tgen
};
//SIG(1 S19646C1) C1{ VBC2{ m Fc FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC4{ v11 FL[8] Fc[4] FL:7 Fi FD FL} FL FU3[3] Fc} BC5{ BC6{ BC7{ v1 FL[8] Fc[4] FL:7 Fi FD FL} v2 v3 v4 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi} VBC2 BC7 VBC8{ BC7 v5 FC7 FC7 FU3} Fl Fl} VBC9{ m FD Fp[10] FD Fi:0 Fi FD FC10{ BC4 v12 FC4 FC4 FU3} Fc:8 Fl FD FC11{ BC4 v13 v14 v15 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi}} VBC12{ v6 FD Fp FD[8] Fp[9] FC9 Fi Fc FD[4] Fc Fi} VBC13{ VBC14{ BC15{ BC7 BC8 BC2 v7 v8 FU3 Fc Fc FC5 FC12 Fi Fl} BC16{ BC7 VBC6 VBC8 BC5 BC2 v9 Fi} BC9 BC2 VBC7 Fp FD Fi Fi Fc[7]} VBC9 vd v10 FC5 Fi Fp Fi:32 Fi FC17{ VBC2 VBC18{ BC11 VBC2 BC4 VBC10 Fl Fl} vd v16 v17 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD} vd Fp Fi}


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

static void Test_S19646C1()
{
  extern Class_Descriptor cd_S19646C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(897,2665)];
    init_test(&cd_S19646C1, buf);
    S19646C1 *dp, &lv = *(dp=new (buf) S19646C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14336,10656), "sizeof(S19646C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19646C1)");
    /*is_ambiguous_... S19646C1::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*), ABISELECT(736,540), "S19646C1");
    /*is_ambiguous_... S19646C1::S19646C5 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19646C5*), ABISELECT(736,540), "S19646C1");
    check_base_class_offset(lv, (S19922C8*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(736,540), "S19646C1");
    /*is_ambiguous_... S19646C1::S19646C5 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C6*)(S19646C5*), 0, "S19646C1");
    /*is_ambiguous_... S19646C1::S19646C5 */ AMB_check_base_class_offset(lv, (S19646C6*)(S19646C5*), 0, "S19646C1");
    /*is_ambiguous_... S19646C1::S19646C5 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C5*), ABISELECT(576,424), "S19646C1");
    /*is_ambiguous_... S19646C1::S19646C7 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C7*), ABISELECT(1024,768), "S19646C1");
    /*is_ambiguous_... S19646C1::S19646C5 */ AMB_check_base_class_offset(lv, (S19646C7*)(S19646C5*), ABISELECT(1024,768), "S19646C1");
    check_base_class_offset(lv, (S19646C7*)(S19646C13*)(S19646C11*), ABISELECT(1024,768), "S19646C1");
    check_base_class_offset(lv, (S19646C7*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(1024,768), "S19646C1");
    /*is_ambiguous_... S19646C1::S19646C5 */ AMB_check_base_class_offset(lv, (S19646C5*), 0, "S19646C1");
    /*is_ambiguous_... S19646C1::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*), ABISELECT(1440,1096), "S19646C1");
    /*is_ambiguous_... S19646C10::S19922C12 */ AMB_check_base_class_offset(lv, (S19922C12*)(S19646C10*), ABISELECT(1440,1096), "S19646C1");
    check_base_class_offset(lv, (S19646C9*), ABISELECT(2608,1948), "S19646C1");
    /*is_ambiguous_... S19646C12::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C12*)(S19646C11*), ABISELECT(7152,5304), "S19646C1");
    check_base_class_offset(lv, (S19646C4*)(S19646C7*)(S19646C12*)(S19646C11*), ABISELECT(7280,5404), "S19646C1");
    check_base_class_offset(lv, (S19646C7*)(S19646C12*)(S19646C11*), ABISELECT(7280,5404), "S19646C1");
    check_base_class_offset(lv, (S19922C8*)(S19646C12*)(S19646C11*), ABISELECT(7696,5732), "S19646C1");
    check_base_class_offset(lv, (S19646C12*)(S19646C11*), ABISELECT(7152,5304), "S19646C1");
    /*is_ambiguous_... S19646C13::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C13*)(S19646C11*), ABISELECT(10992,8156), "S19646C1");
    /*is_ambiguous_... S19646C1::S19646C6 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C6*), ABISELECT(13632,10132), "S19646C1");
    /*is_ambiguous_... S19646C13::S19646C6 */ AMB_check_base_class_offset(lv, (S19646C6*)(S19646C13*)(S19646C11*), ABISELECT(13632,10132), "S19646C1");
    check_base_class_offset(lv, (S19646C4*)(S19646C6*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(11120,8256), "S19646C1");
    check_base_class_offset(lv, (S19646C6*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(11120,8256), "S19646C1");
    /*is_ambiguous_... S19646C5::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(11696,8680), "S19646C1");
    check_base_class_offset(lv, (S19646C5*)(S19646C13*)(S19646C11*), ABISELECT(11120,8256), "S19646C1");
    /*is_ambiguous_... S19646C13::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19646C13*)(S19646C11*), ABISELECT(11840,8788), "S19646C1");
    check_base_class_offset(lv, (S19646C13*)(S19646C11*), ABISELECT(10992,8156), "S19646C1");
    check_base_class_offset(lv, (S19922C12*)(S19646C11*), ABISELECT(12128,9020), "S19646C1");
    /*is_ambiguous_... S19646C11::S19922C8 */ AMB_check_base_class_offset(lv, (S19922C8*)(S19646C11*), ABISELECT(13296,9872), "S19646C1");
    /*is_ambiguous_... S19646C11::S19646C4 */ AMB_check_base_class_offset(lv, (S19646C4*)(S19646C11*), ABISELECT(14208,10556), "S19646C1");
    check_base_class_offset(lv, (S19646C11*)(S19646C10*), ABISELECT(7152,5304), "S19646C1");
    check_base_class_offset(lv, (S19646C10*), ABISELECT(4128,3016), "S19646C1");
    check_field_offset(lv, s19646c1f0, ABISELECT(712,532), "S19646C1.s19646c1f0");
    check_field_offset(lv, s19646c1f1, ABISELECT(720,536), "S19646C1.s19646c1f1");
    test_class_info(&lv, &cd_S19646C1);
    dp->~S19646C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19646C1(Test_S19646C1, "S19646C1", ABISELECT(14336,10656));

#else // __cplusplus

extern void _ZN8S19646C1C1Ev();
extern void _ZN8S19646C1D2Ev();
Name_Map name_map_S19646C1[] = {
  NSPAIR(_ZN8S19646C1C1Ev),
  NSPAIR(_ZN8S19646C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
extern Class_Descriptor cd_S19646C5;
extern VTBL_ENTRY _ZTI8S19646C5[];
extern  VTBL_ENTRY _ZTV8S19646C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19646C5[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19646C9;
extern VTBL_ENTRY _ZTI8S19646C9[];
extern  VTBL_ENTRY _ZTV8S19646C9[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C7;
extern VTBL_ENTRY _ZTI8S19646C7[];
extern  VTBL_ENTRY _ZTV8S19646C7[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C12;
extern VTBL_ENTRY _ZTI9S19646C12[];
extern  VTBL_ENTRY _ZTV9S19646C12[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C6;
extern VTBL_ENTRY _ZTI8S19646C6[];
extern  VTBL_ENTRY _ZTV8S19646C6[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C5;
extern VTBL_ENTRY _ZTI8S19646C5[];
extern  VTBL_ENTRY _ZTV8S19646C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19646C5[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C13;
extern VTBL_ENTRY _ZTI9S19646C13[];
extern  VTBL_ENTRY _ZTV9S19646C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C13[];
extern Class_Descriptor cd_S19922C12;
extern VTBL_ENTRY _ZTI9S19922C12[];
extern Class_Descriptor cd_S19922C8;
extern VTBL_ENTRY _ZTI8S19922C8[];
extern Class_Descriptor cd_S19646C4;
extern VTBL_ENTRY _ZTI8S19646C4[];
extern  VTBL_ENTRY _ZTV8S19646C4[];
extern Class_Descriptor cd_S19646C11;
extern VTBL_ENTRY _ZTI9S19646C11[];
extern  VTBL_ENTRY _ZTV9S19646C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C11[];
extern Class_Descriptor cd_S19646C10;
extern VTBL_ENTRY _ZTI9S19646C10[];
extern  VTBL_ENTRY _ZTV9S19646C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19646C10[];
static Base_Class bases_S19646C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19922C8,    ABISELECT(736,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19646C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19646C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19646C4,    ABISELECT(576,424), //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
    21, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19646C4,    ABISELECT(1024,768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C7,    ABISELECT(1024,768), //bcp->offset
    19, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19646C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19922C12,    ABISELECT(1440,1096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19646C9,    ABISELECT(2608,1948), //bcp->offset
    25, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19646C4,    ABISELECT(7152,5304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19646C4,    ABISELECT(7280,5404), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19646C7,    ABISELECT(7280,5404), //bcp->offset
    59, //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
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(7696,5732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C12,    ABISELECT(7152,5304), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S19646C4,    ABISELECT(10992,8156), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S19646C4,    ABISELECT(13632,10132), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19646C6,    ABISELECT(13632,10132), //bcp->offset
    81, //bcp->virtual_function_table_offset
    6, //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
    22, //immediately_derived
  0, 1},
  {&cd_S19646C4,    ABISELECT(11120,8256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S19646C6,    ABISELECT(11120,8256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19646C4,    ABISELECT(11696,8680), //bcp->offset
    78, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19646C5,    ABISELECT(11120,8256), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19922C8,    ABISELECT(11840,8788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C13,    ABISELECT(10992,8156), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19922C12,    ABISELECT(12128,9020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19922C8,    ABISELECT(13296,9872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19646C4,    ABISELECT(14208,10556), //bcp->offset
    91, //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
    6, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S19646C11,    ABISELECT(7152,5304), //bcp->offset
    42, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S19646C10,    ABISELECT(4128,3016), //bcp->offset
    29, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19646C1[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C1D1Ev();
extern void _ZN8S19646C1D0Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
extern void _ZN8S19646C92v6Ev();
extern void ABISELECT(_ZTv0_n72_N8S19646C1D1Ev,_ZTv0_n36_N8S19646C1D1Ev)();
extern void ABISELECT(_ZThn4128_N8S19646C1D1Ev,_ZThn3016_N8S19646C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19646C1D0Ev,_ZTv0_n36_N8S19646C1D0Ev)();
extern void ABISELECT(_ZThn4128_N8S19646C1D0Ev,_ZThn3016_N8S19646C1D0Ev)() __attribute__((weak));
extern void _ZN9S19646C103v10Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C122v7Ev();
extern void _ZN9S19646C122v8Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
extern void _ZN8S19646C42v1Ev();
static  VTBL_ENTRY vtc_S19646C1[] = {
  ABISELECT(14208,10556),
  ABISELECT(13632,10132),
  ABISELECT(7152,5304),
  ABISELECT(4128,3016),
  ABISELECT(2608,1948),
  ABISELECT(1440,1096),
  ABISELECT(1024,768),
  ABISELECT(736,540),
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19646C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19646C1D0Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  0,
  0,
  ABISELECT(-1024,-768),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
  0,
  ABISELECT(-2608,-1948),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C92v6Ev,
  0,
  ABISELECT(-4128,-3016),
  ABISELECT(-2688,-1920),
  ABISELECT(10080,7540),
  ABISELECT(-3392,-2476),
  ABISELECT(-3104,-2248),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  ABISELECT(-4128,-3016),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19646C1D1Ev,_ZTv0_n36_N8S19646C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19646C1D0Ev,_ZTv0_n36_N8S19646C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19646C103v10Ev,
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7056,5252),
  ABISELECT(-6416,-4764),
  ABISELECT(-6128,-4536),
  ABISELECT(6480,4828),
  ABISELECT(-7152,-5304),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v8Ev,
  ABISELECT(-7280,-5404),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
  ABISELECT(-10256,-7616),
  ABISELECT(-9968,-7388),
  ABISELECT(2640,1976),
  ABISELECT(-10992,-8156),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
  ABISELECT(-10096,-7488),
  ABISELECT(-10384,-7716),
  ABISELECT(-11120,-8256),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  ABISELECT(-11696,-8680),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-13632,-10132),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
  0,
  ABISELECT(-14208,-10556),
  (VTBL_ENTRY)&(_ZTI8S19646C1[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S19646C1[];
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C5__8S19646C1[] = {
  ABISELECT(1024,768),
  ABISELECT(736,540),
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__8S19646C5__8S19646C1[] = {
  0,
  0,
  ABISELECT(-1024,-768),
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN9S19646C10D1Ev();
extern void _ZN9S19646C10D0Ev();
extern void _ZN9S19646C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C10__8S19646C1[] = {
  ABISELECT(-2688,-1920),
  ABISELECT(10080,7540),
  ABISELECT(-3392,-2476),
  ABISELECT(-3104,-2248),
  ABISELECT(9504,7116),
  ABISELECT(3024,2288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN9S19646C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19646C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19646C103v10Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C122v7Ev();
extern void _ZN9S19646C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C11__9S19646C10__8S19646C1[] = {
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3968,2952),
  ABISELECT(3840,2852),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7056,5252),
  ABISELECT(-6416,-4764),
  ABISELECT(-6128,-4536),
  ABISELECT(6480,4828),
  ABISELECT(-3024,-2288),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v8Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C79S19646C129S19646C11__9S19646C10__8S19646C1[] = {
  ABISELECT(-3152,-2388),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C139S19646C11__9S19646C10__8S19646C1[] = {
  ABISELECT(-10256,-7616),
  ABISELECT(-9968,-7388),
  ABISELECT(2640,1976),
  ABISELECT(-6864,-5140),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C6__9S19646C10__8S19646C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7116),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__A1__9S19646C10__8S19646C1[] = {
  0,
  0,
  ABISELECT(3104,2248),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C59S19646C139S19646C11__9S19646C10__8S19646C1[] = {
  ABISELECT(-10096,-7488),
  ABISELECT(-10384,-7716),
  ABISELECT(-6992,-5240),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C48S19646C59S19646C139S19646C11__A6__9S19646C10__8S19646C1[] = {
  ABISELECT(-7568,-5664),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
};
extern void _ZN8S19646C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C4__A7__9S19646C10__8S19646C1[] = {
  0,
  ABISELECT(-10080,-7540),
  (VTBL_ENTRY)&(_ZTI9S19646C10[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C122v7Ev();
extern void _ZN9S19646C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C11__8S19646C1[] = {
  ABISELECT(7056,5252),
  ABISELECT(-6416,-4764),
  ABISELECT(-6128,-4536),
  ABISELECT(6480,4828),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19646C122v8Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C139S19646C11__8S19646C1[] = {
  ABISELECT(-10256,-7616),
  ABISELECT(-9968,-7388),
  ABISELECT(2640,1976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C59S19646C139S19646C11__A1__8S19646C1[] = {
  ABISELECT(-10096,-7488),
  ABISELECT(-10384,-7716),
  0,
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__8S19646C59S19646C139S19646C11__A1__8S19646C1[] = {
  0,
  0,
  ABISELECT(10096,7488),
  (VTBL_ENTRY)&(_ZTI8S19646C5[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C6__9S19646C139S19646C11__8S19646C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1976),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__9S19646C139S19646C11__8S19646C1[] = {
  0,
  0,
  ABISELECT(9968,7388),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C5__9S19646C139S19646C11__8S19646C1[] = {
  ABISELECT(-10096,-7488),
  ABISELECT(-10384,-7716),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19646C13[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN9S19646C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19646C13__9S19646C11__8S19646C1[] = {
  ABISELECT(-10256,-7616),
  ABISELECT(-9968,-7388),
  ABISELECT(2640,1976),
  ABISELECT(-3840,-2852),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19646C132v9Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C6__9S19646C11__8S19646C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4828),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C7__A1__9S19646C11__8S19646C1[] = {
  0,
  0,
  ABISELECT(6128,4536),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C72v5Ev,
};
extern void _ZN8S19646C42v1Ev();
extern void _ZN8S19646C62v2Ev();
extern void _ZN8S19646C62v3Ev();
extern void _ZN8S19646C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C59S19646C13__9S19646C11__8S19646C1[] = {
  ABISELECT(-10096,-7488),
  ABISELECT(-10384,-7716),
  ABISELECT(-3968,-2952),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19646C62v4Ev,
};
extern void _ZN8S19646C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19646C4__A7__9S19646C11__8S19646C1[] = {
  0,
  ABISELECT(-7056,-5252),
  (VTBL_ENTRY)&(_ZTI9S19646C11[0]),
  (VTBL_ENTRY)&_ZN8S19646C42v1Ev,
};
static  VTT_ENTRY vtt_S19646C1[] = {
  {&(_ZTV8S19646C1[10]),  10,95},
  {&(_tg__ZTV8S19646C5__8S19646C1[4]),  4,8},
  {&(_tg__ZTV8S19646C7__8S19646C5__8S19646C1[4]),  4,6},
  {&(_ZTV8S19646C1[23]),  23,95},
  {&(_ZTV8S19646C1[28]),  28,95},
  {&(_ZTV8S19646C1[39]),  39,95},
  {&(_ZTV8S19646C1[56]),  56,95},
  {&(_ZTV8S19646C1[61]),  61,95},
  {&(_ZTV8S19646C1[68]),  68,95},
  {&(_ZTV8S19646C1[87]),  87,95},
  {&(_ZTV8S19646C1[74]),  74,95},
  {&(_ZTV8S19646C1[80]),  80,95},
  {&(_ZTV8S19646C1[94]),  94,95},
  {&(_tg__ZTV9S19646C10__8S19646C1[8]),  8,11},
  {&(_tg__ZTV9S19646C11__9S19646C10__8S19646C1[14]),  14,17},
  {&(_tg__ZTV8S19646C79S19646C129S19646C11__9S19646C10__8S19646C1[2]),  2,4},
  {&(_tg__ZTV9S19646C139S19646C11__9S19646C10__8S19646C1[5]),  5,7},
  {&(_tg__ZTV8S19646C6__9S19646C10__8S19646C1[6]),  6,10},
  {&(_tg__ZTV8S19646C7__A1__9S19646C10__8S19646C1[4]),  4,6},
  {&(_tg__ZTV8S19646C59S19646C139S19646C11__9S19646C10__8S19646C1[4]),  4,8},
  {&(_tg__ZTV8S19646C48S19646C59S19646C139S19646C11__A6__9S19646C10__8S19646C1[2]),  2,3},
  {&(_tg__ZTV8S19646C4__A7__9S19646C10__8S19646C1[3]),  3,4},
  {&(_tg__ZTV9S19646C11__8S19646C1[6]),  6,9},
  {&(_tg__ZTV9S19646C139S19646C11__8S19646C1[5]),  5,7},
  {&(_tg__ZTV8S19646C59S19646C139S19646C11__A1__8S19646C1[4]),  4,8},
  {&(_tg__ZTV8S19646C7__8S19646C59S19646C139S19646C11__A1__8S19646C1[4]),  4,6},
  {&(_tg__ZTV8S19646C6__9S19646C139S19646C11__8S19646C1[6]),  6,10},
  {&(_tg__ZTV8S19646C7__9S19646C139S19646C11__8S19646C1[4]),  4,6},
  {&(_tg__ZTV8S19646C5__9S19646C139S19646C11__8S19646C1[4]),  4,8},
  {&(_tg__ZTV9S19646C13__9S19646C11__8S19646C1[5]),  5,7},
  {&(_tg__ZTV8S19646C6__9S19646C11__8S19646C1[6]),  6,10},
  {&(_tg__ZTV8S19646C7__A1__9S19646C11__8S19646C1[4]),  4,6},
  {&(_tg__ZTV8S19646C59S19646C13__9S19646C11__8S19646C1[4]),  4,8},
  {&(_tg__ZTV8S19646C4__A7__9S19646C11__8S19646C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19646C1[];
extern  VTBL_ENTRY _ZTV8S19646C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19646C1[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19646C1D0Ev,_ZTv0_n36_N8S19646C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4128_N8S19646C1D0Ev,_ZThn3016_N8S19646C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19646C1D1Ev,_ZTv0_n36_N8S19646C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4128_N8S19646C1D1Ev,_ZThn3016_N8S19646C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19646C1 = {  "S19646C1", // class name
  bases_S19646C1, 28,
  &(vtc_S19646C1[0]), // expected_vtbl_contents
  &(vtt_S19646C1[0]), // expected_vtt_contents
  ABISELECT(14336,10656), // object size
  NSPAIRA(_ZTI8S19646C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19646C1),95, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19646C1),34, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19645C4  {
  __tsi64 s19645c4f0[8];
  char s19645c4f1[4];
  int s19645c4f2:7;
  int s19645c4f3;
  long double s19645c4f4;
  __tsi64 s19645c4f5;
  virtual void  v1(); // _ZN8S19645C42v1Ev
  ~S19645C4(); // tgen
  S19645C4(); // tgen
};
//SIG(-1 S19645C4) C1{ v1 FL[8] Fc[4] Fi:7 Fi FD FL}


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

static void Test_S19645C4()
{
  extern Class_Descriptor cd_S19645C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,26)];
    init_test(&cd_S19645C4, buf);
    S19645C4 *dp, &lv = *(dp=new (buf) S19645C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S19645C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C4)");
    check_field_offset(lv, s19645c4f0, ABISELECT(8,4), "S19645C4.s19645c4f0");
    check_field_offset(lv, s19645c4f1, ABISELECT(72,68), "S19645C4.s19645c4f1");
    set_bf_and_test(lv, s19645c4f2, ABISELECT(76,72), 0, 7, 1, "S19645C4");
    set_bf_and_test(lv, s19645c4f2, ABISELECT(76,72), 0, 7, hide_sll(1LL<<6), "S19645C4");
    check_field_offset(lv, s19645c4f3, ABISELECT(80,76), "S19645C4.s19645c4f3");
    check_field_offset(lv, s19645c4f4, ABISELECT(96,80), "S19645C4.s19645c4f4");
    check_field_offset(lv, s19645c4f5, ABISELECT(112,92), "S19645C4.s19645c4f5");
    test_class_info(&lv, &cd_S19645C4);
    dp->~S19645C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C4(Test_S19645C4, "S19645C4", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S19645C4C1Ev();
extern void _ZN8S19645C4D1Ev();
Name_Map name_map_S19645C4[] = {
  NSPAIR(_ZN8S19645C4C1Ev),
  NSPAIR(_ZN8S19645C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19645C4[];
extern void _ZN8S19645C42v1Ev();
static  VTBL_ENTRY vtc_S19645C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C4[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
};
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
Class_Descriptor cd_S19645C4 = {  "S19645C4", // class name
  0,0,//no base classes
  &(vtc_S19645C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S19645C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19645C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19645C6  : S19645C4 {
  ::S19645C4 s19645c6f0;
  int s19645c6f1;
  ::S19645C4 s19645c6f2;
  int s19645c6f3;
  char s19645c6f4[6];
  char s19645c6f5:4;
  void *s19645c6f6;
  ::S19645C4 s19645c6f7;
  int s19645c6f8;
  virtual void  v2(); // _ZN8S19645C62v2Ev
  virtual void  v3(); // _ZN8S19645C62v3Ev
  virtual void  v4(); // _ZN8S19645C62v4Ev
  ~S19645C6(); // tgen
  S19645C6(); // tgen
};
//SIG(-1 S19645C6) C1{ BC2{ v4 FL[8] Fc[4] Fi:7 Fi FD FL} v1 v2 v3 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi}


void  S19645C6 ::v2(){vfunc_called(this, "_ZN8S19645C62v2Ev");}
void  S19645C6 ::v3(){vfunc_called(this, "_ZN8S19645C62v3Ev");}
void  S19645C6 ::v4(){vfunc_called(this, "_ZN8S19645C62v4Ev");}
S19645C6 ::~S19645C6(){ note_dtor("S19645C6", this);} // tgen
S19645C6 ::S19645C6(){ note_ctor("S19645C6", this);} // tgen

static void Test_S19645C6()
{
  extern Class_Descriptor cd_S19645C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,107)];
    init_test(&cd_S19645C6, buf);
    S19645C6 *dp, &lv = *(dp=new (buf) S19645C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,424), "sizeof(S19645C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C6)");
    check_base_class_offset(lv, (S19645C4*), 0, "S19645C6");
    check_field_offset(lv, s19645c6f0, ABISELECT(128,100), "S19645C6.s19645c6f0");
    check_field_offset(lv, s19645c6f1, ABISELECT(256,200), "S19645C6.s19645c6f1");
    check_field_offset(lv, s19645c6f2, ABISELECT(272,204), "S19645C6.s19645c6f2");
    check_field_offset(lv, s19645c6f3, ABISELECT(400,304), "S19645C6.s19645c6f3");
    check_field_offset(lv, s19645c6f4, ABISELECT(404,308), "S19645C6.s19645c6f4");
    set_bf_and_test(lv, s19645c6f5, ABISELECT(410,314), 0, 4, 1, "S19645C6");
    set_bf_and_test(lv, s19645c6f5, ABISELECT(410,314), 0, 4, hide_sll(1LL<<3), "S19645C6");
    check_field_offset(lv, s19645c6f6, ABISELECT(416,316), "S19645C6.s19645c6f6");
    check_field_offset(lv, s19645c6f7, ABISELECT(432,320), "S19645C6.s19645c6f7");
    check_field_offset(lv, s19645c6f8, ABISELECT(560,420), "S19645C6.s19645c6f8");
    test_class_info(&lv, &cd_S19645C6);
    dp->~S19645C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C6(Test_S19645C6, "S19645C6", ABISELECT(576,424));

#else // __cplusplus

extern void _ZN8S19645C6C1Ev();
extern void _ZN8S19645C6D1Ev();
Name_Map name_map_S19645C6[] = {
  NSPAIR(_ZN8S19645C6C1Ev),
  NSPAIR(_ZN8S19645C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
static Base_Class bases_S19645C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19645C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19645C6[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY vtc_S19645C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C6[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
Class_Descriptor cd_S19645C6 = {  "S19645C6", // class name
  bases_S19645C6, 1,
  &(vtc_S19645C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,424), // object size
  NSPAIRA(_ZTI8S19645C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19645C6),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  S19645C7  : S19645C4 {
  ::S19645C4 s19645c7f0;
  ::S19645C4 s19645c7f1;
  ::S19921C7 s19645c7f2;
  virtual void  v5(); // _ZN8S19645C72v5Ev
  ~S19645C7(); // tgen
  S19645C7(); // tgen
};
//SIG(-1 S19645C7) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} v1 FC2 FC2 FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}}


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

static void Test_S19645C7()
{
  extern Class_Descriptor cd_S19645C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,83)];
    init_test(&cd_S19645C7, buf);
    S19645C7 *dp, &lv = *(dp=new (buf) S19645C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S19645C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C7)");
    check_base_class_offset(lv, (S19645C4*), 0, "S19645C7");
    check_field_offset(lv, s19645c7f0, ABISELECT(128,100), "S19645C7.s19645c7f0");
    check_field_offset(lv, s19645c7f1, ABISELECT(256,200), "S19645C7.s19645c7f1");
    check_field_offset(lv, s19645c7f2, ABISELECT(384,300), "S19645C7.s19645c7f2");
    test_class_info(&lv, &cd_S19645C7);
    dp->~S19645C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C7(Test_S19645C7, "S19645C7", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S19645C7C1Ev();
extern void _ZN8S19645C7D1Ev();
Name_Map name_map_S19645C7[] = {
  NSPAIR(_ZN8S19645C7C1Ev),
  NSPAIR(_ZN8S19645C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
static Base_Class bases_S19645C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19645C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19645C7[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY vtc_S19645C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C7[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
Class_Descriptor cd_S19645C7 = {  "S19645C7", // class name
  bases_S19645C7, 1,
  &(vtc_S19645C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S19645C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19645C7),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  S19645C5  : S19645C6 , virtual S19921C8 , S19645C4 , virtual S19645C7 {
  long s19645c5f0;
  __tsi64 s19645c5f1;
  ~S19645C5(); // tgen
  S19645C5(); // tgen
};
//SIG(-1 S19645C5) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} v2 v3 v4 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC4{ m Fc FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC6{ v6 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} BC3 VBC7{ BC3 v5 FC3 FC3 FU5} Fl FL}


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

static void Test_S19645C5()
{
  extern Class_Descriptor cd_S19645C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,274)];
    init_test(&cd_S19645C5, buf);
    S19645C5 *dp, &lv = *(dp=new (buf) S19645C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1092), "sizeof(S19645C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C5)");
    check_base_class_offset(lv, (S19645C4*)(S19645C6*), 0, "S19645C5");
    check_base_class_offset(lv, (S19645C6*), 0, "S19645C5");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(720,536), "S19645C5");
    /*is_ambiguous_... S19645C5::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*), ABISELECT(576,424), "S19645C5");
    check_base_class_offset(lv, (S19645C4*)(S19645C7*), ABISELECT(1008,764), "S19645C5");
    check_base_class_offset(lv, (S19645C7*), ABISELECT(1008,764), "S19645C5");
    check_field_offset(lv, s19645c5f0, ABISELECT(696,524), "S19645C5.s19645c5f0");
    check_field_offset(lv, s19645c5f1, ABISELECT(704,528), "S19645C5.s19645c5f1");
    test_class_info(&lv, &cd_S19645C5);
    dp->~S19645C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C5(Test_S19645C5, "S19645C5", ABISELECT(1424,1092));

#else // __cplusplus

extern void _ZN8S19645C5C1Ev();
extern void _ZN8S19645C5D1Ev();
Name_Map name_map_S19645C5[] = {
  NSPAIR(_ZN8S19645C5C1Ev),
  NSPAIR(_ZN8S19645C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
static Base_Class bases_S19645C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19645C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19645C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19921C8,    ABISELECT(720,536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19645C4,    ABISELECT(576,424), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19645C4,    ABISELECT(1008,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C7,    ABISELECT(1008,764), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19645C5[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY vtc_S19645C5[] = {
  ABISELECT(1008,764),
  ABISELECT(720,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  0,
  0,
  ABISELECT(-1008,-764),
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S19645C5[];
static  VTT_ENTRY vtt_S19645C5[] = {
  {&(_ZTV8S19645C5[4]),  4,17},
  {&(_ZTV8S19645C5[15]),  15,17},
};
extern VTBL_ENTRY _ZTI8S19645C5[];
extern  VTBL_ENTRY _ZTV8S19645C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19645C5[];
Class_Descriptor cd_S19645C5 = {  "S19645C5", // class name
  bases_S19645C5, 6,
  &(vtc_S19645C5[0]), // expected_vtbl_contents
  &(vtt_S19645C5[0]), // expected_vtt_contents
  ABISELECT(1424,1092), // object size
  NSPAIRA(_ZTI8S19645C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19645C5),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19645C5),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19645C9  {
  long double s19645c9f0;
  void *s19645c9f1;
  long double s19645c9f2[8];
  void *s19645c9f3[9];
  ::S19921C12 s19645c9f4;
  int s19645c9f5;
  char s19645c9f6;
  long double s19645c9f7[4];
  char s19645c9f8;
  int s19645c9f9;
  virtual void  v6(); // _ZN8S19645C92v6Ev
  ~S19645C9(); // tgen
  S19645C9(); // tgen
};
//SIG(-1 S19645C9) C1{ v1 FD Fp FD[8] Fp[9] FC2{ m FD Fp[10] FD Fi:0 Fi FD FC3{ BC4{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} v2 FC4 FC4 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fc:8 FL FD FC6{ BC4 v4 v5 v6 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi}} Fi Fc FD[4] Fc Fi}


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

static void Test_S19645C9()
{
  extern Class_Descriptor cd_S19645C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,269)];
    init_test(&cd_S19645C9, buf);
    S19645C9 *dp, &lv = *(dp=new (buf) S19645C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1072), "sizeof(S19645C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C9)");
    check_field_offset(lv, s19645c9f0, ABISELECT(16,4), "S19645C9.s19645c9f0");
    check_field_offset(lv, s19645c9f1, ABISELECT(32,16), "S19645C9.s19645c9f1");
    check_field_offset(lv, s19645c9f2, ABISELECT(48,20), "S19645C9.s19645c9f2");
    check_field_offset(lv, s19645c9f3, ABISELECT(176,116), "S19645C9.s19645c9f3");
    check_field_offset(lv, s19645c9f4, ABISELECT(256,152), "S19645C9.s19645c9f4");
    check_field_offset(lv, s19645c9f5, ABISELECT(1424,1008), "S19645C9.s19645c9f5");
    check_field_offset(lv, s19645c9f6, ABISELECT(1428,1012), "S19645C9.s19645c9f6");
    check_field_offset(lv, s19645c9f7, ABISELECT(1440,1016), "S19645C9.s19645c9f7");
    check_field_offset(lv, s19645c9f8, ABISELECT(1504,1064), "S19645C9.s19645c9f8");
    check_field_offset(lv, s19645c9f9, ABISELECT(1508,1068), "S19645C9.s19645c9f9");
    test_class_info(&lv, &cd_S19645C9);
    dp->~S19645C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C9(Test_S19645C9, "S19645C9", ABISELECT(1520,1072));

#else // __cplusplus

extern void _ZN8S19645C9C1Ev();
extern void _ZN8S19645C9D1Ev();
Name_Map name_map_S19645C9[] = {
  NSPAIR(_ZN8S19645C9C1Ev),
  NSPAIR(_ZN8S19645C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19645C9[];
extern void _ZN8S19645C92v6Ev();
static  VTBL_ENTRY vtc_S19645C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C9[0]),
  (VTBL_ENTRY)&_ZN8S19645C92v6Ev,
};
extern VTBL_ENTRY _ZTI8S19645C9[];
extern  VTBL_ENTRY _ZTV8S19645C9[];
Class_Descriptor cd_S19645C9 = {  "S19645C9", // class name
  0,0,//no base classes
  &(vtc_S19645C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1520,1072), // object size
  NSPAIRA(_ZTI8S19645C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19645C9),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  S19645C12  : S19645C4 , S19645C7 , S19921C8 {
  ::S19921C7 s19645c12f0;
  char s19645c12f1;
  char s19645c12f2;
  ::S19645C5 s19645c12f3;
  ::S19645C9 s19645c12f4;
  int s19645c12f5;
  long s19645c12f6;
  virtual void  v7(); // _ZN9S19645C122v7Ev
  virtual void  v8(); // _ZN9S19645C122v8Ev
  ~S19645C12(); // tgen
  S19645C12(); // tgen
};
//SIG(-1 S19645C12) C1{ BC2{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} BC3{ BC2 v4 FC2 FC2 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC5{ m Fc FU4 FC6{ v5 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU4[3] Fc} v1 v2 FU4 Fc Fc FC7{ BC8{ BC2 v6 v7 v8 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC5 BC2 VBC3 Fl FL} FC9{ v9 FD Fp FD[8] Fp[9] FC10{ m FD Fp[10] FD Fi:0 Fi FD FC11{ BC6 v10 FC6 FC6 FU4} Fc:8 FL FD FC12{ BC6 v11 v12 v13 FC6 Fi FC6 Fi Fc[6] Fc:4 Fp FC6 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl}


void  S19645C12 ::v7(){vfunc_called(this, "_ZN9S19645C122v7Ev");}
void  S19645C12 ::v8(){vfunc_called(this, "_ZN9S19645C122v8Ev");}
S19645C12 ::~S19645C12(){ note_dtor("S19645C12", this);} // tgen
S19645C12 ::S19645C12(){ note_ctor("S19645C12", this);} // tgen

static void Test_S19645C12()
{
  extern Class_Descriptor cd_S19645C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(241,716)];
    init_test(&cd_S19645C12, buf);
    S19645C12 *dp, &lv = *(dp=new (buf) S19645C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3840,2860), "sizeof(S19645C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C12)");
    /*is_ambiguous_... S19645C12::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*), 0, "S19645C12");
    check_base_class_offset(lv, (S19645C4*)(S19645C7*), ABISELECT(128,100), "S19645C12");
    check_base_class_offset(lv, (S19645C7*), ABISELECT(128,100), "S19645C12");
    check_base_class_offset(lv, (S19921C8*), ABISELECT(544,428), "S19645C12");
    check_field_offset(lv, s19645c12f0, ABISELECT(832,656), "S19645C12.s19645c12f0");
    check_field_offset(lv, s19645c12f1, ABISELECT(864,684), "S19645C12.s19645c12f1");
    check_field_offset(lv, s19645c12f2, ABISELECT(865,685), "S19645C12.s19645c12f2");
    check_field_offset(lv, s19645c12f3, ABISELECT(880,688), "S19645C12.s19645c12f3");
    check_field_offset(lv, s19645c12f4, ABISELECT(2304,1780), "S19645C12.s19645c12f4");
    check_field_offset(lv, s19645c12f5, ABISELECT(3824,2852), "S19645C12.s19645c12f5");
    check_field_offset(lv, s19645c12f6, ABISELECT(3832,2856), "S19645C12.s19645c12f6");
    test_class_info(&lv, &cd_S19645C12);
    dp->~S19645C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C12(Test_S19645C12, "S19645C12", ABISELECT(3840,2860));

#else // __cplusplus

extern void _ZN9S19645C12C1Ev();
extern void _ZN9S19645C12D1Ev();
Name_Map name_map_S19645C12[] = {
  NSPAIR(_ZN9S19645C12C1Ev),
  NSPAIR(_ZN9S19645C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S19645C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19645C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19645C4,    ABISELECT(128,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19645C7,    ABISELECT(128,100), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19645C12[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C122v7Ev();
extern void _ZN9S19645C122v8Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY vtc_S19645C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C12[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v8Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19645C12[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern VTBL_ENTRY _ZTI9S19645C12[];
extern  VTBL_ENTRY _ZTV9S19645C12[];
Class_Descriptor cd_S19645C12 = {  "S19645C12", // class name
  bases_S19645C12, 4,
  &(vtc_S19645C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3840,2860), // object size
  NSPAIRA(_ZTI9S19645C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19645C12),9, //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  S19645C13  : S19645C4 , virtual S19645C6 , virtual S19645C7 , S19645C5 , S19921C8 {
  int s19645c13f0;
  virtual void  v9(); // _ZN9S19645C132v9Ev
  ~S19645C13(); // tgen
  S19645C13(); // tgen
};
//SIG(-1 S19645C13) C1{ BC2{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} VBC3{ BC2 v3 v4 v5 FC2 Fi FC2 Fi Fc[6] Fc:4 Fp FC2 Fi} VBC4{ BC2 v6 FC2 FC2 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ BC3 VBC7{ m Fc FU5 FC8{ v7 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} BC2 VBC4 Fl FL} BC7 v1 Fi}


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

static void Test_S19645C13()
{
  extern Class_Descriptor cd_S19645C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(152,463)];
    init_test(&cd_S19645C13, buf);
    S19645C13 *dp, &lv = *(dp=new (buf) S19645C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2416,1848), "sizeof(S19645C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C13)");
    /*is_ambiguous_... S19645C13::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*), 0, "S19645C13");
    /*is_ambiguous_... S19645C13::S19645C6 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C6*), ABISELECT(1136,868), "S19645C13");
    /*is_ambiguous_... S19645C13::S19645C6 */ AMB_check_base_class_offset(lv, (S19645C6*), ABISELECT(1136,868), "S19645C13");
    check_base_class_offset(lv, (S19645C4*)(S19645C7*), ABISELECT(1712,1292), "S19645C13");
    check_base_class_offset(lv, (S19645C7*), ABISELECT(1712,1292), "S19645C13");
    check_base_class_offset(lv, (S19645C7*)(S19645C5*), ABISELECT(1712,1292), "S19645C13");
    check_base_class_offset(lv, (S19645C4*)(S19645C6*)(S19645C5*), ABISELECT(128,100), "S19645C13");
    check_base_class_offset(lv, (S19645C6*)(S19645C5*), ABISELECT(128,100), "S19645C13");
    check_base_class_offset(lv, (S19921C8*)(S19645C5*), ABISELECT(2128,1620), "S19645C13");
    /*is_ambiguous_... S19645C5::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C5*), ABISELECT(704,524), "S19645C13");
    check_base_class_offset(lv, (S19645C5*), ABISELECT(128,100), "S19645C13");
    /*is_ambiguous_... S19645C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(848,636), "S19645C13");
    check_field_offset(lv, s19645c13f0, ABISELECT(1132,864), "S19645C13.s19645c13f0");
    test_class_info(&lv, &cd_S19645C13);
    dp->~S19645C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C13(Test_S19645C13, "S19645C13", ABISELECT(2416,1848));

#else // __cplusplus

extern void _ZN9S19645C13C1Ev();
extern void _ZN9S19645C13D1Ev();
Name_Map name_map_S19645C13[] = {
  NSPAIR(_ZN9S19645C13C1Ev),
  NSPAIR(_ZN9S19645C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C5;
extern VTBL_ENTRY _ZTI8S19645C5[];
extern  VTBL_ENTRY _ZTV8S19645C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19645C5[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
static Base_Class bases_S19645C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19645C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C4,    ABISELECT(1136,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19645C6,    ABISELECT(1136,868), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19645C4,    ABISELECT(1712,1292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19645C7,    ABISELECT(1712,1292), //bcp->offset
    28, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19645C4,    ABISELECT(128,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19645C6,    ABISELECT(128,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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(2128,1620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C4,    ABISELECT(704,524), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19645C5,    ABISELECT(128,100), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(848,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19645C13[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY vtc_S19645C13[] = {
  ABISELECT(2128,1620),
  ABISELECT(1712,1292),
  ABISELECT(1136,868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  ABISELECT(-704,-524),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-1136,-868),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  0,
  0,
  ABISELECT(-1712,-1292),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern VTBL_ENTRY _ZTV9S19645C13[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C5__9S19645C13[] = {
  ABISELECT(1584,1192),
  ABISELECT(2000,1520),
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__8S19645C5__9S19645C13[] = {
  0,
  0,
  ABISELECT(-1584,-1192),
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
static  VTT_ENTRY vtt_S19645C13[] = {
  {&(_ZTV9S19645C13[5]),  5,34},
  {&(_tg__ZTV8S19645C5__9S19645C13[4]),  4,8},
  {&(_tg__ZTV8S19645C7__8S19645C5__9S19645C13[4]),  4,6},
  {&(_ZTV9S19645C13[24]),  24,34},
  {&(_ZTV9S19645C13[32]),  32,34},
  {&(_ZTV9S19645C13[11]),  11,34},
};
extern VTBL_ENTRY _ZTI9S19645C13[];
extern  VTBL_ENTRY _ZTV9S19645C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C13[];
Class_Descriptor cd_S19645C13 = {  "S19645C13", // class name
  bases_S19645C13, 11,
  &(vtc_S19645C13[0]), // expected_vtbl_contents
  &(vtt_S19645C13[0]), // expected_vtt_contents
  ABISELECT(2416,1848), // object size
  NSPAIRA(_ZTI9S19645C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19645C13),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19645C13),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19645C11  : S19645C12 , S19645C13 , S19921C12 , S19921C8 , virtual S19645C4 {
  void *s19645c11f0;
  long double s19645c11f1;
  int s19645c11f2;
  int s19645c11f3;
  char s19645c11f4[7];
  ~S19645C11(); // tgen
  S19645C11(); // tgen
};
//SIG(-1 S19645C11) C1{ BC2{ BC3{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} BC4{ BC3 v2 FC3 FC3 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC6{ m Fc FU5 FC7{ v9 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU5[3] Fc} v3 v4 FU5 Fc Fc FC8{ BC9{ BC3 v5 v6 v7 FC3 Fi FC3 Fi Fc[6] Fc:4 Fp FC3 Fi} VBC6 BC3 VBC4 Fl FL} FC10{ v10 FD Fp FD[8] Fp[9] FC11{ m FD Fp[10] FD Fi:0 Fi FD FC12{ BC7 v11 FC7 FC7 FU5} Fc:8 FL FD FC13{ BC7 v12 v13 v14 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC14{ BC3 VBC9 VBC4 BC8 BC6 v8 Fi} BC11 BC6 VBC3 Fp FD Fi Fi Fc[7]}


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

static void Test_S19645C11()
{
  extern Class_Descriptor cd_S19645C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(494,1482)];
    init_test(&cd_S19645C11, buf);
    S19645C11 *dp, &lv = *(dp=new (buf) S19645C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7888,5924), "sizeof(S19645C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C11)");
    /*is_ambiguous_... S19645C12::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C12*), 0, "S19645C11");
    check_base_class_offset(lv, (S19645C4*)(S19645C7*)(S19645C12*), ABISELECT(128,100), "S19645C11");
    check_base_class_offset(lv, (S19645C7*)(S19645C12*), ABISELECT(128,100), "S19645C11");
    check_base_class_offset(lv, (S19921C8*)(S19645C12*), ABISELECT(544,428), "S19645C11");
    check_base_class_offset(lv, (S19645C12*), 0, "S19645C11");
    /*is_ambiguous_... S19645C13::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C13*), ABISELECT(3840,2860), "S19645C11");
    /*is_ambiguous_... S19645C11::S19645C6 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C6*), ABISELECT(6480,4844), "S19645C11");
    /*is_ambiguous_... S19645C13::S19645C6 */ AMB_check_base_class_offset(lv, (S19645C6*)(S19645C13*), ABISELECT(6480,4844), "S19645C11");
    /*is_ambiguous_... S19645C11::S19645C7 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C7*), ABISELECT(7056,5268), "S19645C11");
    check_base_class_offset(lv, (S19645C7*)(S19645C13*), ABISELECT(7056,5268), "S19645C11");
    check_base_class_offset(lv, (S19645C7*)(S19645C5*)(S19645C13*), ABISELECT(7056,5268), "S19645C11");
    check_base_class_offset(lv, (S19645C4*)(S19645C6*)(S19645C5*)(S19645C13*), ABISELECT(3968,2960), "S19645C11");
    check_base_class_offset(lv, (S19645C6*)(S19645C5*)(S19645C13*), ABISELECT(3968,2960), "S19645C11");
    check_base_class_offset(lv, (S19921C8*)(S19645C5*)(S19645C13*), ABISELECT(7472,5596), "S19645C11");
    /*is_ambiguous_... S19645C5::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C5*)(S19645C13*), ABISELECT(4544,3384), "S19645C11");
    check_base_class_offset(lv, (S19645C5*)(S19645C13*), ABISELECT(3968,2960), "S19645C11");
    /*is_ambiguous_... S19645C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19645C13*), ABISELECT(4688,3496), "S19645C11");
    check_base_class_offset(lv, (S19645C13*), ABISELECT(3840,2860), "S19645C11");
    check_base_class_offset(lv, (S19921C12*), ABISELECT(4976,3728), "S19645C11");
    /*is_ambiguous_... S19645C11::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(6144,4584), "S19645C11");
    /*is_ambiguous_... S19645C11::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*), ABISELECT(7760,5824), "S19645C11");
    check_field_offset(lv, s19645c11f0, ABISELECT(6432,4812), "S19645C11.s19645c11f0");
    check_field_offset(lv, s19645c11f1, ABISELECT(6448,4816), "S19645C11.s19645c11f1");
    check_field_offset(lv, s19645c11f2, ABISELECT(6464,4828), "S19645C11.s19645c11f2");
    check_field_offset(lv, s19645c11f3, ABISELECT(6468,4832), "S19645C11.s19645c11f3");
    check_field_offset(lv, s19645c11f4, ABISELECT(6472,4836), "S19645C11.s19645c11f4");
    test_class_info(&lv, &cd_S19645C11);
    dp->~S19645C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C11(Test_S19645C11, "S19645C11", ABISELECT(7888,5924));

#else // __cplusplus

extern void _ZN9S19645C11C1Ev();
extern void _ZN9S19645C11D1Ev();
Name_Map name_map_S19645C11[] = {
  NSPAIR(_ZN9S19645C11C1Ev),
  NSPAIR(_ZN9S19645C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C12;
extern VTBL_ENTRY _ZTI9S19645C12[];
extern  VTBL_ENTRY _ZTV9S19645C12[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C5;
extern VTBL_ENTRY _ZTI8S19645C5[];
extern  VTBL_ENTRY _ZTV8S19645C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19645C5[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C13;
extern VTBL_ENTRY _ZTI9S19645C13[];
extern  VTBL_ENTRY _ZTV9S19645C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
static Base_Class bases_S19645C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19645C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19645C4,    ABISELECT(128,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
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19645C7,    ABISELECT(128,100), //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(544,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19645C4,    ABISELECT(3840,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19645C4,    ABISELECT(6480,4844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C6,    ABISELECT(6480,4844), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19645C4,    ABISELECT(7056,5268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C7,    ABISELECT(7056,5268), //bcp->offset
    41, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19645C4,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19645C6,    ABISELECT(3968,2960), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7472,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C4,    ABISELECT(4544,3384), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19645C5,    ABISELECT(3968,2960), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(4688,3496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C13,    ABISELECT(3840,2860), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C12,    ABISELECT(4976,3728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C8,    ABISELECT(6144,4584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19645C4,    ABISELECT(7760,5824), //bcp->offset
    47, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19645C11[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C122v7Ev();
extern void _ZN9S19645C122v8Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
extern void _ZN8S19645C42v1Ev();
static  VTBL_ENTRY vtc_S19645C11[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v8Ev,
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  ABISELECT(-4544,-3384),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
};
extern VTBL_ENTRY _ZTV9S19645C11[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C13__9S19645C11[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C59S19645C13__9S19645C11[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__8S19645C59S19645C13__9S19645C11[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C6__9S19645C13__9S19645C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__9S19645C13__9S19645C11[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C5__9S19645C13__9S19645C11[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
static  VTT_ENTRY vtt_S19645C11[] = {
  {&(_ZTV9S19645C11[6]),  6,51},
  {&(_tg__ZTV9S19645C13__9S19645C11[5]),  5,7},
  {&(_tg__ZTV8S19645C59S19645C13__9S19645C11[4]),  4,8},
  {&(_tg__ZTV8S19645C7__8S19645C59S19645C13__9S19645C11[4]),  4,6},
  {&(_tg__ZTV8S19645C6__9S19645C13__9S19645C11[6]),  6,10},
  {&(_tg__ZTV8S19645C7__9S19645C13__9S19645C11[4]),  4,6},
  {&(_tg__ZTV8S19645C5__9S19645C13__9S19645C11[4]),  4,8},
  {&(_ZTV9S19645C11[18]),  18,51},
  {&(_ZTV9S19645C11[37]),  37,51},
  {&(_ZTV9S19645C11[45]),  45,51},
  {&(_ZTV9S19645C11[24]),  24,51},
  {&(_ZTV9S19645C11[50]),  50,51},
};
extern VTBL_ENTRY _ZTI9S19645C11[];
extern  VTBL_ENTRY _ZTV9S19645C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C11[];
Class_Descriptor cd_S19645C11 = {  "S19645C11", // class name
  bases_S19645C11, 20,
  &(vtc_S19645C11[0]), // expected_vtbl_contents
  &(vtt_S19645C11[0]), // expected_vtt_contents
  ABISELECT(7888,5924), // object size
  NSPAIRA(_ZTI9S19645C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19645C11),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19645C11),12, //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  S19645C10  : virtual S19645C11 , virtual S19921C12 {
  ::S19645C5 s19645c10f0;
  int s19645c10f1;
  void *s19645c10f2;
  int s19645c10f3:32;
  int s19645c10f4;
  ::S19921C14 s19645c10f5;
  char  :0;
  void *s19645c10f7;
  long double s19645c10f8;
  virtual  ~S19645C10(); // _ZN9S19645C10D2Ev
  virtual void  v10(); // _ZN9S19645C103v10Ev
  S19645C10(); // tgen
};
//SIG(-1 S19645C10) C1{ VBC2{ BC3{ BC4{ v2 FL[8] Fc[4] Fi:7 Fi FD FL} BC5{ BC4 v3 FC4 FC4 FU6{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} BC7{ m Fc FU6 FC8{ v10 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU6[3] Fc} v4 v5 FU6 Fc Fc FC9{ BC10{ BC4 v6 v7 v8 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi} VBC7 BC4 VBC5 Fl FL} FC11{ v17 FD Fp FD[8] Fp[9] FC12{ m FD Fp[10] FD Fi:0 Fi FD FC13{ BC8 v16 FC8 FC8 FU6} Fc:8 FL FD FC14{ BC8 v13 v14 v15 FC8 Fi FC8 Fi Fc[6] Fc:4 Fp FC8 Fi}} Fi Fc FD[4] Fc Fi} Fi Fl} BC15{ BC4 VBC10 VBC5 BC9 BC7 v9 Fi} BC12 BC7 VBC4 Fp FD Fi Fi Fc[7]} VBC12 vd v1 FC9 Fi Fp Fi:32 Fi FC16{ VBC7 VBC17{ BC14 VBC7 BC8 VBC13 Fl FL} vd v11 v12 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD}


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

static void Test_S19645C10()
{
  extern Class_Descriptor cd_S19645C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,2270)];
    init_test(&cd_S19645C10, buf);
    S19645C10 *dp, &lv = *(dp=new (buf) S19645C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,9076), "sizeof(S19645C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C10)");
    /*is_ambiguous_... S19645C12::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C12*)(S19645C11*), ABISELECT(3024,2296), "S19645C10");
    check_base_class_offset(lv, (S19645C4*)(S19645C7*)(S19645C12*)(S19645C11*), ABISELECT(3152,2396), "S19645C10");
    check_base_class_offset(lv, (S19645C7*)(S19645C12*)(S19645C11*), ABISELECT(3152,2396), "S19645C10");
    check_base_class_offset(lv, (S19921C8*)(S19645C12*)(S19645C11*), ABISELECT(3568,2724), "S19645C10");
    check_base_class_offset(lv, (S19645C12*)(S19645C11*), ABISELECT(3024,2296), "S19645C10");
    /*is_ambiguous_... S19645C13::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C13*)(S19645C11*), ABISELECT(6864,5156), "S19645C10");
    /*is_ambiguous_... S19645C10::S19645C6 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C6*), ABISELECT(9504,7140), "S19645C10");
    /*is_ambiguous_... S19645C13::S19645C6 */ AMB_check_base_class_offset(lv, (S19645C6*)(S19645C13*)(S19645C11*), ABISELECT(9504,7140), "S19645C10");
    /*is_ambiguous_... S19645C10::S19645C7 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C7*), ABISELECT(10080,7564), "S19645C10");
    check_base_class_offset(lv, (S19645C7*)(S19645C13*)(S19645C11*), ABISELECT(10080,7564), "S19645C10");
    check_base_class_offset(lv, (S19645C7*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(10080,7564), "S19645C10");
    check_base_class_offset(lv, (S19645C4*)(S19645C6*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(6992,5256), "S19645C10");
    check_base_class_offset(lv, (S19645C6*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(6992,5256), "S19645C10");
    check_base_class_offset(lv, (S19921C8*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(10496,7892), "S19645C10");
    /*is_ambiguous_... S19645C5::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(7568,5680), "S19645C10");
    check_base_class_offset(lv, (S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(6992,5256), "S19645C10");
    /*is_ambiguous_... S19645C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19645C13*)(S19645C11*), ABISELECT(7712,5792), "S19645C10");
    check_base_class_offset(lv, (S19645C13*)(S19645C11*), ABISELECT(6864,5156), "S19645C10");
    check_base_class_offset(lv, (S19921C12*)(S19645C11*), ABISELECT(8000,6024), "S19645C10");
    /*is_ambiguous_... S19645C11::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19645C11*), ABISELECT(9168,6880), "S19645C10");
    /*is_ambiguous_... S19645C11::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C11*), ABISELECT(10784,8120), "S19645C10");
    check_base_class_offset(lv, (S19645C11*), ABISELECT(3024,2296), "S19645C10");
    /*is_ambiguous_... S19645C10::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*), ABISELECT(10912,8220), "S19645C10");
    check_field_offset(lv, s19645c10f0, ABISELECT(16,4), "S19645C10.s19645c10f0");
    check_field_offset(lv, s19645c10f1, ABISELECT(1440,1096), "S19645C10.s19645c10f1");
    check_field_offset(lv, s19645c10f2, ABISELECT(1448,1100), "S19645C10.s19645c10f2");
    set_bf_and_test(lv, s19645c10f3, ABISELECT(1456,1104), 0, 32, 1, "S19645C10");
    set_bf_and_test(lv, s19645c10f3, ABISELECT(1456,1104), 0, 32, hide_sll(1LL<<31), "S19645C10");
    check_field_offset(lv, s19645c10f4, ABISELECT(1460,1108), "S19645C10.s19645c10f4");
    check_field_offset(lv, s19645c10f5, ABISELECT(1472,1112), "S19645C10.s19645c10f5");
    check_field_offset(lv, s19645c10f7, ABISELECT(2992,2280), "S19645C10.s19645c10f7");
    check_field_offset(lv, s19645c10f8, ABISELECT(3008,2284), "S19645C10.s19645c10f8");
    test_class_info(&lv, &cd_S19645C10);
    dp->~S19645C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C10(Test_S19645C10, "S19645C10", ABISELECT(12080,9076));

#else // __cplusplus

extern void _ZN9S19645C10C1Ev();
extern void _ZN9S19645C10D2Ev();
Name_Map name_map_S19645C10[] = {
  NSPAIR(_ZN9S19645C10C1Ev),
  NSPAIR(_ZN9S19645C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C12;
extern VTBL_ENTRY _ZTI9S19645C12[];
extern  VTBL_ENTRY _ZTV9S19645C12[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C5;
extern VTBL_ENTRY _ZTI8S19645C5[];
extern  VTBL_ENTRY _ZTV8S19645C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19645C5[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C13;
extern VTBL_ENTRY _ZTI9S19645C13[];
extern  VTBL_ENTRY _ZTV9S19645C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C11;
extern VTBL_ENTRY _ZTI9S19645C11[];
extern  VTBL_ENTRY _ZTV9S19645C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C11[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
static Base_Class bases_S19645C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19645C4,    ABISELECT(3024,2296), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19645C4,    ABISELECT(3152,2396), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19645C7,    ABISELECT(3152,2396), //bcp->offset
    28, //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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(3568,2724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C12,    ABISELECT(3024,2296), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19645C4,    ABISELECT(6864,5156), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19645C4,    ABISELECT(9504,7140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C6,    ABISELECT(9504,7140), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19645C4,    ABISELECT(10080,7564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C7,    ABISELECT(10080,7564), //bcp->offset
    60, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19645C4,    ABISELECT(6992,5256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19645C6,    ABISELECT(6992,5256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(10496,7892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C4,    ABISELECT(7568,5680), //bcp->offset
    47, //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19645C5,    ABISELECT(6992,5256), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7712,5792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C13,    ABISELECT(6864,5156), //bcp->offset
    32, //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(8000,6024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(9168,6880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C4,    ABISELECT(10784,8120), //bcp->offset
    66, //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_S19645C11,    ABISELECT(3024,2296), //bcp->offset
    11, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19921C12,    ABISELECT(10912,8220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S19645C10[];
extern void _ZN9S19645C10D1Ev();
extern void _ZN9S19645C10D0Ev();
extern void _ZN9S19645C103v10Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C122v7Ev();
extern void _ZN9S19645C122v8Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
extern void _ZN8S19645C42v1Ev();
static  VTBL_ENTRY vtc_S19645C10[] = {
  ABISELECT(10912,8220),
  ABISELECT(10784,8120),
  ABISELECT(10496,7892),
  ABISELECT(10080,7564),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN9S19645C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19645C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19645C103v10Ev,
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  ABISELECT(-3024,-2296),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v8Ev,
  ABISELECT(-3152,-2396),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-6864,-5156),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-6992,-5256),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  ABISELECT(-7568,-5680),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7140),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  0,
  0,
  ABISELECT(-10080,-7564),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
  0,
  ABISELECT(-10784,-8120),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
};
extern VTBL_ENTRY _ZTV9S19645C10[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C122v7Ev();
extern void _ZN9S19645C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C11__9S19645C10[] = {
  ABISELECT(7760,5824),
  ABISELECT(7472,5596),
  ABISELECT(7056,5268),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v8Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C139S19645C11__9S19645C10[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C59S19645C139S19645C11__9S19645C10[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__8S19645C59S19645C139S19645C11__9S19645C10[] = {
  0,
  0,
  ABISELECT(-3088,-2308),
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C6__9S19645C139S19645C11__9S19645C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__9S19645C139S19645C11__9S19645C10[] = {
  0,
  0,
  ABISELECT(-3216,-2408),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C5__9S19645C139S19645C11__9S19645C10[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C13__9S19645C11__9S19645C10[] = {
  ABISELECT(3632,2736),
  ABISELECT(3216,2408),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C6__9S19645C11__9S19645C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__A1__9S19645C11__9S19645C10[] = {
  0,
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C59S19645C13__9S19645C11__9S19645C10[] = {
  ABISELECT(3088,2308),
  ABISELECT(3504,2636),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C4__A7__9S19645C11__9S19645C10[] = {
  0,
  ABISELECT(-7760,-5824),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
};
static  VTT_ENTRY vtt_S19645C10[] = {
  {&(_ZTV9S19645C10[8]),  8,70},
  {&(_ZTV9S19645C10[25]),  25,70},
  {&(_ZTV9S19645C10[30]),  30,70},
  {&(_ZTV9S19645C10[37]),  37,70},
  {&(_ZTV9S19645C10[56]),  56,70},
  {&(_ZTV9S19645C10[64]),  64,70},
  {&(_ZTV9S19645C10[43]),  43,70},
  {&(_ZTV9S19645C10[49]),  49,70},
  {&(_ZTV9S19645C10[69]),  69,70},
  {&(_tg__ZTV9S19645C11__9S19645C10[6]),  6,9},
  {&(_tg__ZTV9S19645C139S19645C11__9S19645C10[5]),  5,7},
  {&(_tg__ZTV8S19645C59S19645C139S19645C11__9S19645C10[4]),  4,8},
  {&(_tg__ZTV8S19645C7__8S19645C59S19645C139S19645C11__9S19645C10[4]),  4,6},
  {&(_tg__ZTV8S19645C6__9S19645C139S19645C11__9S19645C10[6]),  6,10},
  {&(_tg__ZTV8S19645C7__9S19645C139S19645C11__9S19645C10[4]),  4,6},
  {&(_tg__ZTV8S19645C5__9S19645C139S19645C11__9S19645C10[4]),  4,8},
  {&(_tg__ZTV9S19645C13__9S19645C11__9S19645C10[5]),  5,7},
  {&(_tg__ZTV8S19645C6__9S19645C11__9S19645C10[6]),  6,10},
  {&(_tg__ZTV8S19645C7__A1__9S19645C11__9S19645C10[4]),  4,6},
  {&(_tg__ZTV8S19645C59S19645C13__9S19645C11__9S19645C10[4]),  4,8},
  {&(_tg__ZTV8S19645C4__A7__9S19645C11__9S19645C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19645C10[];
extern  VTBL_ENTRY _ZTV9S19645C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C10[];
Class_Descriptor cd_S19645C10 = {  "S19645C10", // class name
  bases_S19645C10, 22,
  &(vtc_S19645C10[0]), // expected_vtbl_contents
  &(vtt_S19645C10[0]), // expected_vtt_contents
  ABISELECT(12080,9076), // object size
  NSPAIRA(_ZTI9S19645C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19645C10),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19645C10),21, //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  S19645C1  : virtual S19921C8 , S19645C5 , virtual S19921C12 , virtual S19645C9 , virtual S19645C10 {
  void *s19645c1f0;
  int s19645c1f1;
  virtual  ~S19645C1(); // _ZN8S19645C1D2Ev
  S19645C1(); // tgen
};
//SIG(1 S19645C1) C1{ VBC2{ m Fc FU3{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]} FC4{ v11 FL[8] Fc[4] Fi:7 Fi FD FL} FL FU3[3] Fc} BC5{ BC6{ BC7{ v1 FL[8] Fc[4] Fi:7 Fi FD FL} v2 v3 v4 FC7 Fi FC7 Fi Fc[6] Fc:4 Fp FC7 Fi} VBC2 BC7 VBC8{ BC7 v5 FC7 FC7 FU3} Fl FL} VBC9{ m FD Fp[10] FD Fi:0 Fi FD FC10{ BC4 v12 FC4 FC4 FU3} Fc:8 FL FD FC11{ BC4 v13 v14 v15 FC4 Fi FC4 Fi Fc[6] Fc:4 Fp FC4 Fi}} VBC12{ v6 FD Fp FD[8] Fp[9] FC9 Fi Fc FD[4] Fc Fi} VBC13{ VBC14{ BC15{ BC7 BC8 BC2 v7 v8 FU3 Fc Fc FC5 FC12 Fi Fl} BC16{ BC7 VBC6 VBC8 BC5 BC2 v9 Fi} BC9 BC2 VBC7 Fp FD Fi Fi Fc[7]} VBC9 vd v10 FC5 Fi Fp Fi:32 Fi FC17{ VBC2 VBC18{ BC11 VBC2 BC4 VBC10 Fl FL} vd v16 v17 Fi Fp Fc:1 Fi Fi Fp Fi Fi Fi Fi[8] Fc} Fc:0 Fp FD} vd Fp Fi}


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

static void Test_S19645C1()
{
  extern Class_Descriptor cd_S19645C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(897,2674)];
    init_test(&cd_S19645C1, buf);
    S19645C1 *dp, &lv = *(dp=new (buf) S19645C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14336,10692), "sizeof(S19645C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19645C1)");
    /*is_ambiguous_... S19645C1::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*), ABISELECT(736,544), "S19645C1");
    /*is_ambiguous_... S19645C1::S19645C5 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19645C5*), ABISELECT(736,544), "S19645C1");
    check_base_class_offset(lv, (S19921C8*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(736,544), "S19645C1");
    /*is_ambiguous_... S19645C1::S19645C5 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C6*)(S19645C5*), 0, "S19645C1");
    /*is_ambiguous_... S19645C1::S19645C5 */ AMB_check_base_class_offset(lv, (S19645C6*)(S19645C5*), 0, "S19645C1");
    /*is_ambiguous_... S19645C1::S19645C5 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C5*), ABISELECT(576,424), "S19645C1");
    /*is_ambiguous_... S19645C1::S19645C7 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C7*), ABISELECT(1024,772), "S19645C1");
    /*is_ambiguous_... S19645C1::S19645C5 */ AMB_check_base_class_offset(lv, (S19645C7*)(S19645C5*), ABISELECT(1024,772), "S19645C1");
    check_base_class_offset(lv, (S19645C7*)(S19645C13*)(S19645C11*), ABISELECT(1024,772), "S19645C1");
    check_base_class_offset(lv, (S19645C7*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(1024,772), "S19645C1");
    /*is_ambiguous_... S19645C1::S19645C5 */ AMB_check_base_class_offset(lv, (S19645C5*), 0, "S19645C1");
    /*is_ambiguous_... S19645C1::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*), ABISELECT(1440,1100), "S19645C1");
    /*is_ambiguous_... S19645C10::S19921C12 */ AMB_check_base_class_offset(lv, (S19921C12*)(S19645C10*), ABISELECT(1440,1100), "S19645C1");
    check_base_class_offset(lv, (S19645C9*), ABISELECT(2608,1956), "S19645C1");
    /*is_ambiguous_... S19645C12::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C12*)(S19645C11*), ABISELECT(7152,5324), "S19645C1");
    check_base_class_offset(lv, (S19645C4*)(S19645C7*)(S19645C12*)(S19645C11*), ABISELECT(7280,5424), "S19645C1");
    check_base_class_offset(lv, (S19645C7*)(S19645C12*)(S19645C11*), ABISELECT(7280,5424), "S19645C1");
    check_base_class_offset(lv, (S19921C8*)(S19645C12*)(S19645C11*), ABISELECT(7696,5752), "S19645C1");
    check_base_class_offset(lv, (S19645C12*)(S19645C11*), ABISELECT(7152,5324), "S19645C1");
    /*is_ambiguous_... S19645C13::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C13*)(S19645C11*), ABISELECT(10992,8184), "S19645C1");
    /*is_ambiguous_... S19645C1::S19645C6 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C6*), ABISELECT(13632,10168), "S19645C1");
    /*is_ambiguous_... S19645C13::S19645C6 */ AMB_check_base_class_offset(lv, (S19645C6*)(S19645C13*)(S19645C11*), ABISELECT(13632,10168), "S19645C1");
    check_base_class_offset(lv, (S19645C4*)(S19645C6*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(11120,8284), "S19645C1");
    check_base_class_offset(lv, (S19645C6*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(11120,8284), "S19645C1");
    /*is_ambiguous_... S19645C5::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(11696,8708), "S19645C1");
    check_base_class_offset(lv, (S19645C5*)(S19645C13*)(S19645C11*), ABISELECT(11120,8284), "S19645C1");
    /*is_ambiguous_... S19645C13::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19645C13*)(S19645C11*), ABISELECT(11840,8820), "S19645C1");
    check_base_class_offset(lv, (S19645C13*)(S19645C11*), ABISELECT(10992,8184), "S19645C1");
    check_base_class_offset(lv, (S19921C12*)(S19645C11*), ABISELECT(12128,9052), "S19645C1");
    /*is_ambiguous_... S19645C11::S19921C8 */ AMB_check_base_class_offset(lv, (S19921C8*)(S19645C11*), ABISELECT(13296,9908), "S19645C1");
    /*is_ambiguous_... S19645C11::S19645C4 */ AMB_check_base_class_offset(lv, (S19645C4*)(S19645C11*), ABISELECT(14208,10592), "S19645C1");
    check_base_class_offset(lv, (S19645C11*)(S19645C10*), ABISELECT(7152,5324), "S19645C1");
    check_base_class_offset(lv, (S19645C10*), ABISELECT(4128,3028), "S19645C1");
    check_field_offset(lv, s19645c1f0, ABISELECT(712,536), "S19645C1.s19645c1f0");
    check_field_offset(lv, s19645c1f1, ABISELECT(720,540), "S19645C1.s19645c1f1");
    test_class_info(&lv, &cd_S19645C1);
    dp->~S19645C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19645C1(Test_S19645C1, "S19645C1", ABISELECT(14336,10692));

#else // __cplusplus

extern void _ZN8S19645C1C1Ev();
extern void _ZN8S19645C1D2Ev();
Name_Map name_map_S19645C1[] = {
  NSPAIR(_ZN8S19645C1C1Ev),
  NSPAIR(_ZN8S19645C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
extern Class_Descriptor cd_S19645C5;
extern VTBL_ENTRY _ZTI8S19645C5[];
extern  VTBL_ENTRY _ZTV8S19645C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19645C5[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19645C9;
extern VTBL_ENTRY _ZTI8S19645C9[];
extern  VTBL_ENTRY _ZTV8S19645C9[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C7;
extern VTBL_ENTRY _ZTI8S19645C7[];
extern  VTBL_ENTRY _ZTV8S19645C7[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C12;
extern VTBL_ENTRY _ZTI9S19645C12[];
extern  VTBL_ENTRY _ZTV9S19645C12[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C6;
extern VTBL_ENTRY _ZTI8S19645C6[];
extern  VTBL_ENTRY _ZTV8S19645C6[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C5;
extern VTBL_ENTRY _ZTI8S19645C5[];
extern  VTBL_ENTRY _ZTV8S19645C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19645C5[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C13;
extern VTBL_ENTRY _ZTI9S19645C13[];
extern  VTBL_ENTRY _ZTV9S19645C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C13[];
extern Class_Descriptor cd_S19921C12;
extern VTBL_ENTRY _ZTI9S19921C12[];
extern Class_Descriptor cd_S19921C8;
extern VTBL_ENTRY _ZTI8S19921C8[];
extern Class_Descriptor cd_S19645C4;
extern VTBL_ENTRY _ZTI8S19645C4[];
extern  VTBL_ENTRY _ZTV8S19645C4[];
extern Class_Descriptor cd_S19645C11;
extern VTBL_ENTRY _ZTI9S19645C11[];
extern  VTBL_ENTRY _ZTV9S19645C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C11[];
extern Class_Descriptor cd_S19645C10;
extern VTBL_ENTRY _ZTI9S19645C10[];
extern  VTBL_ENTRY _ZTV9S19645C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19645C10[];
static Base_Class bases_S19645C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19921C8,    ABISELECT(736,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19645C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19645C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19645C4,    ABISELECT(576,424), //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
    21, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19645C4,    ABISELECT(1024,772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C7,    ABISELECT(1024,772), //bcp->offset
    19, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19645C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19921C12,    ABISELECT(1440,1100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19645C9,    ABISELECT(2608,1956), //bcp->offset
    25, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19645C4,    ABISELECT(7152,5324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19645C4,    ABISELECT(7280,5424), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19645C7,    ABISELECT(7280,5424), //bcp->offset
    59, //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
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(7696,5752), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C12,    ABISELECT(7152,5324), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S19645C4,    ABISELECT(10992,8184), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S19645C4,    ABISELECT(13632,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
    16, //immediately_derived
  0, 0},
  {&cd_S19645C6,    ABISELECT(13632,10168), //bcp->offset
    81, //bcp->virtual_function_table_offset
    6, //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
    22, //immediately_derived
  0, 1},
  {&cd_S19645C4,    ABISELECT(11120,8284), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S19645C6,    ABISELECT(11120,8284), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19645C4,    ABISELECT(11696,8708), //bcp->offset
    78, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19645C5,    ABISELECT(11120,8284), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19921C8,    ABISELECT(11840,8820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C13,    ABISELECT(10992,8184), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19921C12,    ABISELECT(12128,9052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19921C8,    ABISELECT(13296,9908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19645C4,    ABISELECT(14208,10592), //bcp->offset
    91, //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
    6, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S19645C11,    ABISELECT(7152,5324), //bcp->offset
    42, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S19645C10,    ABISELECT(4128,3028), //bcp->offset
    29, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19645C1[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C1D1Ev();
extern void _ZN8S19645C1D0Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
extern void _ZN8S19645C92v6Ev();
extern void ABISELECT(_ZTv0_n72_N8S19645C1D1Ev,_ZTv0_n36_N8S19645C1D1Ev)();
extern void ABISELECT(_ZThn4128_N8S19645C1D1Ev,_ZThn3028_N8S19645C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19645C1D0Ev,_ZTv0_n36_N8S19645C1D0Ev)();
extern void ABISELECT(_ZThn4128_N8S19645C1D0Ev,_ZThn3028_N8S19645C1D0Ev)() __attribute__((weak));
extern void _ZN9S19645C103v10Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C122v7Ev();
extern void _ZN9S19645C122v8Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
extern void _ZN8S19645C42v1Ev();
static  VTBL_ENTRY vtc_S19645C1[] = {
  ABISELECT(14208,10592),
  ABISELECT(13632,10168),
  ABISELECT(7152,5324),
  ABISELECT(4128,3028),
  ABISELECT(2608,1956),
  ABISELECT(1440,1100),
  ABISELECT(1024,772),
  ABISELECT(736,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19645C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19645C1D0Ev,
  ABISELECT(-576,-424),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  0,
  0,
  ABISELECT(-1024,-772),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
  0,
  ABISELECT(-2608,-1956),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C92v6Ev,
  0,
  ABISELECT(-4128,-3028),
  ABISELECT(-2688,-1928),
  ABISELECT(10080,7564),
  ABISELECT(-3392,-2484),
  ABISELECT(-3104,-2256),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  ABISELECT(-4128,-3028),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19645C1D1Ev,_ZTv0_n36_N8S19645C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19645C1D0Ev,_ZTv0_n36_N8S19645C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19645C103v10Ev,
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7056,5268),
  ABISELECT(-6416,-4780),
  ABISELECT(-6128,-4552),
  ABISELECT(6480,4844),
  ABISELECT(-7152,-5324),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v8Ev,
  ABISELECT(-7280,-5424),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
  ABISELECT(-10256,-7640),
  ABISELECT(-9968,-7412),
  ABISELECT(2640,1984),
  ABISELECT(-10992,-8184),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
  ABISELECT(-10096,-7512),
  ABISELECT(-10384,-7740),
  ABISELECT(-11120,-8284),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  ABISELECT(-11696,-8708),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-13632,-10168),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
  0,
  ABISELECT(-14208,-10592),
  (VTBL_ENTRY)&(_ZTI8S19645C1[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S19645C1[];
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C5__8S19645C1[] = {
  ABISELECT(1024,772),
  ABISELECT(736,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__8S19645C5__8S19645C1[] = {
  0,
  0,
  ABISELECT(-1024,-772),
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN9S19645C10D1Ev();
extern void _ZN9S19645C10D0Ev();
extern void _ZN9S19645C103v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C10__8S19645C1[] = {
  ABISELECT(-2688,-1928),
  ABISELECT(10080,7564),
  ABISELECT(-3392,-2484),
  ABISELECT(-3104,-2256),
  ABISELECT(9504,7140),
  ABISELECT(3024,2296),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN9S19645C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19645C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19645C103v10Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C122v7Ev();
extern void _ZN9S19645C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C11__9S19645C10__8S19645C1[] = {
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3968,2960),
  ABISELECT(3840,2860),
  ABISELECT(128,100),
  0,
  0,
  0,
  ABISELECT(7056,5268),
  ABISELECT(-6416,-4780),
  ABISELECT(-6128,-4552),
  ABISELECT(6480,4844),
  ABISELECT(-3024,-2296),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v8Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C79S19645C129S19645C11__9S19645C10__8S19645C1[] = {
  ABISELECT(-3152,-2396),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C139S19645C11__9S19645C10__8S19645C1[] = {
  ABISELECT(-10256,-7640),
  ABISELECT(-9968,-7412),
  ABISELECT(2640,1984),
  ABISELECT(-6864,-5156),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C6__9S19645C10__8S19645C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-9504,-7140),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__A1__9S19645C10__8S19645C1[] = {
  0,
  0,
  ABISELECT(3104,2256),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C59S19645C139S19645C11__9S19645C10__8S19645C1[] = {
  ABISELECT(-10096,-7512),
  ABISELECT(-10384,-7740),
  ABISELECT(-6992,-5256),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C48S19645C59S19645C139S19645C11__A6__9S19645C10__8S19645C1[] = {
  ABISELECT(-7568,-5680),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
};
extern void _ZN8S19645C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C4__A7__9S19645C10__8S19645C1[] = {
  0,
  ABISELECT(-10080,-7564),
  (VTBL_ENTRY)&(_ZTI9S19645C10[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C122v7Ev();
extern void _ZN9S19645C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C11__8S19645C1[] = {
  ABISELECT(7056,5268),
  ABISELECT(-6416,-4780),
  ABISELECT(-6128,-4552),
  ABISELECT(6480,4844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v7Ev,
  (VTBL_ENTRY)&_ZN9S19645C122v8Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C139S19645C11__8S19645C1[] = {
  ABISELECT(-10256,-7640),
  ABISELECT(-9968,-7412),
  ABISELECT(2640,1984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C59S19645C139S19645C11__A1__8S19645C1[] = {
  ABISELECT(-10096,-7512),
  ABISELECT(-10384,-7740),
  0,
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__8S19645C59S19645C139S19645C11__A1__8S19645C1[] = {
  0,
  0,
  ABISELECT(10096,7512),
  (VTBL_ENTRY)&(_ZTI8S19645C5[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C6__9S19645C139S19645C11__8S19645C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-2640,-1984),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__9S19645C139S19645C11__8S19645C1[] = {
  0,
  0,
  ABISELECT(9968,7412),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C5__9S19645C139S19645C11__8S19645C1[] = {
  ABISELECT(-10096,-7512),
  ABISELECT(-10384,-7740),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI9S19645C13[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN9S19645C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19645C13__9S19645C11__8S19645C1[] = {
  ABISELECT(-10256,-7640),
  ABISELECT(-9968,-7412),
  ABISELECT(2640,1984),
  ABISELECT(-3840,-2860),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN9S19645C132v9Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C6__9S19645C11__8S19645C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-6480,-4844),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C7__A1__9S19645C11__8S19645C1[] = {
  0,
  0,
  ABISELECT(6128,4552),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C72v5Ev,
};
extern void _ZN8S19645C42v1Ev();
extern void _ZN8S19645C62v2Ev();
extern void _ZN8S19645C62v3Ev();
extern void _ZN8S19645C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C59S19645C13__9S19645C11__8S19645C1[] = {
  ABISELECT(-10096,-7512),
  ABISELECT(-10384,-7740),
  ABISELECT(-3968,-2960),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19645C62v4Ev,
};
extern void _ZN8S19645C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19645C4__A7__9S19645C11__8S19645C1[] = {
  0,
  ABISELECT(-7056,-5268),
  (VTBL_ENTRY)&(_ZTI9S19645C11[0]),
  (VTBL_ENTRY)&_ZN8S19645C42v1Ev,
};
static  VTT_ENTRY vtt_S19645C1[] = {
  {&(_ZTV8S19645C1[10]),  10,95},
  {&(_tg__ZTV8S19645C5__8S19645C1[4]),  4,8},
  {&(_tg__ZTV8S19645C7__8S19645C5__8S19645C1[4]),  4,6},
  {&(_ZTV8S19645C1[23]),  23,95},
  {&(_ZTV8S19645C1[28]),  28,95},
  {&(_ZTV8S19645C1[39]),  39,95},
  {&(_ZTV8S19645C1[56]),  56,95},
  {&(_ZTV8S19645C1[61]),  61,95},
  {&(_ZTV8S19645C1[68]),  68,95},
  {&(_ZTV8S19645C1[87]),  87,95},
  {&(_ZTV8S19645C1[74]),  74,95},
  {&(_ZTV8S19645C1[80]),  80,95},
  {&(_ZTV8S19645C1[94]),  94,95},
  {&(_tg__ZTV9S19645C10__8S19645C1[8]),  8,11},
  {&(_tg__ZTV9S19645C11__9S19645C10__8S19645C1[14]),  14,17},
  {&(_tg__ZTV8S19645C79S19645C129S19645C11__9S19645C10__8S19645C1[2]),  2,4},
  {&(_tg__ZTV9S19645C139S19645C11__9S19645C10__8S19645C1[5]),  5,7},
  {&(_tg__ZTV8S19645C6__9S19645C10__8S19645C1[6]),  6,10},
  {&(_tg__ZTV8S19645C7__A1__9S19645C10__8S19645C1[4]),  4,6},
  {&(_tg__ZTV8S19645C59S19645C139S19645C11__9S19645C10__8S19645C1[4]),  4,8},
  {&(_tg__ZTV8S19645C48S19645C59S19645C139S19645C11__A6__9S19645C10__8S19645C1[2]),  2,3},
  {&(_tg__ZTV8S19645C4__A7__9S19645C10__8S19645C1[3]),  3,4},
  {&(_tg__ZTV9S19645C11__8S19645C1[6]),  6,9},
  {&(_tg__ZTV9S19645C139S19645C11__8S19645C1[5]),  5,7},
  {&(_tg__ZTV8S19645C59S19645C139S19645C11__A1__8S19645C1[4]),  4,8},
  {&(_tg__ZTV8S19645C7__8S19645C59S19645C139S19645C11__A1__8S19645C1[4]),  4,6},
  {&(_tg__ZTV8S19645C6__9S19645C139S19645C11__8S19645C1[6]),  6,10},
  {&(_tg__ZTV8S19645C7__9S19645C139S19645C11__8S19645C1[4]),  4,6},
  {&(_tg__ZTV8S19645C5__9S19645C139S19645C11__8S19645C1[4]),  4,8},
  {&(_tg__ZTV9S19645C13__9S19645C11__8S19645C1[5]),  5,7},
  {&(_tg__ZTV8S19645C6__9S19645C11__8S19645C1[6]),  6,10},
  {&(_tg__ZTV8S19645C7__A1__9S19645C11__8S19645C1[4]),  4,6},
  {&(_tg__ZTV8S19645C59S19645C13__9S19645C11__8S19645C1[4]),  4,8},
  {&(_tg__ZTV8S19645C4__A7__9S19645C11__8S19645C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19645C1[];
extern  VTBL_ENTRY _ZTV8S19645C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19645C1[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19645C1D0Ev,_ZTv0_n36_N8S19645C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4128_N8S19645C1D0Ev,_ZThn3028_N8S19645C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19645C1D1Ev,_ZTv0_n36_N8S19645C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4128_N8S19645C1D1Ev,_ZThn3028_N8S19645C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19645C1 = {  "S19645C1", // class name
  bases_S19645C1, 28,
  &(vtc_S19645C1[0]), // expected_vtbl_contents
  &(vtt_S19645C1[0]), // expected_vtt_contents
  ABISELECT(14336,10692), // object size
  NSPAIRA(_ZTI8S19645C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19645C1),95, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19645C1),34, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19148C4  : virtual S7394C3 {
  __tsi64 s19148c4f0[4];
  ::S7394C3 s19148c4f1;
  int s19148c4f2;
  ::S7394C3 s19148c4f3;
  __tsi64 s19148c4f4;
  void *s19148c4f5;
  ::S7394C3 s19148c4f6;
  void *s19148c4f7[4];
  ~S19148C4(); // tgen
  S19148C4(); // tgen
};
//SIG(-1 S19148C4) C1{ VBC2{ m FD[2] Fc[8]} FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]}


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

static void Test_S19148C4()
{
  extern Class_Descriptor cd_S19148C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S19148C4, buf);
    S19148C4 *dp, &lv = *(dp=new (buf) S19148C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S19148C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C4)");
    check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S19148C4");
    check_field_offset(lv, s19148c4f0, ABISELECT(8,4), "S19148C4.s19148c4f0");
    check_field_offset(lv, s19148c4f1, ABISELECT(48,36), "S19148C4.s19148c4f1");
    check_field_offset(lv, s19148c4f2, ABISELECT(96,68), "S19148C4.s19148c4f2");
    check_field_offset(lv, s19148c4f3, ABISELECT(112,72), "S19148C4.s19148c4f3");
    check_field_offset(lv, s19148c4f4, ABISELECT(160,104), "S19148C4.s19148c4f4");
    check_field_offset(lv, s19148c4f5, ABISELECT(168,112), "S19148C4.s19148c4f5");
    check_field_offset(lv, s19148c4f6, ABISELECT(176,116), "S19148C4.s19148c4f6");
    check_field_offset(lv, s19148c4f7, ABISELECT(224,148), "S19148C4.s19148c4f7");
    test_class_info(&lv, &cd_S19148C4);
    dp->~S19148C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C4(Test_S19148C4, "S19148C4", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN8S19148C4C1Ev();
extern void _ZN8S19148C4D1Ev();
Name_Map name_map_S19148C4[] = {
  NSPAIR(_ZN8S19148C4C1Ev),
  NSPAIR(_ZN8S19148C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
static Base_Class bases_S19148C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19148C4[];
static  VTBL_ENTRY vtc_S19148C4[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern VTBL_ENTRY _ZTV8S19148C4[];
static  VTT_ENTRY vtt_S19148C4[] = {
  {&(_ZTV8S19148C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
Class_Descriptor cd_S19148C4 = {  "S19148C4", // class name
  bases_S19148C4, 1,
  &(vtc_S19148C4[0]), // expected_vtbl_contents
  &(vtt_S19148C4[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI8S19148C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19148C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19148C4),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  S19148C5  {
  ::S19148C4 s19148c5f0;
  void *s19148c5f1;
  __tsi64 s19148c5f2;
  int s19148c5f3;
  void *s19148c5f4;
  ::S7394C6 s19148c5f5[8];
  char s19148c5f6;
  void *s19148c5f7;
  virtual  ~S19148C5(); // _ZN8S19148C5D1Ev
  virtual void  v4(); // _ZN8S19148C52v4Ev
  virtual void  v5(); // _ZN8S19148C52v5Ev
  S19148C5(); // tgen
};
//SIG(-1 S19148C5) C1{ vd v1 v2 FC2{ VBC3{ m FD[2] Fc[8]} FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} Fp FL Fi Fp FU4{ m FD FL FD FL Fi}[8] Fc Fp}


 S19148C5 ::~S19148C5(){ note_dtor("S19148C5", this);}
void  S19148C5 ::v4(){vfunc_called(this, "_ZN8S19148C52v4Ev");}
void  S19148C5 ::v5(){vfunc_called(this, "_ZN8S19148C52v5Ev");}
S19148C5 ::S19148C5(){ note_ctor("S19148C5", this);} // tgen

static void Test_S19148C5()
{
  extern Class_Descriptor cd_S19148C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,82)];
    init_test(&cd_S19148C5, buf);
    S19148C5 *dp, &lv = *(dp=new (buf) S19148C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,324), "sizeof(S19148C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C5)");
    check_field_offset(lv, s19148c5f0, ABISELECT(16,4), "S19148C5.s19148c5f0");
    check_field_offset(lv, s19148c5f1, ABISELECT(320,200), "S19148C5.s19148c5f1");
    check_field_offset(lv, s19148c5f2, ABISELECT(328,204), "S19148C5.s19148c5f2");
    check_field_offset(lv, s19148c5f3, ABISELECT(336,212), "S19148C5.s19148c5f3");
    check_field_offset(lv, s19148c5f4, ABISELECT(344,216), "S19148C5.s19148c5f4");
    check_field_offset(lv, s19148c5f5, ABISELECT(352,220), "S19148C5.s19148c5f5");
    check_field_offset(lv, s19148c5f6, ABISELECT(480,316), "S19148C5.s19148c5f6");
    check_field_offset(lv, s19148c5f7, ABISELECT(488,320), "S19148C5.s19148c5f7");
    test_class_info(&lv, &cd_S19148C5);
    dp->~S19148C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C5(Test_S19148C5, "S19148C5", ABISELECT(496,324));

#else // __cplusplus

extern void _ZN8S19148C5C1Ev();
extern void _ZN8S19148C5D1Ev();
Name_Map name_map_S19148C5[] = {
  NSPAIR(_ZN8S19148C5C1Ev),
  NSPAIR(_ZN8S19148C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19148C5[];
extern void _ZN8S19148C5D1Ev();
extern void _ZN8S19148C5D0Ev();
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY vtc_S19148C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C5[0]),
  (VTBL_ENTRY)&_ZN8S19148C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
Class_Descriptor cd_S19148C5 = {  "S19148C5", // class name
  0,0,//no base classes
  &(vtc_S19148C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,324), // object size
  NSPAIRA(_ZTI8S19148C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19148C5),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  S19148C2  : S7394C3 , S19148C4 , virtual S19148C5 {
  void *s19148c2f0[4];
  __tsi64 s19148c2f1;
  void *s19148c2f2[3];
  ::S7394C6 s19148c2f3;
  ::S19148C5 s19148c2f4;
  long double s19148c2f5;
  short  :0;
  ::S7394C3 s19148c2f7;
  long double s19148c2f8;
  void *s19148c2f9;
  virtual  ~S19148C2(); // _ZN8S19148C2D2Ev
  virtual void  v6(); // _ZN8S19148C22v6Ev
  S19148C2(); // tgen
};
//SIG(-1 S19148C2) C1{ BC2{ m FD[2] Fc[8]} BC3{ VBC2 FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]} VBC4{ vd v2 v3 FC3 Fp FL Fi Fp FU5{ m FD FL FD FL Fi}[8] Fc Fp} vd v1 Fp[4] FL Fp[3] FU5 FC4 FD Fs:0 FC2 FD Fp}


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

static void Test_S19148C2()
{
  extern Class_Descriptor cd_S19148C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,247)];
    init_test(&cd_S19148C2, buf);
    S19148C2 *dp, &lv = *(dp=new (buf) S19148C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,984), "sizeof(S19148C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C2)");
    /*is_ambiguous_... S19148C2::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S19148C2");
    check_base_class_offset(lv, (S7394C3*)(S19148C4*), ABISELECT(976,628), "S19148C2");
    check_base_class_offset(lv, (S19148C4*), 0, "S19148C2");
    check_base_class_offset(lv, (S19148C5*), ABISELECT(1024,660), "S19148C2");
    check_field_offset(lv, s19148c2f0, ABISELECT(304,196), "S19148C2.s19148c2f0");
    check_field_offset(lv, s19148c2f1, ABISELECT(336,212), "S19148C2.s19148c2f1");
    check_field_offset(lv, s19148c2f2, ABISELECT(344,220), "S19148C2.s19148c2f2");
    check_field_offset(lv, s19148c2f3, ABISELECT(368,232), "S19148C2.s19148c2f3");
    check_field_offset(lv, s19148c2f4, ABISELECT(384,244), "S19148C2.s19148c2f4");
    check_field_offset(lv, s19148c2f5, ABISELECT(880,568), "S19148C2.s19148c2f5");
    check_field_offset(lv, s19148c2f7, ABISELECT(896,580), "S19148C2.s19148c2f7");
    check_field_offset(lv, s19148c2f8, ABISELECT(944,612), "S19148C2.s19148c2f8");
    check_field_offset(lv, s19148c2f9, ABISELECT(960,624), "S19148C2.s19148c2f9");
    test_class_info(&lv, &cd_S19148C2);
    dp->~S19148C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C2(Test_S19148C2, "S19148C2", ABISELECT(1520,984));

#else // __cplusplus

extern void _ZN8S19148C2C1Ev();
extern void _ZN8S19148C2D2Ev();
Name_Map name_map_S19148C2[] = {
  NSPAIR(_ZN8S19148C2C1Ev),
  NSPAIR(_ZN8S19148C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
static Base_Class bases_S19148C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C3,    ABISELECT(976,628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19148C4,    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_S19148C5,    ABISELECT(1024,660), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19148C2[];
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY vtc_S19148C2[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S19148C2[];
static  VTBL_ENTRY _tg__ZTV8S19148C4__8S19148C2[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
static  VTT_ENTRY vtt_S19148C2[] = {
  {&(_ZTV8S19148C2[4]),  4,16},
  {&(_tg__ZTV8S19148C4__8S19148C2[3]),  3,3},
  {&(_ZTV8S19148C2[12]),  12,16},
};
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19148C2 = {  "S19148C2", // class name
  bases_S19148C2, 4,
  &(vtc_S19148C2[0]), // expected_vtbl_contents
  &(vtt_S19148C2[0]), // expected_vtt_contents
  ABISELECT(1520,984), // object size
  NSPAIRA(_ZTI8S19148C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19148C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19148C2),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19148C8  : virtual S19148C2 , S7394C9 {
  long double s19148c8f0;
  __tsi64 s19148c8f1;
  __tsi64 s19148c8f2:13;
  virtual  ~S19148C8(); // _ZN8S19148C8D2Ev
  S19148C8(); // tgen
};
//SIG(-1 S19148C8) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v1 v2 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} BC7{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13}


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

static void Test_S19148C8()
{
  extern Class_Descriptor cd_S19148C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,268)];
    init_test(&cd_S19148C8, buf);
    S19148C8 *dp, &lv = *(dp=new (buf) S19148C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,1068), "sizeof(S19148C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C8)");
    /*is_ambiguous_... S19148C2::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C2*), ABISELECT(368,248), "S19148C8");
    check_base_class_offset(lv, (S7394C3*)(S19148C4*)(S19148C2*), ABISELECT(1088,712), "S19148C8");
    check_base_class_offset(lv, (S19148C4*)(S19148C2*), ABISELECT(112,84), "S19148C8");
    check_base_class_offset(lv, (S19148C5*)(S19148C2*), ABISELECT(1136,744), "S19148C8");
    check_base_class_offset(lv, (S19148C2*), ABISELECT(112,84), "S19148C8");
    check_base_class_offset(lv, (S7394C9*), ABISELECT(8,4), "S19148C8");
    check_field_offset(lv, s19148c8f0, ABISELECT(80,60), "S19148C8.s19148c8f0");
    check_field_offset(lv, s19148c8f1, ABISELECT(96,72), "S19148C8.s19148c8f1");
    set_bf_and_test(lv, s19148c8f2, ABISELECT(104,80), 0, 13, 1, "S19148C8");
    set_bf_and_test(lv, s19148c8f2, ABISELECT(104,80), 0, 13, hide_sll(1LL<<12), "S19148C8");
    test_class_info(&lv, &cd_S19148C8);
    dp->~S19148C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C8(Test_S19148C8, "S19148C8", ABISELECT(1632,1068));

#else // __cplusplus

extern void _ZN8S19148C8C1Ev();
extern void _ZN8S19148C8D2Ev();
Name_Map name_map_S19148C8[] = {
  NSPAIR(_ZN8S19148C8C1Ev),
  NSPAIR(_ZN8S19148C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
extern Class_Descriptor cd_S19148C2;
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
static Base_Class bases_S19148C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(1088,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19148C4,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19148C5,    ABISELECT(1136,744), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19148C2,    ABISELECT(112,84), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19148C8[];
extern void _ZN8S19148C8D1Ev();
extern void _ZN8S19148C8D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19148C8D1Ev,_ZTv0_n20_N8S19148C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S19148C8D1Ev,_ZThn84_N8S19148C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19148C8D0Ev,_ZTv0_n20_N8S19148C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S19148C8D0Ev,_ZThn84_N8S19148C8D0Ev)() __attribute__((weak));
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S19148C8D1Ev,_ZTv0_n12_N8S19148C8D1Ev)();
extern void ABISELECT(_ZThn1136_N8S19148C8D1Ev,_ZThn744_N8S19148C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C8D0Ev,_ZTv0_n12_N8S19148C8D0Ev)();
extern void ABISELECT(_ZThn1136_N8S19148C8D0Ev,_ZThn744_N8S19148C8D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY vtc_S19148C8[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&_ZN8S19148C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C8D0Ev,
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C8D1Ev,_ZTv0_n20_N8S19148C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C8D0Ev,_ZTv0_n20_N8S19148C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C8D1Ev,_ZTv0_n12_N8S19148C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C8D0Ev,_ZTv0_n12_N8S19148C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S19148C8[];
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__8S19148C8[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C48S19148C2__8S19148C8[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C2__8S19148C8[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
static  VTT_ENTRY vtt_S19148C8[] = {
  {&(_ZTV8S19148C8[5]),  5,25},
  {&(_ZTV8S19148C8[13]),  13,25},
  {&(_ZTV8S19148C8[21]),  21,25},
  {&(_tg__ZTV8S19148C2__8S19148C8[4]),  4,7},
  {&(_tg__ZTV8S19148C48S19148C2__8S19148C8[3]),  3,3},
  {&(_tg__ZTV8S19148C5__8S19148C2__8S19148C8[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19148C8[];
extern  VTBL_ENTRY _ZTV8S19148C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C8[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C8D0Ev,_ZTv0_n12_N8S19148C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S19148C8D0Ev,_ZThn744_N8S19148C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C8D1Ev,_ZTv0_n12_N8S19148C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S19148C8D1Ev,_ZThn744_N8S19148C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19148C8D0Ev,_ZTv0_n20_N8S19148C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19148C8D0Ev,_ZThn84_N8S19148C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19148C8D1Ev,_ZTv0_n20_N8S19148C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19148C8D1Ev,_ZThn84_N8S19148C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19148C8 = {  "S19148C8", // class name
  bases_S19148C8, 6,
  &(vtc_S19148C8[0]), // expected_vtbl_contents
  &(vtt_S19148C8[0]), // expected_vtt_contents
  ABISELECT(1632,1068), // object size
  NSPAIRA(_ZTI8S19148C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19148C8),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19148C8),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19148C10  : virtual S19148C2 {
  short s19148c10f0;
  __tsi64 s19148c10f1;
  ::S19148C5 s19148c10f2;
  ::S7394C3 s19148c10f3[5];
  ::S19148C2 s19148c10f4[8];
  ::S19148C4 s19148c10f5[5];
  ::S19148C4 s19148c10f6;
  void *s19148c10f7;
  __tsi64 s19148c10f8;
  __tsi64 s19148c10f9;
  int s19148c10f10[2];
  virtual  ~S19148C10(); // _ZN9S19148C10D2Ev
  virtual void  v7(); // _ZN9S19148C102v7Ev
  S19148C10(); // tgen
};
//SIG(-1 S19148C10) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v2 v3 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} vd v1 Fs FL FC5 FC3[5] FC2[8] FC4[5] FC4 Fp FL FL Fi[2]}


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

static void Test_S19148C10()
{
  extern Class_Descriptor cd_S19148C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1020,2641)];
    init_test(&cd_S19148C10, buf);
    S19148C10 *dp, &lv = *(dp=new (buf) S19148C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16304,10560), "sizeof(S19148C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C10)");
    /*is_ambiguous_... S19148C2::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C2*), ABISELECT(15040,9740), "S19148C10");
    check_base_class_offset(lv, (S7394C3*)(S19148C4*)(S19148C2*), ABISELECT(15760,10204), "S19148C10");
    check_base_class_offset(lv, (S19148C4*)(S19148C2*), ABISELECT(14784,9576), "S19148C10");
    check_base_class_offset(lv, (S19148C5*)(S19148C2*), ABISELECT(15808,10236), "S19148C10");
    check_base_class_offset(lv, (S19148C2*), ABISELECT(14784,9576), "S19148C10");
    check_field_offset(lv, s19148c10f0, ABISELECT(8,4), "S19148C10.s19148c10f0");
    check_field_offset(lv, s19148c10f1, ABISELECT(16,8), "S19148C10.s19148c10f1");
    check_field_offset(lv, s19148c10f2, ABISELECT(32,16), "S19148C10.s19148c10f2");
    check_field_offset(lv, s19148c10f3, ABISELECT(528,340), "S19148C10.s19148c10f3");
    check_field_offset(lv, s19148c10f4, ABISELECT(768,500), "S19148C10.s19148c10f4");
    check_field_offset(lv, s19148c10f5, ABISELECT(12928,8372), "S19148C10.s19148c10f5");
    check_field_offset(lv, s19148c10f6, ABISELECT(14448,9352), "S19148C10.s19148c10f6");
    check_field_offset(lv, s19148c10f7, ABISELECT(14752,9548), "S19148C10.s19148c10f7");
    check_field_offset(lv, s19148c10f8, ABISELECT(14760,9552), "S19148C10.s19148c10f8");
    check_field_offset(lv, s19148c10f9, ABISELECT(14768,9560), "S19148C10.s19148c10f9");
    check_field_offset(lv, s19148c10f10, ABISELECT(14776,9568), "S19148C10.s19148c10f10");
    test_class_info(&lv, &cd_S19148C10);
    dp->~S19148C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C10(Test_S19148C10, "S19148C10", ABISELECT(16304,10560));

#else // __cplusplus

extern void _ZN9S19148C10C1Ev();
extern void _ZN9S19148C10D2Ev();
Name_Map name_map_S19148C10[] = {
  NSPAIR(_ZN9S19148C10C1Ev),
  NSPAIR(_ZN9S19148C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
extern Class_Descriptor cd_S19148C2;
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
static Base_Class bases_S19148C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(15040,9740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(15760,10204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19148C4,    ABISELECT(14784,9576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19148C5,    ABISELECT(15808,10236), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19148C2,    ABISELECT(14784,9576), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19148C10[];
extern void _ZN9S19148C10D1Ev();
extern void _ZN9S19148C10D0Ev();
extern void _ZN9S19148C102v7Ev();
extern void ABISELECT(_ZTv0_n40_N9S19148C10D1Ev,_ZTv0_n20_N9S19148C10D1Ev)();
extern void ABISELECT(_ZThn14784_N9S19148C10D1Ev,_ZThn9576_N9S19148C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19148C10D0Ev,_ZTv0_n20_N9S19148C10D0Ev)();
extern void ABISELECT(_ZThn14784_N9S19148C10D0Ev,_ZThn9576_N9S19148C10D0Ev)() __attribute__((weak));
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n24_N9S19148C10D1Ev,_ZTv0_n12_N9S19148C10D1Ev)();
extern void ABISELECT(_ZThn15808_N9S19148C10D1Ev,_ZThn10236_N9S19148C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19148C10D0Ev,_ZTv0_n12_N9S19148C10D0Ev)();
extern void ABISELECT(_ZThn15808_N9S19148C10D0Ev,_ZThn10236_N9S19148C10D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY vtc_S19148C10[] = {
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  0,
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&_ZN9S19148C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19148C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19148C102v7Ev,
  0,
  ABISELECT(-14784,-9576),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-14784,-9576),
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19148C10D1Ev,_ZTv0_n20_N9S19148C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19148C10D0Ev,_ZTv0_n20_N9S19148C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  0,
  0,
  ABISELECT(-15808,-10236),
  ABISELECT(-15808,-10236),
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C10D1Ev,_ZTv0_n12_N9S19148C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C10D0Ev,_ZTv0_n12_N9S19148C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern VTBL_ENTRY _ZTV9S19148C10[];
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__9S19148C10[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C48S19148C2__9S19148C10[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C2__9S19148C10[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
static  VTT_ENTRY vtt_S19148C10[] = {
  {&(_ZTV9S19148C10[5]),  5,26},
  {&(_ZTV9S19148C10[14]),  14,26},
  {&(_ZTV9S19148C10[22]),  22,26},
  {&(_tg__ZTV8S19148C2__9S19148C10[4]),  4,7},
  {&(_tg__ZTV8S19148C48S19148C2__9S19148C10[3]),  3,3},
  {&(_tg__ZTV8S19148C5__8S19148C2__9S19148C10[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19148C10[];
extern  VTBL_ENTRY _ZTV9S19148C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19148C10[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19148C10D0Ev,_ZTv0_n12_N9S19148C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S19148C10D0Ev,_ZThn10236_N9S19148C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19148C10D1Ev,_ZTv0_n12_N9S19148C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S19148C10D1Ev,_ZThn10236_N9S19148C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19148C10D0Ev,_ZTv0_n20_N9S19148C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N9S19148C10D0Ev,_ZThn9576_N9S19148C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19148C10D1Ev,_ZTv0_n20_N9S19148C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N9S19148C10D1Ev,_ZThn9576_N9S19148C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19148C10 = {  "S19148C10", // class name
  bases_S19148C10, 5,
  &(vtc_S19148C10[0]), // expected_vtbl_contents
  &(vtt_S19148C10[0]), // expected_vtt_contents
  ABISELECT(16304,10560), // object size
  NSPAIRA(_ZTI9S19148C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19148C10),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19148C10),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19148C7  : virtual S19148C8 , S19148C2 , virtual S19148C10 , virtual S19148C4 {
  __tsi64 s19148c7f0;
  long double s19148c7f1;
  void *s19148c7f2[6];
  virtual  ~S19148C7(); // _ZN8S19148C7D2Ev
  S19148C7(); // tgen
};
//SIG(-1 S19148C7) C1{ VBC2{ VBC3{ BC4{ m FD[2] Fc[8]} BC5{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC6{ vd v1 v2 FC5 Fp FL Fi Fp FU7{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU7 FC6 FD Fs:0 FC4 FD Fp} BC8{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} BC3 VBC9{ VBC3 vd v4 Fs FL FC6 FC4[5] FC3[8] FC5[5] FC5 Fp FL FL Fi[2]} VBC5 vd FL FD Fp[6]}


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

static void Test_S19148C7()
{
  extern Class_Descriptor cd_S19148C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1108,2871)];
    init_test(&cd_S19148C7, buf);
    S19148C7 *dp, &lv = *(dp=new (buf) S19148C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17712,11480), "sizeof(S19148C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C7)");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C2*), ABISELECT(1408,920), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C4*)(S19148C2*), ABISELECT(2128,1384), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C4*)(S19148C2*), ABISELECT(2128,1384), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C4 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C4*), ABISELECT(2128,1384), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C4*)(S19148C2*), ABISELECT(1152,756), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C5*)(S19148C2*), ABISELECT(2176,1416), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C5*)(S19148C2*), ABISELECT(2176,1416), "S19148C7");
    check_base_class_offset(lv, (S19148C2*)(S19148C8*), ABISELECT(1152,756), "S19148C7");
    check_base_class_offset(lv, (S19148C2*)(S19148C10*), ABISELECT(1152,756), "S19148C7");
    check_base_class_offset(lv, (S7394C9*)(S19148C8*), ABISELECT(1048,676), "S19148C7");
    check_base_class_offset(lv, (S19148C8*), ABISELECT(1040,672), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C2*), ABISELECT(256,164), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C4*)(S19148C2*), 0, "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C2*), 0, "S19148C7");
    check_base_class_offset(lv, (S19148C10*), ABISELECT(2672,1740), "S19148C7");
    /*is_ambiguous_... S19148C7::S19148C4 */ AMB_check_base_class_offset(lv, (S19148C4*), ABISELECT(17456,11316), "S19148C7");
    check_field_offset(lv, s19148c7f0, ABISELECT(968,628), "S19148C7.s19148c7f0");
    check_field_offset(lv, s19148c7f1, ABISELECT(976,636), "S19148C7.s19148c7f1");
    check_field_offset(lv, s19148c7f2, ABISELECT(992,648), "S19148C7.s19148c7f2");
    test_class_info(&lv, &cd_S19148C7);
    dp->~S19148C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C7(Test_S19148C7, "S19148C7", ABISELECT(17712,11480));

#else // __cplusplus

extern void _ZN8S19148C7C1Ev();
extern void _ZN8S19148C7D2Ev();
Name_Map name_map_S19148C7[] = {
  NSPAIR(_ZN8S19148C7C1Ev),
  NSPAIR(_ZN8S19148C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
extern Class_Descriptor cd_S19148C2;
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S19148C8;
extern VTBL_ENTRY _ZTI8S19148C8[];
extern  VTBL_ENTRY _ZTV8S19148C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C8[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C2;
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
extern Class_Descriptor cd_S19148C10;
extern VTBL_ENTRY _ZTI9S19148C10[];
extern  VTBL_ENTRY _ZTV9S19148C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19148C10[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
static Base_Class bases_S19148C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(1408,920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(2128,1384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19148C4,    ABISELECT(1152,756), //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
    4, //immediately_derived
  0, 0},
  {&cd_S19148C5,    ABISELECT(2176,1416), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19148C2,    ABISELECT(1152,756), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(1048,676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19148C8,    ABISELECT(1040,672), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C3,    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
    9, //immediately_derived
  0, 0},
  {&cd_S19148C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19148C2,    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_S19148C10,    ABISELECT(2672,1740), //bcp->offset
    37, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19148C4,    ABISELECT(17456,11316), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19148C7[];
extern void _ZN8S19148C7D1Ev();
extern void _ZN8S19148C7D0Ev();
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev)();
extern void ABISELECT(_ZThn1040_N8S19148C7D1Ev,_ZThn672_N8S19148C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev)();
extern void ABISELECT(_ZThn1040_N8S19148C7D0Ev,_ZThn672_N8S19148C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19148C7D1Ev,_ZTv0_n20_N8S19148C7D1Ev)();
extern void ABISELECT(_ZThn1152_N8S19148C7D1Ev,_ZThn756_N8S19148C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19148C7D0Ev,_ZTv0_n20_N8S19148C7D0Ev)();
extern void ABISELECT(_ZThn1152_N8S19148C7D0Ev,_ZThn756_N8S19148C7D0Ev)() __attribute__((weak));
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S19148C7D1Ev,_ZTv0_n12_N8S19148C7D1Ev)();
extern void ABISELECT(_ZThn2176_N8S19148C7D1Ev,_ZThn1416_N8S19148C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C7D0Ev,_ZTv0_n12_N8S19148C7D0Ev)();
extern void ABISELECT(_ZThn2176_N8S19148C7D0Ev,_ZThn1416_N8S19148C7D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
extern void ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19148C7D1Ev,_ZThn1740_N8S19148C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19148C7D0Ev,_ZThn1740_N8S19148C7D0Ev)() __attribute__((weak));
extern void _ZN9S19148C102v7Ev();
static  VTBL_ENTRY vtc_S19148C7[] = {
  ABISELECT(17456,11316),
  ABISELECT(2672,1740),
  ABISELECT(1152,756),
  ABISELECT(1040,672),
  ABISELECT(2176,1416),
  ABISELECT(2128,1384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&_ZN8S19148C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  ABISELECT(-1040,-672),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev),
  0,
  ABISELECT(-1152,-756),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-1152,-756),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C7D1Ev,_ZTv0_n20_N8S19148C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C7D0Ev,_ZTv0_n20_N8S19148C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  0,
  0,
  ABISELECT(-2176,-1416),
  ABISELECT(-2176,-1416),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C7D1Ev,_ZTv0_n12_N8S19148C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C7D0Ev,_ZTv0_n12_N8S19148C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
  0,
  ABISELECT(-2672,-1740),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  ABISELECT(-2672,-1740),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19148C102v7Ev,
  ABISELECT(-15328,-9932),
  ABISELECT(-17456,-11316),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
};
extern VTBL_ENTRY _ZTV8S19148C7[];
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__A__8S19148C7[] = {
  ABISELECT(2176,1416),
  ABISELECT(2128,1384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C48S19148C2__A1__8S19148C7[] = {
  ABISELECT(2128,1384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZThn2176_N8S19148C2D1Ev,_ZThn1416_N8S19148C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void ABISELECT(_ZThn2176_N8S19148C2D0Ev,_ZThn1416_N8S19148C2D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C2__A__8S19148C7[] = {
  0,
  0,
  ABISELECT(-2176,-1416),
  ABISELECT(-2176,-1416),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern void _ZN8S19148C8D1Ev();
extern void _ZN8S19148C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C8__8S19148C7[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&_ZN8S19148C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19148C8D1Ev,_ZTv0_n20_N8S19148C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S19148C8D1Ev,_ZThn84_N8S19148C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19148C8D0Ev,_ZTv0_n20_N8S19148C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S19148C8D0Ev,_ZThn84_N8S19148C8D0Ev)() __attribute__((weak));
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__8S19148C8__8S19148C7[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C8D1Ev,_ZTv0_n20_N8S19148C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C8D0Ev,_ZTv0_n20_N8S19148C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19148C8D1Ev,_ZTv0_n12_N8S19148C8D1Ev)();
extern void ABISELECT(_ZThn1136_N8S19148C8D1Ev,_ZThn744_N8S19148C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C8D0Ev,_ZTv0_n12_N8S19148C8D0Ev)();
extern void ABISELECT(_ZThn1136_N8S19148C8D0Ev,_ZThn744_N8S19148C8D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C8__8S19148C7[] = {
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C8D1Ev,_ZTv0_n12_N8S19148C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C8D0Ev,_ZTv0_n12_N8S19148C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__8S19148C7[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C48S19148C2__8S19148C7[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C2__8S19148C7[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern void _ZN9S19148C10D1Ev();
extern void _ZN9S19148C10D0Ev();
extern void _ZN9S19148C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19148C10__8S19148C7[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-1520,-984),
  0,
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&_ZN9S19148C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19148C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19148C102v7Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19148C10D1Ev,_ZTv0_n20_N9S19148C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19148C10D0Ev,_ZTv0_n20_N9S19148C10D0Ev)();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__9S19148C10__8S19148C7[] = {
  0,
  ABISELECT(1520,984),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(1520,984),
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19148C10D1Ev,_ZTv0_n20_N9S19148C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19148C10D0Ev,_ZTv0_n20_N9S19148C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19148C10D1Ev,_ZTv0_n12_N9S19148C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19148C10D0Ev,_ZTv0_n12_N9S19148C10D0Ev)();
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__9S19148C10__8S19148C7[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C10D1Ev,_ZTv0_n12_N9S19148C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C10D0Ev,_ZTv0_n12_N9S19148C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C4__A2__8S19148C7[] = {
  ABISELECT(-15328,-9932),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
static  VTT_ENTRY vtt_S19148C7[] = {
  {&(_ZTV8S19148C7[8]),  8,50},
  {&(_tg__ZTV8S19148C2__A__8S19148C7[4]),  4,7},
  {&(_tg__ZTV8S19148C48S19148C2__A1__8S19148C7[3]),  3,3},
  {&(_tg__ZTV8S19148C5__8S19148C2__A__8S19148C7[5]),  5,9},
  {&(_ZTV8S19148C7[17]),  17,50},
  {&(_ZTV8S19148C7[25]),  25,50},
  {&(_ZTV8S19148C7[33]),  33,50},
  {&(_ZTV8S19148C7[44]),  44,50},
  {&(_ZTV8S19148C7[50]),  50,50},
  {&(_tg__ZTV8S19148C8__8S19148C7[5]),  5,7},
  {&(_tg__ZTV8S19148C2__8S19148C8__8S19148C7[6]),  6,9},
  {&(_tg__ZTV8S19148C5__8S19148C8__8S19148C7[5]),  5,9},
  {&(_tg__ZTV8S19148C2__8S19148C7[4]),  4,7},
  {&(_tg__ZTV8S19148C48S19148C2__8S19148C7[3]),  3,3},
  {&(_tg__ZTV8S19148C5__8S19148C2__8S19148C7[5]),  5,9},
  {&(_tg__ZTV9S19148C10__8S19148C7[5]),  5,8},
  {&(_tg__ZTV8S19148C2__9S19148C10__8S19148C7[6]),  6,9},
  {&(_tg__ZTV8S19148C5__9S19148C10__8S19148C7[5]),  5,9},
  {&(_tg__ZTV8S19148C4__A2__8S19148C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19148C7[];
extern  VTBL_ENTRY _ZTV8S19148C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C7[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C8D0Ev,_ZTv0_n12_N8S19148C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S19148C8D0Ev,_ZThn744_N8S19148C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C8D1Ev,_ZTv0_n12_N8S19148C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S19148C8D1Ev,_ZThn744_N8S19148C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19148C8D0Ev,_ZTv0_n20_N8S19148C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19148C8D0Ev,_ZThn84_N8S19148C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19148C8D1Ev,_ZTv0_n20_N8S19148C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19148C8D1Ev,_ZThn84_N8S19148C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S19148C2D0Ev,_ZThn1416_N8S19148C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S19148C2D1Ev,_ZThn1416_N8S19148C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C7D0Ev,_ZTv0_n12_N8S19148C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S19148C7D0Ev,_ZThn1416_N8S19148C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C7D1Ev,_ZTv0_n12_N8S19148C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2176_N8S19148C7D1Ev,_ZThn1416_N8S19148C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19148C7D0Ev,_ZTv0_n20_N8S19148C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N8S19148C7D0Ev,_ZThn756_N8S19148C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19148C7D1Ev,_ZTv0_n20_N8S19148C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N8S19148C7D1Ev,_ZThn756_N8S19148C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19148C7D0Ev,_ZThn1740_N8S19148C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S19148C7D0Ev,_ZThn672_N8S19148C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19148C7D1Ev,_ZThn1740_N8S19148C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S19148C7D1Ev,_ZThn672_N8S19148C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19148C7 = {  "S19148C7", // class name
  bases_S19148C7, 12,
  &(vtc_S19148C7[0]), // expected_vtbl_contents
  &(vtt_S19148C7[0]), // expected_vtt_contents
  ABISELECT(17712,11480), // object size
  NSPAIRA(_ZTI8S19148C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19148C7),50, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19148C7),19, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19148C12  : S19148C2 {
  ::S19148C4 s19148c12f0;
  void *s19148c12f1[5];
  int s19148c12f2;
  __tsi64 s19148c12f3[9];
  ::S468C20_nt s19148c12f4;
  __tsi64 s19148c12f5[6];
  char  :0;
  __tsi64 s19148c12f7;
  long double s19148c12f8;
  ::S7394C6 s19148c12f9;
  ::S7394C3 s19148c12f10;
  int s19148c12f11;
  int s19148c12f12;
  long s19148c12f13;
  virtual  ~S19148C12(); // _ZN9S19148C12D2Ev
  S19148C12(); // tgen
};
//SIG(-1 S19148C12) C1{ BC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v1 v2 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} vd FC4 Fp[5] Fi FL[9] FC7{} FL[6] Fc:0 FL FD FU6 FC3 Fi Fi Fl}


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

static void Test_S19148C12()
{
  extern Class_Descriptor cd_S19148C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,352)];
    init_test(&cd_S19148C12, buf);
    S19148C12 *dp, &lv = *(dp=new (buf) S19148C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1404), "sizeof(S19148C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C12)");
    /*is_ambiguous_... S19148C2::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C2*), ABISELECT(256,164), "S19148C12");
    check_base_class_offset(lv, (S7394C3*)(S19148C4*)(S19148C2*), ABISELECT(1568,1048), "S19148C12");
    check_base_class_offset(lv, (S19148C4*)(S19148C2*), 0, "S19148C12");
    check_base_class_offset(lv, (S19148C5*)(S19148C2*), ABISELECT(1616,1080), "S19148C12");
    check_base_class_offset(lv, (S19148C2*), 0, "S19148C12");
    check_field_offset(lv, s19148c12f0, ABISELECT(976,628), "S19148C12.s19148c12f0");
    check_field_offset(lv, s19148c12f1, ABISELECT(1280,824), "S19148C12.s19148c12f1");
    check_field_offset(lv, s19148c12f2, ABISELECT(1320,844), "S19148C12.s19148c12f2");
    check_field_offset(lv, s19148c12f3, ABISELECT(1328,848), "S19148C12.s19148c12f3");
    check_field_offset(lv, s19148c12f4, ABISELECT(1400,920), "S19148C12.s19148c12f4");
    check_field_offset(lv, s19148c12f5, ABISELECT(1408,924), "S19148C12.s19148c12f5");
    check_field_offset(lv, s19148c12f7, ABISELECT(1456,972), "S19148C12.s19148c12f7");
    check_field_offset(lv, s19148c12f8, ABISELECT(1472,980), "S19148C12.s19148c12f8");
    check_field_offset(lv, s19148c12f9, ABISELECT(1488,992), "S19148C12.s19148c12f9");
    check_field_offset(lv, s19148c12f10, ABISELECT(1504,1004), "S19148C12.s19148c12f10");
    check_field_offset(lv, s19148c12f11, ABISELECT(1552,1036), "S19148C12.s19148c12f11");
    check_field_offset(lv, s19148c12f12, ABISELECT(1556,1040), "S19148C12.s19148c12f12");
    check_field_offset(lv, s19148c12f13, ABISELECT(1560,1044), "S19148C12.s19148c12f13");
    test_class_info(&lv, &cd_S19148C12);
    dp->~S19148C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C12(Test_S19148C12, "S19148C12", ABISELECT(2112,1404));

#else // __cplusplus

extern void _ZN9S19148C12C1Ev();
extern void _ZN9S19148C12D2Ev();
Name_Map name_map_S19148C12[] = {
  NSPAIR(_ZN9S19148C12C1Ev),
  NSPAIR(_ZN9S19148C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
extern Class_Descriptor cd_S19148C2;
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
static Base_Class bases_S19148C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(1568,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19148C4,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19148C5,    ABISELECT(1616,1080), //bcp->offset
    7, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19148C2,    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 _ZTI9S19148C12[];
extern void _ZN9S19148C12D1Ev();
extern void _ZN9S19148C12D0Ev();
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n24_N9S19148C12D1Ev,_ZTv0_n12_N9S19148C12D1Ev)();
extern void ABISELECT(_ZThn1616_N9S19148C12D1Ev,_ZThn1080_N9S19148C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19148C12D0Ev,_ZTv0_n12_N9S19148C12D0Ev)();
extern void ABISELECT(_ZThn1616_N9S19148C12D0Ev,_ZThn1080_N9S19148C12D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY vtc_S19148C12[] = {
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI9S19148C12[0]),
  (VTBL_ENTRY)&_ZN9S19148C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19148C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  0,
  0,
  ABISELECT(-1616,-1080),
  ABISELECT(-1616,-1080),
  (VTBL_ENTRY)&(_ZTI9S19148C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C12D1Ev,_ZTv0_n12_N9S19148C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C12D0Ev,_ZTv0_n12_N9S19148C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern VTBL_ENTRY _ZTV9S19148C12[];
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__9S19148C12[] = {
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C48S19148C2__9S19148C12[] = {
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZThn1616_N8S19148C2D1Ev,_ZThn1080_N8S19148C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void ABISELECT(_ZThn1616_N8S19148C2D0Ev,_ZThn1080_N8S19148C2D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C2__9S19148C12[] = {
  0,
  0,
  ABISELECT(-1616,-1080),
  ABISELECT(-1616,-1080),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
static  VTT_ENTRY vtt_S19148C12[] = {
  {&(_ZTV9S19148C12[4]),  4,16},
  {&(_tg__ZTV8S19148C2__9S19148C12[4]),  4,7},
  {&(_tg__ZTV8S19148C48S19148C2__9S19148C12[3]),  3,3},
  {&(_tg__ZTV8S19148C5__8S19148C2__9S19148C12[5]),  5,9},
  {&(_ZTV9S19148C12[12]),  12,16},
};
extern VTBL_ENTRY _ZTI9S19148C12[];
extern  VTBL_ENTRY _ZTV9S19148C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19148C12[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N8S19148C2D0Ev,_ZThn1080_N8S19148C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N8S19148C2D1Ev,_ZThn1080_N8S19148C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19148C12D0Ev,_ZTv0_n12_N9S19148C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N9S19148C12D0Ev,_ZThn1080_N9S19148C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19148C12D1Ev,_ZTv0_n12_N9S19148C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N9S19148C12D1Ev,_ZThn1080_N9S19148C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19148C12 = {  "S19148C12", // class name
  bases_S19148C12, 5,
  &(vtc_S19148C12[0]), // expected_vtbl_contents
  &(vtt_S19148C12[0]), // expected_vtt_contents
  ABISELECT(2112,1404), // object size
  NSPAIRA(_ZTI9S19148C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19148C12),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19148C12),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19148C11  : virtual S19148C12 , S19148C5 {
  void *s19148c11f0;
  ::S7394C14 s19148c11f1;
  void *s19148c11f2;
  __tsi64 s19148c11f3:64;
  int s19148c11f4;
  void *s19148c11f5;
  virtual  ~S19148C11(); // _ZN9S19148C11D2Ev
  S19148C11(); // tgen
};
//SIG(-1 S19148C11) C1{ VBC2{ BC3{ BC4{ m FD[2] Fc[8]} BC5{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC6{ vd v1 v2 FC5 Fp FL Fi Fp FU7{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU7 FC6 FD Fs:0 FC4 FD Fp} vd FC5 Fp[5] Fi FL[9] FC8{} FL[6] Fc:0 FL FD FU7 FC4 Fi Fi Fl} BC6 vd Fp FC9{ VBC10{ VBC11{ BC4 BC12{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC13{ vd v5 v6 FC12 Fp FL Fi Fp FU7[8] Fc Fp} vd v7 Fp[4] FL Fp[3] FU7 FC13 FD Fs:0 FC4 FD Fp} BC14{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} vd v4 FC13 Fi Fi FU7} Fp FL:64 Fi Fp}


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

static void Test_S19148C11()
{
  extern Class_Descriptor cd_S19148C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(303,793)];
    init_test(&cd_S19148C11, buf);
    S19148C11 *dp, &lv = *(dp=new (buf) S19148C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4832,3168), "sizeof(S19148C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C11)");
    /*is_ambiguous_... S19148C2::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C2*)(S19148C12*), ABISELECT(2976,1928), "S19148C11");
    check_base_class_offset(lv, (S7394C3*)(S19148C4*)(S19148C2*)(S19148C12*), ABISELECT(4288,2812), "S19148C11");
    check_base_class_offset(lv, (S19148C4*)(S19148C2*)(S19148C12*), ABISELECT(2720,1764), "S19148C11");
    check_base_class_offset(lv, (S19148C5*)(S19148C2*)(S19148C12*), ABISELECT(4336,2844), "S19148C11");
    check_base_class_offset(lv, (S19148C2*)(S19148C12*), ABISELECT(2720,1764), "S19148C11");
    check_base_class_offset(lv, (S19148C12*), ABISELECT(2720,1764), "S19148C11");
    /*is_ambiguous_... S19148C11::S19148C5 */ AMB_check_base_class_offset(lv, (S19148C5*), 0, "S19148C11");
    check_field_offset(lv, s19148c11f0, ABISELECT(496,324), "S19148C11.s19148c11f0");
    check_field_offset(lv, s19148c11f1, ABISELECT(512,328), "S19148C11.s19148c11f1");
    check_field_offset(lv, s19148c11f2, ABISELECT(2688,1744), "S19148C11.s19148c11f2");
    set_bf_and_test(lv, s19148c11f3, ABISELECT(2696,1748), 0, 64, 1, "S19148C11");
    set_bf_and_test(lv, s19148c11f3, ABISELECT(2696,1748), 0, 64, hide_sll(1LL<<63), "S19148C11");
    check_field_offset(lv, s19148c11f4, ABISELECT(2704,1756), "S19148C11.s19148c11f4");
    check_field_offset(lv, s19148c11f5, ABISELECT(2712,1760), "S19148C11.s19148c11f5");
    test_class_info(&lv, &cd_S19148C11);
    dp->~S19148C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C11(Test_S19148C11, "S19148C11", ABISELECT(4832,3168));

#else // __cplusplus

extern void _ZN9S19148C11C1Ev();
extern void _ZN9S19148C11D2Ev();
Name_Map name_map_S19148C11[] = {
  NSPAIR(_ZN9S19148C11C1Ev),
  NSPAIR(_ZN9S19148C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
extern Class_Descriptor cd_S19148C2;
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
extern Class_Descriptor cd_S19148C12;
extern VTBL_ENTRY _ZTI9S19148C12[];
extern  VTBL_ENTRY _ZTV9S19148C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19148C12[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
static Base_Class bases_S19148C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(2976,1928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(4288,2812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19148C4,    ABISELECT(2720,1764), //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_S19148C5,    ABISELECT(4336,2844), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19148C2,    ABISELECT(2720,1764), //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
    5, //immediately_derived
  0, 0},
  {&cd_S19148C12,    ABISELECT(2720,1764), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19148C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S19148C11[];
extern void _ZN9S19148C11D1Ev();
extern void _ZN9S19148C11D0Ev();
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S19148C11D1Ev,_ZTv0_n20_N9S19148C11D1Ev)();
extern void ABISELECT(_ZThn2720_N9S19148C11D1Ev,_ZThn1764_N9S19148C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19148C11D0Ev,_ZTv0_n20_N9S19148C11D0Ev)();
extern void ABISELECT(_ZThn2720_N9S19148C11D0Ev,_ZThn1764_N9S19148C11D0Ev)() __attribute__((weak));
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n24_N9S19148C11D1Ev,_ZTv0_n12_N9S19148C11D1Ev)();
extern void ABISELECT(_ZThn4336_N9S19148C11D1Ev,_ZThn2844_N9S19148C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19148C11D0Ev,_ZTv0_n12_N9S19148C11D0Ev)();
extern void ABISELECT(_ZThn4336_N9S19148C11D0Ev,_ZThn2844_N9S19148C11D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY vtc_S19148C11[] = {
  ABISELECT(4336,2844),
  ABISELECT(4288,2812),
  ABISELECT(2720,1764),
  0,
  (VTBL_ENTRY)&(_ZTI9S19148C11[0]),
  (VTBL_ENTRY)&_ZN9S19148C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19148C11D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
  0,
  ABISELECT(-2720,-1764),
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  ABISELECT(-2720,-1764),
  (VTBL_ENTRY)&(_ZTI9S19148C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19148C11D1Ev,_ZTv0_n20_N9S19148C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19148C11D0Ev,_ZTv0_n20_N9S19148C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  0,
  0,
  ABISELECT(-4336,-2844),
  ABISELECT(-4336,-2844),
  (VTBL_ENTRY)&(_ZTI9S19148C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C11D1Ev,_ZTv0_n12_N9S19148C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C11D0Ev,_ZTv0_n12_N9S19148C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern VTBL_ENTRY _ZTV9S19148C11[];
extern void _ZN9S19148C12D1Ev();
extern void _ZN9S19148C12D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19148C12__9S19148C11[] = {
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI9S19148C12[0]),
  (VTBL_ENTRY)&_ZN9S19148C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19148C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C29S19148C12__9S19148C11[] = {
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C48S19148C29S19148C12__9S19148C11[] = {
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZThn1616_N8S19148C2D1Ev,_ZThn1080_N8S19148C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void ABISELECT(_ZThn1616_N8S19148C2D0Ev,_ZThn1080_N8S19148C2D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C29S19148C12__9S19148C11[] = {
  0,
  0,
  ABISELECT(-1616,-1080),
  ABISELECT(-1616,-1080),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19148C12D1Ev,_ZTv0_n12_N9S19148C12D1Ev)();
extern void ABISELECT(_ZThn1616_N9S19148C12D1Ev,_ZThn1080_N9S19148C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19148C12D0Ev,_ZTv0_n12_N9S19148C12D0Ev)();
extern void ABISELECT(_ZThn1616_N9S19148C12D0Ev,_ZThn1080_N9S19148C12D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__9S19148C12__9S19148C11[] = {
  0,
  0,
  ABISELECT(-1616,-1080),
  ABISELECT(-1616,-1080),
  (VTBL_ENTRY)&(_ZTI9S19148C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C12D1Ev,_ZTv0_n12_N9S19148C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C12D0Ev,_ZTv0_n12_N9S19148C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
static  VTT_ENTRY vtt_S19148C11[] = {
  {&(_ZTV9S19148C11[5]),  5,27},
  {&(_ZTV9S19148C11[15]),  15,27},
  {&(_ZTV9S19148C11[23]),  23,27},
  {&(_tg__ZTV9S19148C12__9S19148C11[4]),  4,7},
  {&(_tg__ZTV8S19148C29S19148C12__9S19148C11[4]),  4,7},
  {&(_tg__ZTV8S19148C48S19148C29S19148C12__9S19148C11[3]),  3,3},
  {&(_tg__ZTV8S19148C5__8S19148C29S19148C12__9S19148C11[5]),  5,9},
  {&(_tg__ZTV8S19148C5__9S19148C12__9S19148C11[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19148C11[];
extern  VTBL_ENTRY _ZTV9S19148C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19148C11[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19148C12D0Ev,_ZTv0_n12_N9S19148C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N9S19148C12D0Ev,_ZThn1080_N9S19148C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19148C12D1Ev,_ZTv0_n12_N9S19148C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N9S19148C12D1Ev,_ZThn1080_N9S19148C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N8S19148C2D0Ev,_ZThn1080_N8S19148C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N8S19148C2D1Ev,_ZThn1080_N8S19148C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19148C11D0Ev,_ZTv0_n12_N9S19148C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N9S19148C11D0Ev,_ZThn2844_N9S19148C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19148C11D1Ev,_ZTv0_n12_N9S19148C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4336_N9S19148C11D1Ev,_ZThn2844_N9S19148C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19148C11D0Ev,_ZTv0_n20_N9S19148C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2720_N9S19148C11D0Ev,_ZThn1764_N9S19148C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19148C11D1Ev,_ZTv0_n20_N9S19148C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2720_N9S19148C11D1Ev,_ZThn1764_N9S19148C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19148C11 = {  "S19148C11", // class name
  bases_S19148C11, 7,
  &(vtc_S19148C11[0]), // expected_vtbl_contents
  &(vtt_S19148C11[0]), // expected_vtt_contents
  ABISELECT(4832,3168), // object size
  NSPAIRA(_ZTI9S19148C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19148C11),27, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19148C11),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19148C1  : virtual S19148C2 , virtual S19148C7 , S19148C5 , S7394C3 {
  ::S19148C4 s19148c1f0;
  int s19148c1f1;
  char s19148c1f2;
  int s19148c1f3;
  short s19148c1f4;
  int s19148c1f5;
  __tsi64 s19148c1f6;
  ::S19148C4 s19148c1f7[7];
  __tsi64 s19148c1f8;
  ::S19148C11 s19148c1f9;
  __tsi64 s19148c1f10[6];
  int s19148c1f11;
  virtual  ~S19148C1(); // _ZN8S19148C1D2Ev
  virtual void  v1(); // _ZN8S19148C12v1Ev
  virtual void  v2(); // _ZN8S19148C12v2Ev
  virtual void  v3(); // _ZN8S19148C12v3Ev
  S19148C1(); // tgen
};
//SIG(1 S19148C1) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v4 v5 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v6 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} VBC7{ VBC8{ VBC2 BC9{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} BC2 VBC10{ VBC2 vd v7 Fs FL FC5 FC3[5] FC2[8] FC4[5] FC4 Fp FL FL Fi[2]} VBC4 vd FL FD Fp[6]} BC5 BC3 vd v1 v2 v3 FC4 Fi Fc Fi Fs Fi FL FC4[7] FL FC11{ VBC12{ BC2 vd FC4 Fp[5] Fi FL[9] FC13{} FL[6] Fc:0 FL FD FU6 FC3 Fi Fi Fl} BC5 vd Fp FC14{ VBC15{ VBC16{ BC3 BC17{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC18{ vd v9 v10 FC17 Fp FL Fi Fp FU6[8] Fc Fp} vd v11 Fp[4] FL Fp[3] FU6 FC18 FD Fs:0 FC3 FD Fp} BC9 vd FD FL FL:13} vd v8 FC18 Fi Fi FU6} Fp FL:64 Fi Fp} FL[6] Fi}


 S19148C1 ::~S19148C1(){ note_dtor("S19148C1", this);}
void  S19148C1 ::v1(){vfunc_called(this, "_ZN8S19148C12v1Ev");}
void  S19148C1 ::v2(){vfunc_called(this, "_ZN8S19148C12v2Ev");}
void  S19148C1 ::v3(){vfunc_called(this, "_ZN8S19148C12v3Ev");}
S19148C1 ::S19148C1(){ note_ctor("S19148C1", this);} // tgen

static void Test_S19148C1()
{
  extern Class_Descriptor cd_S19148C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1603,4166)];
    init_test(&cd_S19148C1, buf);
    S19148C1 *dp, &lv = *(dp=new (buf) S19148C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(25632,16660), "sizeof(S19148C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19148C1)");
    /*is_ambiguous_... S19148C1::S19148C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C2*), ABISELECT(8176,5344), "S19148C1");
    /*is_ambiguous_... S19148C1::S19148C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C4*)(S19148C2*), ABISELECT(8896,5808), "S19148C1");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C4*)(S19148C2*)(S19148C7*), ABISELECT(8896,5808), "S19148C1");
    /*is_ambiguous_... S19148C1::S19148C4 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C4*), ABISELECT(8896,5808), "S19148C1");
    /*is_ambiguous_... S19148C1::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C4*)(S19148C2*), ABISELECT(7920,5180), "S19148C1");
    /*is_ambiguous_... S19148C1::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C5*)(S19148C2*), ABISELECT(8944,5840), "S19148C1");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C5*)(S19148C2*)(S19148C7*), ABISELECT(8944,5840), "S19148C1");
    /*is_ambiguous_... S19148C1::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C2*), ABISELECT(7920,5180), "S19148C1");
    check_base_class_offset(lv, (S19148C2*)(S19148C8*), ABISELECT(7920,5180), "S19148C1");
    check_base_class_offset(lv, (S19148C2*)(S19148C10*), ABISELECT(7920,5180), "S19148C1");
    check_base_class_offset(lv, (S7394C9*)(S19148C8*), ABISELECT(10488,6840), "S19148C1");
    check_base_class_offset(lv, (S19148C8*)(S19148C7*), ABISELECT(10480,6836), "S19148C1");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19148C2*)(S19148C7*), ABISELECT(9696,6328), "S19148C1");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C4*)(S19148C2*)(S19148C7*), ABISELECT(9440,6164), "S19148C1");
    /*is_ambiguous_... S19148C7::S19148C2 */ AMB_check_base_class_offset(lv, (S19148C2*)(S19148C7*), ABISELECT(9440,6164), "S19148C1");
    check_base_class_offset(lv, (S19148C10*)(S19148C7*), ABISELECT(10592,6920), "S19148C1");
    /*is_ambiguous_... S19148C7::S19148C4 */ AMB_check_base_class_offset(lv, (S19148C4*)(S19148C7*), ABISELECT(25376,16496), "S19148C1");
    check_base_class_offset(lv, (S19148C7*), ABISELECT(9440,6164), "S19148C1");
    /*is_ambiguous_... S19148C1::S19148C5 */ AMB_check_base_class_offset(lv, (S19148C5*), 0, "S19148C1");
    /*is_ambiguous_... S19148C1::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*), ABISELECT(496,324), "S19148C1");
    check_field_offset(lv, s19148c1f0, ABISELECT(544,356), "S19148C1.s19148c1f0");
    check_field_offset(lv, s19148c1f1, ABISELECT(848,552), "S19148C1.s19148c1f1");
    check_field_offset(lv, s19148c1f2, ABISELECT(852,556), "S19148C1.s19148c1f2");
    check_field_offset(lv, s19148c1f3, ABISELECT(856,560), "S19148C1.s19148c1f3");
    check_field_offset(lv, s19148c1f4, ABISELECT(860,564), "S19148C1.s19148c1f4");
    check_field_offset(lv, s19148c1f5, ABISELECT(864,568), "S19148C1.s19148c1f5");
    check_field_offset(lv, s19148c1f6, ABISELECT(872,572), "S19148C1.s19148c1f6");
    check_field_offset(lv, s19148c1f7, ABISELECT(880,580), "S19148C1.s19148c1f7");
    check_field_offset(lv, s19148c1f8, ABISELECT(3008,1952), "S19148C1.s19148c1f8");
    check_field_offset(lv, s19148c1f9, ABISELECT(3024,1960), "S19148C1.s19148c1f9");
    check_field_offset(lv, s19148c1f10, ABISELECT(7856,5128), "S19148C1.s19148c1f10");
    check_field_offset(lv, s19148c1f11, ABISELECT(7904,5176), "S19148C1.s19148c1f11");
    test_class_info(&lv, &cd_S19148C1);
    dp->~S19148C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19148C1(Test_S19148C1, "S19148C1", ABISELECT(25632,16660));

#else // __cplusplus

extern void _ZN8S19148C1C1Ev();
extern void _ZN8S19148C1D2Ev();
Name_Map name_map_S19148C1[] = {
  NSPAIR(_ZN8S19148C1C1Ev),
  NSPAIR(_ZN8S19148C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
extern Class_Descriptor cd_S19148C2;
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S19148C8;
extern VTBL_ENTRY _ZTI8S19148C8[];
extern  VTBL_ENTRY _ZTV8S19148C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C8[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C2;
extern VTBL_ENTRY _ZTI8S19148C2[];
extern  VTBL_ENTRY _ZTV8S19148C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C2[];
extern Class_Descriptor cd_S19148C10;
extern VTBL_ENTRY _ZTI9S19148C10[];
extern  VTBL_ENTRY _ZTV9S19148C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19148C10[];
extern Class_Descriptor cd_S19148C4;
extern VTBL_ENTRY _ZTI8S19148C4[];
extern  VTBL_ENTRY _ZTV8S19148C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C4[];
extern Class_Descriptor cd_S19148C7;
extern VTBL_ENTRY _ZTI8S19148C7[];
extern  VTBL_ENTRY _ZTV8S19148C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C7[];
extern Class_Descriptor cd_S19148C5;
extern VTBL_ENTRY _ZTI8S19148C5[];
extern  VTBL_ENTRY _ZTV8S19148C5[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
static Base_Class bases_S19148C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(8176,5344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(8896,5808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19148C4,    ABISELECT(7920,5180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19148C5,    ABISELECT(8944,5840), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19148C2,    ABISELECT(7920,5180), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C9,    ABISELECT(10488,6840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19148C8,    ABISELECT(10480,6836), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7394C3,    ABISELECT(9696,6328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19148C4,    ABISELECT(9440,6164), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19148C2,    ABISELECT(9440,6164), //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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19148C10,    ABISELECT(10592,6920), //bcp->offset
    55, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19148C4,    ABISELECT(25376,16496), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19148C7,    ABISELECT(9440,6164), //bcp->offset
    34, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19148C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7394C3,    ABISELECT(496,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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19148C1[];
extern void _ZN8S19148C1D1Ev();
extern void _ZN8S19148C1D0Ev();
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
extern void _ZN8S19148C12v1Ev();
extern void _ZN8S19148C12v2Ev();
extern void _ZN8S19148C12v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19148C1D1Ev,_ZTv0_n20_N8S19148C1D1Ev)();
extern void ABISELECT(_ZThn7920_N8S19148C1D1Ev,_ZThn5180_N8S19148C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19148C1D0Ev,_ZTv0_n20_N8S19148C1D0Ev)();
extern void ABISELECT(_ZThn7920_N8S19148C1D0Ev,_ZThn5180_N8S19148C1D0Ev)() __attribute__((weak));
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S19148C1D1Ev,_ZTv0_n12_N8S19148C1D1Ev)();
extern void ABISELECT(_ZThn8944_N8S19148C1D1Ev,_ZThn5840_N8S19148C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C1D0Ev,_ZTv0_n12_N8S19148C1D0Ev)();
extern void ABISELECT(_ZThn8944_N8S19148C1D0Ev,_ZThn5840_N8S19148C1D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
extern void ABISELECT(_ZTv0_n72_N8S19148C1D1Ev,_ZTv0_n36_N8S19148C1D1Ev)();
extern void ABISELECT(_ZThn9440_N8S19148C1D1Ev,_ZThn6164_N8S19148C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19148C1D0Ev,_ZTv0_n36_N8S19148C1D0Ev)();
extern void ABISELECT(_ZThn9440_N8S19148C1D0Ev,_ZThn6164_N8S19148C1D0Ev)() __attribute__((weak));
extern void _ZN8S19148C22v6Ev();
extern void ABISELECT(_ZTv0_n48_N8S19148C1D1Ev,_ZTv0_n24_N8S19148C1D1Ev)();
extern void ABISELECT(_ZThn10480_N8S19148C1D1Ev,_ZThn6836_N8S19148C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19148C1D0Ev,_ZTv0_n24_N8S19148C1D0Ev)();
extern void ABISELECT(_ZThn10480_N8S19148C1D0Ev,_ZThn6836_N8S19148C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19148C1D1Ev,_ZTv0_n24_N8S19148C1D1Ev)();
extern void ABISELECT(_ZThn10592_N8S19148C1D1Ev,_ZThn6920_N8S19148C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19148C1D0Ev,_ZTv0_n24_N8S19148C1D0Ev)();
extern void ABISELECT(_ZThn10592_N8S19148C1D0Ev,_ZThn6920_N8S19148C1D0Ev)() __attribute__((weak));
extern void _ZN9S19148C102v7Ev();
static  VTBL_ENTRY vtc_S19148C1[] = {
  ABISELECT(25376,16496),
  ABISELECT(10592,6920),
  ABISELECT(10480,6836),
  ABISELECT(9440,6164),
  ABISELECT(8944,5840),
  ABISELECT(8896,5808),
  ABISELECT(7920,5180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C1[0]),
  (VTBL_ENTRY)&_ZN8S19148C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19148C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19148C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19148C12v3Ev,
  0,
  ABISELECT(-7920,-5180),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-7920,-5180),
  (VTBL_ENTRY)&(_ZTI8S19148C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C1D1Ev,_ZTv0_n20_N8S19148C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C1D0Ev,_ZTv0_n20_N8S19148C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  0,
  0,
  ABISELECT(-8944,-5840),
  ABISELECT(-8944,-5840),
  (VTBL_ENTRY)&(_ZTI8S19148C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C1D1Ev,_ZTv0_n12_N8S19148C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C1D0Ev,_ZTv0_n12_N8S19148C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
  0,
  ABISELECT(-9440,-6164),
  ABISELECT(15936,10332),
  ABISELECT(1152,756),
  ABISELECT(-1520,-984),
  ABISELECT(1040,672),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-9440,-6164),
  (VTBL_ENTRY)&(_ZTI8S19148C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19148C1D1Ev,_ZTv0_n36_N8S19148C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19148C1D0Ev,_ZTv0_n36_N8S19148C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
  ABISELECT(-10480,-6836),
  ABISELECT(-1536,-996),
  ABISELECT(-1584,-1028),
  ABISELECT(-2560,-1656),
  ABISELECT(-10480,-6836),
  (VTBL_ENTRY)&(_ZTI8S19148C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C1D1Ev,_ZTv0_n24_N8S19148C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C1D0Ev,_ZTv0_n24_N8S19148C1D0Ev),
  0,
  ABISELECT(-10592,-6920),
  ABISELECT(-1648,-1080),
  ABISELECT(-1696,-1112),
  ABISELECT(-2672,-1740),
  ABISELECT(-10592,-6920),
  (VTBL_ENTRY)&(_ZTI8S19148C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C1D1Ev,_ZTv0_n24_N8S19148C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C1D0Ev,_ZTv0_n24_N8S19148C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19148C102v7Ev,
  ABISELECT(-16480,-10688),
  ABISELECT(-25376,-16496),
  (VTBL_ENTRY)&(_ZTI8S19148C1[0]),
};
extern VTBL_ENTRY _ZTV8S19148C1[];
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__8S19148C1[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C48S19148C2__8S19148C1[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev)() __attribute__((weak));
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C2__8S19148C1[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern void _ZN8S19148C7D1Ev();
extern void _ZN8S19148C7D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C7__8S19148C1[] = {
  ABISELECT(15936,10332),
  ABISELECT(1152,756),
  ABISELECT(-1520,-984),
  ABISELECT(1040,672),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&_ZN8S19148C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
extern void _ZN8S19148C2D1Ev();
extern void _ZN8S19148C2D0Ev();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C28S19148C7__A1__8S19148C1[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&_ZN8S19148C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C48S19148C28S19148C7__A1__8S19148C1[] = {
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev)();
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C28S19148C7__A1__8S19148C1[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S19148C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev)();
extern void ABISELECT(_ZThn1040_N8S19148C7D1Ev,_ZThn672_N8S19148C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev)();
extern void ABISELECT(_ZThn1040_N8S19148C7D0Ev,_ZThn672_N8S19148C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19148C8__8S19148C7__8S19148C1[] = {
  ABISELECT(-1040,-672),
  ABISELECT(-1536,-996),
  ABISELECT(-1584,-1028),
  ABISELECT(-2560,-1656),
  ABISELECT(-1040,-672),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19148C7D1Ev,_ZTv0_n20_N8S19148C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19148C7D0Ev,_ZTv0_n20_N8S19148C7D0Ev)();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__8S19148C7__8S19148C1[] = {
  0,
  ABISELECT(1520,984),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(1520,984),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C7D1Ev,_ZTv0_n20_N8S19148C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C7D0Ev,_ZTv0_n20_N8S19148C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19148C7D1Ev,_ZTv0_n12_N8S19148C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19148C7D0Ev,_ZTv0_n12_N8S19148C7D0Ev)();
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C7__8S19148C1[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C7D1Ev,_ZTv0_n12_N8S19148C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C7D0Ev,_ZTv0_n12_N8S19148C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev)();
extern void ABISELECT(_ZThn1152_N8S19148C7D1Ev,_ZThn756_N8S19148C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev)();
extern void ABISELECT(_ZThn1152_N8S19148C7D0Ev,_ZThn756_N8S19148C7D0Ev)() __attribute__((weak));
extern void _ZN9S19148C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19148C10__8S19148C7__8S19148C1[] = {
  0,
  ABISELECT(-1152,-756),
  ABISELECT(-1648,-1080),
  ABISELECT(-1696,-1112),
  ABISELECT(-2672,-1740),
  ABISELECT(-1152,-756),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19148C102v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C4__A2__8S19148C7__8S19148C1[] = {
  ABISELECT(-16480,-10688),
  ABISELECT(-15936,-10332),
  (VTBL_ENTRY)&(_ZTI8S19148C7[0]),
};
extern void _ZN8S19148C8D1Ev();
extern void _ZN8S19148C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C8__8S19148C1[] = {
  ABISELECT(-1536,-996),
  ABISELECT(-1584,-1028),
  ABISELECT(-2560,-1656),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&_ZN8S19148C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19148C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19148C8D1Ev,_ZTv0_n20_N8S19148C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19148C8D0Ev,_ZTv0_n20_N8S19148C8D0Ev)();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__8S19148C8__8S19148C1[] = {
  0,
  ABISELECT(2560,1656),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(2560,1656),
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C8D1Ev,_ZTv0_n20_N8S19148C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19148C8D0Ev,_ZTv0_n20_N8S19148C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19148C8D1Ev,_ZTv0_n12_N8S19148C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19148C8D0Ev,_ZTv0_n12_N8S19148C8D0Ev)();
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__8S19148C8__8S19148C1[] = {
  0,
  0,
  ABISELECT(1536,996),
  ABISELECT(1536,996),
  (VTBL_ENTRY)&(_ZTI8S19148C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C8D1Ev,_ZTv0_n12_N8S19148C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19148C8D0Ev,_ZTv0_n12_N8S19148C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
extern void _ZN9S19148C10D1Ev();
extern void _ZN9S19148C10D0Ev();
extern void _ZN9S19148C102v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19148C10__8S19148C1[] = {
  ABISELECT(-1648,-1080),
  ABISELECT(-1696,-1112),
  ABISELECT(-2672,-1740),
  0,
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&_ZN9S19148C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19148C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19148C102v7Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19148C10D1Ev,_ZTv0_n20_N9S19148C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19148C10D0Ev,_ZTv0_n20_N9S19148C10D0Ev)();
extern void _ZN8S19148C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C2__9S19148C10__8S19148C1[] = {
  0,
  ABISELECT(2672,1740),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(2672,1740),
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19148C10D1Ev,_ZTv0_n20_N9S19148C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19148C10D0Ev,_ZTv0_n20_N9S19148C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C22v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19148C10D1Ev,_ZTv0_n12_N9S19148C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19148C10D0Ev,_ZTv0_n12_N9S19148C10D0Ev)();
extern void _ZN8S19148C52v4Ev();
extern void _ZN8S19148C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19148C5__9S19148C10__8S19148C1[] = {
  0,
  0,
  ABISELECT(1648,1080),
  ABISELECT(1648,1080),
  (VTBL_ENTRY)&(_ZTI9S19148C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C10D1Ev,_ZTv0_n12_N9S19148C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19148C10D0Ev,_ZTv0_n12_N9S19148C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19148C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19148C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19148C4__A2__8S19148C1[] = {
  ABISELECT(-16480,-10688),
  0,
  (VTBL_ENTRY)&(_ZTI8S19148C4[0]),
};
static  VTT_ENTRY vtt_S19148C1[] = {
  {&(_ZTV8S19148C1[9]),  9,68},
  {&(_ZTV8S19148C1[22]),  22,68},
  {&(_ZTV8S19148C1[30]),  30,68},
  {&(_ZTV8S19148C1[44]),  44,68},
  {&(_ZTV8S19148C1[53]),  53,68},
  {&(_ZTV8S19148C1[62]),  62,68},
  {&(_ZTV8S19148C1[68]),  68,68},
  {&(_tg__ZTV8S19148C2__8S19148C1[4]),  4,7},
  {&(_tg__ZTV8S19148C48S19148C2__8S19148C1[3]),  3,3},
  {&(_tg__ZTV8S19148C5__8S19148C2__8S19148C1[5]),  5,9},
  {&(_tg__ZTV8S19148C7__8S19148C1[8]),  8,11},
  {&(_tg__ZTV8S19148C28S19148C7__A1__8S19148C1[4]),  4,7},
  {&(_tg__ZTV8S19148C48S19148C28S19148C7__A1__8S19148C1[3]),  3,3},
  {&(_tg__ZTV8S19148C5__8S19148C28S19148C7__A1__8S19148C1[5]),  5,9},
  {&(_tg__ZTV8S19148C8__8S19148C7__8S19148C1[6]),  6,8},
  {&(_tg__ZTV8S19148C2__8S19148C7__8S19148C1[6]),  6,9},
  {&(_tg__ZTV8S19148C5__8S19148C7__8S19148C1[5]),  5,9},
  {&(_tg__ZTV9S19148C10__8S19148C7__8S19148C1[7]),  7,10},
  {&(_tg__ZTV8S19148C4__A2__8S19148C7__8S19148C1[3]),  3,3},
  {&(_tg__ZTV8S19148C8__8S19148C1[5]),  5,7},
  {&(_tg__ZTV8S19148C2__8S19148C8__8S19148C1[6]),  6,9},
  {&(_tg__ZTV8S19148C5__8S19148C8__8S19148C1[5]),  5,9},
  {&(_tg__ZTV9S19148C10__8S19148C1[5]),  5,8},
  {&(_tg__ZTV8S19148C2__9S19148C10__8S19148C1[6]),  6,9},
  {&(_tg__ZTV8S19148C5__9S19148C10__8S19148C1[5]),  5,9},
  {&(_tg__ZTV8S19148C4__A2__8S19148C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19148C1[];
extern  VTBL_ENTRY _ZTV8S19148C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19148C1[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19148C7D0Ev,_ZTv0_n24_N8S19148C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N8S19148C7D0Ev,_ZThn756_N8S19148C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S19148C7D0Ev,_ZThn672_N8S19148C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19148C7D1Ev,_ZTv0_n24_N8S19148C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N8S19148C7D1Ev,_ZThn756_N8S19148C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S19148C7D1Ev,_ZThn672_N8S19148C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D0Ev,_ZTv0_n12_N8S19148C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D0Ev,_ZThn660_N8S19148C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C2D1Ev,_ZTv0_n12_N8S19148C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19148C2D1Ev,_ZThn660_N8S19148C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19148C1D0Ev,_ZTv0_n24_N8S19148C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10592_N8S19148C1D0Ev,_ZThn6920_N8S19148C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10480_N8S19148C1D0Ev,_ZThn6836_N8S19148C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19148C1D1Ev,_ZTv0_n24_N8S19148C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10592_N8S19148C1D1Ev,_ZThn6920_N8S19148C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10480_N8S19148C1D1Ev,_ZThn6836_N8S19148C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19148C1D0Ev,_ZTv0_n36_N8S19148C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9440_N8S19148C1D0Ev,_ZThn6164_N8S19148C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19148C1D1Ev,_ZTv0_n36_N8S19148C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9440_N8S19148C1D1Ev,_ZThn6164_N8S19148C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C1D0Ev,_ZTv0_n12_N8S19148C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8944_N8S19148C1D0Ev,_ZThn5840_N8S19148C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19148C1D1Ev,_ZTv0_n12_N8S19148C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8944_N8S19148C1D1Ev,_ZThn5840_N8S19148C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19148C1D0Ev,_ZTv0_n20_N8S19148C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7920_N8S19148C1D0Ev,_ZThn5180_N8S19148C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19148C1D1Ev,_ZTv0_n20_N8S19148C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7920_N8S19148C1D1Ev,_ZThn5180_N8S19148C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19148C1 = {  "S19148C1", // class name
  bases_S19148C1, 15,
  &(vtc_S19148C1[0]), // expected_vtbl_contents
  &(vtt_S19148C1[0]), // expected_vtt_contents
  ABISELECT(25632,16660), // object size
  NSPAIRA(_ZTI8S19148C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19148C1),68, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19148C1),26, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2525C4  : S20507C6 {
  int s2525c4f0;
  long double s2525c4f1;
  int s2525c4f2;
  ::S20507C6 s2525c4f3;
  ::S20507C6 s2525c4f4;
  int s2525c4f5;
  long double s2525c4f6[8];
};
//SIG(-1 S2525C4) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S2525C4()
{
  extern Class_Descriptor cd_S2525C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S2525C4, buf);
    S2525C4 &lv = *(new (buf) S2525C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S2525C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C4)");
    check_base_class_offset(lv, (S20507C6*), 0, "S2525C4");
    check_field_offset(lv, s2525c4f0, ABISELECT(88,64), "S2525C4.s2525c4f0");
    check_field_offset(lv, s2525c4f1, ABISELECT(96,68), "S2525C4.s2525c4f1");
    check_field_offset(lv, s2525c4f2, ABISELECT(112,80), "S2525C4.s2525c4f2");
    check_field_offset(lv, s2525c4f3, ABISELECT(120,84), "S2525C4.s2525c4f3");
    check_field_offset(lv, s2525c4f4, ABISELECT(208,148), "S2525C4.s2525c4f4");
    check_field_offset(lv, s2525c4f5, ABISELECT(296,212), "S2525C4.s2525c4f5");
    check_field_offset(lv, s2525c4f6, ABISELECT(304,216), "S2525C4.s2525c4f6");
    test_class_info(&lv, &cd_S2525C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C4(Test_S2525C4, "S2525C4", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S2525C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2525C4[];
Class_Descriptor cd_S2525C4 = {  "S2525C4", // class name
  bases_S2525C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI7S2525C4),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  S2525C5  : S2525C4 , virtual S20507C6 {
  long double s2525c5f0[2];
  int s2525c5f1[2];
  long double s2525c5f2[3];
  virtual void  v1(); // _ZN7S2525C52v1Ev
  ~S2525C5(); // tgen
  S2525C5(); // tgen
};
//SIG(-1 S2525C5) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S2525C5()
{
  extern Class_Descriptor cd_S2525C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S2525C5, buf);
    S2525C5 *dp, &lv = *(dp=new (buf) S2525C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S2525C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C5)");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(16,4), "S2525C5");
    check_base_class_offset(lv, (S2525C4*), ABISELECT(16,4), "S2525C5");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S2525C5");
    check_field_offset(lv, s2525c5f0, ABISELECT(448,316), "S2525C5.s2525c5f0");
    check_field_offset(lv, s2525c5f1, ABISELECT(480,340), "S2525C5.s2525c5f1");
    check_field_offset(lv, s2525c5f2, ABISELECT(496,348), "S2525C5.s2525c5f2");
    test_class_info(&lv, &cd_S2525C5);
    dp->~S2525C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C5(Test_S2525C5, "S2525C5", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN7S2525C5C1Ev();
extern void _ZN7S2525C5D1Ev();
Name_Map name_map_S2525C5[] = {
  NSPAIR(_ZN7S2525C5C1Ev),
  NSPAIR(_ZN7S2525C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S2525C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2525C4,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2525C5[];
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY vtc_S2525C5[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S2525C5[];
static  VTT_ENTRY vtt_S2525C5[] = {
  {&(_ZTV7S2525C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
Class_Descriptor cd_S2525C5 = {  "S2525C5", // class name
  bases_S2525C5, 3,
  &(vtc_S2525C5[0]), // expected_vtbl_contents
  &(vtt_S2525C5[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI7S2525C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2525C5),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2525C5),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  S2525C2  : S20507C6 , virtual S2525C4 , virtual S2525C5 {
  long double s2525c2f0;
  ~S2525C2(); // tgen
  S2525C2(); // tgen
};
//SIG(-1 S2525C2) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S2525C2()
{
  extern Class_Descriptor cd_S2525C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S2525C2, buf);
    S2525C2 *dp, &lv = *(dp=new (buf) S2525C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S2525C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C2)");
    /*is_ambiguous_... S2525C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S2525C2");
    /*is_ambiguous_... S2525C2::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(112,80), "S2525C2");
    /*is_ambiguous_... S2525C2::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*), ABISELECT(112,80), "S2525C2");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(560,396), "S2525C2");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(560,396), "S2525C2");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(1088,776), "S2525C2");
    check_base_class_offset(lv, (S2525C5*), ABISELECT(544,392), "S2525C2");
    check_field_offset(lv, s2525c2f0, ABISELECT(96,68), "S2525C2.s2525c2f0");
    test_class_info(&lv, &cd_S2525C2);
    dp->~S2525C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C2(Test_S2525C2, "S2525C2", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN7S2525C2C1Ev();
extern void _ZN7S2525C2D1Ev();
Name_Map name_map_S2525C2[] = {
  NSPAIR(_ZN7S2525C2C1Ev),
  NSPAIR(_ZN7S2525C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
static Base_Class bases_S2525C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S2525C4,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S2525C2[];
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY vtc_S2525C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S2525C2[];
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C2[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTT_ENTRY vtt_S2525C2[] = {
  {&(_ZTV7S2525C2[5]),  5,10},
  {&(_ZTV7S2525C2[9]),  9,10},
  {&(_tg__ZTV7S2525C5__7S2525C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
Class_Descriptor cd_S2525C2 = {  "S2525C2", // class name
  bases_S2525C2, 7,
  &(vtc_S2525C2[0]), // expected_vtbl_contents
  &(vtt_S2525C2[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI7S2525C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2525C2),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2525C2),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  S2525C10  : virtual S20507C6 , virtual S2525C5 , virtual S2525C4 {
  ::S468C20_nt s2525c10f0;
  ~S2525C10(); // tgen
  S2525C10(); // tgen
};
//SIG(-1 S2525C10) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S2525C10()
{
  extern Class_Descriptor cd_S2525C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S2525C10, buf);
    S2525C10 *dp, &lv = *(dp=new (buf) S2525C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S2525C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C10)");
    /*is_ambiguous_... S2525C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S2525C10");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(16,8), "S2525C10");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(128,76), "S2525C10");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(128,76), "S2525C10");
    check_base_class_offset(lv, (S2525C5*), ABISELECT(112,72), "S2525C10");
    /*is_ambiguous_... S2525C10::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(656,456), "S2525C10");
    /*is_ambiguous_... S2525C10::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*), ABISELECT(656,456), "S2525C10");
    check_field_offset(lv, s2525c10f0, ABISELECT(8,4), "S2525C10.s2525c10f0");
    test_class_info(&lv, &cd_S2525C10);
    dp->~S2525C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C10(Test_S2525C10, "S2525C10", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S2525C10C1Ev();
extern void _ZN8S2525C10D1Ev();
Name_Map name_map_S2525C10[] = {
  NSPAIR(_ZN8S2525C10C1Ev),
  NSPAIR(_ZN8S2525C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
static Base_Class bases_S2525C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S2525C4,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2525C5,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S2525C10[];
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY vtc_S2525C10[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern VTBL_ENTRY _ZTV8S2525C10[];
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C10[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTT_ENTRY vtt_S2525C10[] = {
  {&(_ZTV8S2525C10[5]),  5,10},
  {&(_ZTV8S2525C10[9]),  9,10},
  {&(_tg__ZTV7S2525C5__8S2525C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2525C10[];
extern  VTBL_ENTRY _ZTV8S2525C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C10[];
Class_Descriptor cd_S2525C10 = {  "S2525C10", // class name
  bases_S2525C10, 6,
  &(vtc_S2525C10[0]), // expected_vtbl_contents
  &(vtt_S2525C10[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S2525C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2525C10),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2525C10),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  S2525C12  : S20507C6 , virtual S2525C4 , virtual S20507C11 , S2525C5 {
  ::S2525C10 s2525c12f0;
  ::S2525C5 s2525c12f1;
  virtual  ~S2525C12(); // _ZN8S2525C12D2Ev
  S2525C12(); // tgen
};
//SIG(-1 S2525C12) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ vd m Fp FD[5] Fp FD} BC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} vd FC6{ VBC2 VBC5 VBC3 FC7{}} FC5}


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

static void Test_S2525C12()
{
  extern Class_Descriptor cd_S2525C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(190,532)];
    init_test(&cd_S2525C12, buf);
    S2525C12 *dp, &lv = *(dp=new (buf) S2525C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3024,2124), "sizeof(S2525C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C12)");
    /*is_ambiguous_... S2525C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S2525C12");
    /*is_ambiguous_... S2525C12::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(2368,1664), "S2525C12");
    /*is_ambiguous_... S2525C12::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*), ABISELECT(2368,1664), "S2525C12");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2800,1976), "S2525C12");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(16,4), "S2525C12");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(16,4), "S2525C12");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(2928,2060), "S2525C12");
    check_base_class_offset(lv, (S2525C5*), 0, "S2525C12");
    check_field_offset(lv, s2525c12f0, ABISELECT(640,448), "S2525C12.s2525c12f0");
    check_field_offset(lv, s2525c12f1, ABISELECT(1728,1216), "S2525C12.s2525c12f1");
    test_class_info(&lv, &cd_S2525C12);
    dp->~S2525C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C12(Test_S2525C12, "S2525C12", ABISELECT(3024,2124));

#else // __cplusplus

extern void _ZN8S2525C12C1Ev();
extern void _ZN8S2525C12D2Ev();
Name_Map name_map_S2525C12[] = {
  NSPAIR(_ZN8S2525C12C1Ev),
  NSPAIR(_ZN8S2525C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
static Base_Class bases_S2525C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C11,    ABISELECT(2800,1976), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    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_S2525C4,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(2928,2060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    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 _ZTI8S2525C12[];
extern void _ZN7S2525C52v1Ev();
extern void _ZN8S2525C12D1Ev();
extern void _ZN8S2525C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev)();
extern void ABISELECT(_ZThn2800_N8S2525C12D1Ev,_ZThn1976_N8S2525C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev)();
extern void ABISELECT(_ZThn2800_N8S2525C12D0Ev,_ZThn1976_N8S2525C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2525C12[] = {
  ABISELECT(2800,1976),
  ABISELECT(2368,1664),
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D0Ev,
  ABISELECT(-2800,-1976),
  ABISELECT(-2800,-1976),
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S2525C12[];
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C12[] = {
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTT_ENTRY vtt_S2525C12[] = {
  {&(_ZTV8S2525C12[5]),  5,13},
  {&(_tg__ZTV7S2525C5__8S2525C12[3]),  3,4},
  {&(_ZTV8S2525C12[11]),  11,13},
};
extern VTBL_ENTRY _ZTI8S2525C12[];
extern  VTBL_ENTRY _ZTV8S2525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C12[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N8S2525C12D0Ev,_ZThn1976_N8S2525C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N8S2525C12D1Ev,_ZThn1976_N8S2525C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2525C12 = {  "S2525C12", // class name
  bases_S2525C12, 8,
  &(vtc_S2525C12[0]), // expected_vtbl_contents
  &(vtt_S2525C12[0]), // expected_vtt_contents
  ABISELECT(3024,2124), // object size
  NSPAIRA(_ZTI8S2525C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2525C12),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2525C12),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2525C9  : virtual S20507C6 , virtual S20507C11 , virtual S2525C10 , virtual S2525C12 {
  ::S2525C4 s2525c9f0;
  ::S20507C6 s2525c9f1;
  short s2525c9f2;
  void *s2525c9f3[2];
  __tsi64 s2525c9f4;
  long double s2525c9f5[2];
  __tsi64 s2525c9f6;
  int s2525c9f7[2];
  char s2525c9f8;
  ~S2525C9(); // tgen
  S2525C9(); // tgen
};
//SIG(-1 S2525C9) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ vd m Fp FD[5] Fp FD} VBC4{ VBC2 VBC5{ BC6{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC6 FC7{}} VBC8{ BC2 VBC6 VBC3 BC5 vd FC4 FC5} FC6 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc}


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

static void Test_S2525C9()
{
  extern Class_Descriptor cd_S2525C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,741)];
    init_test(&cd_S2525C9, buf);
    S2525C9 *dp, &lv = *(dp=new (buf) S2525C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,2960), "sizeof(S2525C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C9)");
    /*is_ambiguous_... S2525C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(632,444), "S2525C9");
    /*is_ambiguous_... S2525C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C10*), ABISELECT(632,444), "S2525C9");
    /*is_ambiguous_... S2525C9::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(632,444), "S2525C9");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*)(S2525C12*), ABISELECT(632,444), "S2525C9");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(720,508), "S2525C9");
    check_base_class_offset(lv, (S20507C11*)(S2525C12*), ABISELECT(720,508), "S2525C9");
    /*is_ambiguous_... S2525C9::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(880,604), "S2525C9");
    /*is_ambiguous_... S2525C9::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(880,604), "S2525C9");
    check_base_class_offset(lv, (S2525C5*)(S2525C10*), ABISELECT(864,600), "S2525C9");
    /*is_ambiguous_... S2525C9::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(1408,984), "S2525C9");
    /*is_ambiguous_... S2525C10::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C10*), ABISELECT(1408,984), "S2525C9");
    /*is_ambiguous_... S2525C12::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C12*), ABISELECT(1408,984), "S2525C9");
    check_base_class_offset(lv, (S2525C10*), ABISELECT(848,592), "S2525C9");
    /*is_ambiguous_... S2525C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C12*), ABISELECT(2384,1680), "S2525C9");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(1856,1300), "S2525C9");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(1856,1300), "S2525C9");
    check_base_class_offset(lv, (S2525C5*)(S2525C12*), ABISELECT(1840,1296), "S2525C9");
    check_base_class_offset(lv, (S2525C12*), ABISELECT(1840,1296), "S2525C9");
    check_field_offset(lv, s2525c9f0, ABISELECT(16,4), "S2525C9.s2525c9f0");
    check_field_offset(lv, s2525c9f1, ABISELECT(448,316), "S2525C9.s2525c9f1");
    check_field_offset(lv, s2525c9f2, ABISELECT(536,380), "S2525C9.s2525c9f2");
    check_field_offset(lv, s2525c9f3, ABISELECT(544,384), "S2525C9.s2525c9f3");
    check_field_offset(lv, s2525c9f4, ABISELECT(560,392), "S2525C9.s2525c9f4");
    check_field_offset(lv, s2525c9f5, ABISELECT(576,400), "S2525C9.s2525c9f5");
    check_field_offset(lv, s2525c9f6, ABISELECT(608,424), "S2525C9.s2525c9f6");
    check_field_offset(lv, s2525c9f7, ABISELECT(616,432), "S2525C9.s2525c9f7");
    check_field_offset(lv, s2525c9f8, ABISELECT(624,440), "S2525C9.s2525c9f8");
    test_class_info(&lv, &cd_S2525C9);
    dp->~S2525C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C9(Test_S2525C9, "S2525C9", ABISELECT(4208,2960));

#else // __cplusplus

extern void _ZN7S2525C9C1Ev();
extern void _ZN7S2525C9D1Ev();
Name_Map name_map_S2525C9[] = {
  NSPAIR(_ZN7S2525C9C1Ev),
  NSPAIR(_ZN7S2525C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C10;
extern VTBL_ENTRY _ZTI8S2525C10[];
extern  VTBL_ENTRY _ZTV8S2525C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C10[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S2525C12;
extern VTBL_ENTRY _ZTI8S2525C12[];
extern  VTBL_ENTRY _ZTV8S2525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C12[];
static Base_Class bases_S2525C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(632,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
  1, 1},
  {&cd_S20507C11,    ABISELECT(720,508), //bcp->offset
    10, //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_S20507C6,    ABISELECT(880,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
    3, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(880,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
    4, //immediately_derived
  0, 0},
  {&cd_S2525C5,    ABISELECT(864,600), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C10,    ABISELECT(848,592), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2384,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(1840,1296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2525C12,    ABISELECT(1840,1296), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2525C9[];
extern void _ZN7S2525C9D1Ev();
extern void _ZN7S2525C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev)();
extern void ABISELECT(_ZThn720_N7S2525C9D1Ev,_ZThn508_N7S2525C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev)();
extern void ABISELECT(_ZThn720_N7S2525C9D0Ev,_ZThn508_N7S2525C9D0Ev)() __attribute__((weak));
extern void _ZN7S2525C52v1Ev();
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev)();
extern void ABISELECT(_ZThn1840_N7S2525C9D1Ev,_ZThn1296_N7S2525C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev)();
extern void ABISELECT(_ZThn1840_N7S2525C9D0Ev,_ZThn1296_N7S2525C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2525C9[] = {
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C9D0Ev,
  ABISELECT(-720,-508),
  ABISELECT(-720,-508),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev),
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(-848,-592),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  0,
  ABISELECT(-232,-156),
  ABISELECT(-864,-600),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  ABISELECT(-1840,-1296),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(-1840,-1296),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S2525C9[];
static  VTBL_ENTRY _tg__ZTV8S2525C10__7S2525C9[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C10__7S2525C9[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C9[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void _ZN8S2525C12D1Ev();
extern void _ZN8S2525C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C12__7S2525C9[] = {
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D0Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C58S2525C12__A1__7S2525C9[] = {
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C12__7S2525C9[] = {
  ABISELECT(1120,788),
  ABISELECT(1120,788),
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev),
};
static  VTT_ENTRY vtt_S2525C9[] = {
  {&(_ZTV7S2525C9[8]),  8,35},
  {&(_ZTV7S2525C9[13]),  13,35},
  {&(_ZTV7S2525C9[20]),  20,35},
  {&(_ZTV7S2525C9[24]),  24,35},
  {&(_ZTV7S2525C9[32]),  32,35},
  {&(_tg__ZTV8S2525C10__7S2525C9[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C10__7S2525C9[4]),  4,5},
  {&(_tg__ZTV7S2525C5__7S2525C9[3]),  3,4},
  {&(_tg__ZTV8S2525C12__7S2525C9[5]),  5,8},
  {&(_tg__ZTV7S2525C58S2525C12__A1__7S2525C9[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S2525C12__7S2525C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2525C9[];
extern  VTBL_ENTRY _ZTV7S2525C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C9[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N7S2525C9D0Ev,_ZThn1296_N7S2525C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N7S2525C9D1Ev,_ZThn1296_N7S2525C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S2525C9D0Ev,_ZThn508_N7S2525C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S2525C9D1Ev,_ZThn508_N7S2525C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2525C9 = {  "S2525C9", // class name
  bases_S2525C9, 13,
  &(vtc_S2525C9[0]), // expected_vtbl_contents
  &(vtt_S2525C9[0]), // expected_vtt_contents
  ABISELECT(4208,2960), // object size
  NSPAIRA(_ZTI7S2525C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2525C9),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2525C9),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  S2525C7  : virtual S20507C11 , virtual S2525C4 , virtual S2525C5 , virtual S2525C2 {
  long double s2525c7f0[9];
  int s2525c7f1;
  ::S2525C9 s2525c7f2;
  int s2525c7f3;
  __tsi64 s2525c7f4;
  ::S20507C11 s2525c7f5;
  __tsi64 s2525c7f6;
  virtual  ~S2525C7(); // _ZN7S2525C7D2Ev
  S2525C7(); // tgen
};
//SIG(-1 S2525C7) C1{ VBC2{ vd m Fp FD[5] Fp FD} VBC3{ BC4{ m Fi[10] Fp[6]} Fi FD Fi FC4 FC4 Fi FD[8]} VBC5{ BC3 VBC4 v1 FD[2] Fi[2] FD[3]} VBC6{ BC4 VBC3 VBC5 FD} vd FD[9] Fi FC7{ VBC4 VBC2 VBC8{ VBC4 VBC5 VBC3 FC9{}} VBC10{ BC4 VBC3 VBC2 BC5 vd FC8 FC5} FC3 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL}


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

static void Test_S2525C7()
{
  extern Class_Descriptor cd_S2525C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(367,1027)];
    init_test(&cd_S2525C7, buf);
    S2525C7 *dp, &lv = *(dp=new (buf) S2525C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5856,4104), "sizeof(S2525C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C7)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(4544,3180), "S2525C7");
    /*is_ambiguous_... S2525C7::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(4672,3264), "S2525C7");
    /*is_ambiguous_... S2525C7::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*), ABISELECT(4672,3264), "S2525C7");
    /*is_ambiguous_... S2525C2::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*), ABISELECT(4672,3264), "S2525C7");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(5120,3580), "S2525C7");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(5120,3580), "S2525C7");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(5648,3960), "S2525C7");
    check_base_class_offset(lv, (S2525C5*), ABISELECT(5104,3576), "S2525C7");
    check_base_class_offset(lv, (S2525C5*)(S2525C2*), ABISELECT(5104,3576), "S2525C7");
    /*is_ambiguous_... S2525C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*), ABISELECT(5752,4028), "S2525C7");
    check_base_class_offset(lv, (S2525C2*), ABISELECT(5744,4024), "S2525C7");
    check_field_offset(lv, s2525c7f0, ABISELECT(16,4), "S2525C7.s2525c7f0");
    check_field_offset(lv, s2525c7f1, ABISELECT(160,112), "S2525C7.s2525c7f1");
    check_field_offset(lv, s2525c7f2, ABISELECT(176,116), "S2525C7.s2525c7f2");
    check_field_offset(lv, s2525c7f3, ABISELECT(4384,3076), "S2525C7.s2525c7f3");
    check_field_offset(lv, s2525c7f4, ABISELECT(4392,3080), "S2525C7.s2525c7f4");
    check_field_offset(lv, s2525c7f5, ABISELECT(4400,3088), "S2525C7.s2525c7f5");
    check_field_offset(lv, s2525c7f6, ABISELECT(4528,3172), "S2525C7.s2525c7f6");
    test_class_info(&lv, &cd_S2525C7);
    dp->~S2525C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C7(Test_S2525C7, "S2525C7", ABISELECT(5856,4104));

#else // __cplusplus

extern void _ZN7S2525C7C1Ev();
extern void _ZN7S2525C7D2Ev();
Name_Map name_map_S2525C7[] = {
  NSPAIR(_ZN7S2525C7C1Ev),
  NSPAIR(_ZN7S2525C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
static Base_Class bases_S2525C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(4544,3180), //bcp->offset
    9, //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_S20507C6,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(5648,3960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(5104,3576), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(5752,4028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C2,    ABISELECT(5744,4024), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2525C7[];
extern void _ZN7S2525C7D1Ev();
extern void _ZN7S2525C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev)();
extern void ABISELECT(_ZThn4544_N7S2525C7D1Ev,_ZThn3180_N7S2525C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev)();
extern void ABISELECT(_ZThn4544_N7S2525C7D0Ev,_ZThn3180_N7S2525C7D0Ev)() __attribute__((weak));
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY vtc_S2525C7[] = {
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C7D0Ev,
  ABISELECT(-4544,-3180),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev),
  0,
  ABISELECT(544,384),
  ABISELECT(-5104,-3576),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-5744,-4024),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
};
extern VTBL_ENTRY _ZTV7S2525C7[];
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C7[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__7S2525C7[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C2__7S2525C7[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTT_ENTRY vtt_S2525C7[] = {
  {&(_ZTV7S2525C7[7]),  7,24},
  {&(_ZTV7S2525C7[12]),  12,24},
  {&(_ZTV7S2525C7[18]),  18,24},
  {&(_ZTV7S2525C7[24]),  24,24},
  {&(_tg__ZTV7S2525C5__7S2525C7[3]),  3,4},
  {&(_tg__ZTV7S2525C2__7S2525C7[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C2__7S2525C7[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2525C7[];
extern  VTBL_ENTRY _ZTV7S2525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C7[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S2525C7D0Ev,_ZThn3180_N7S2525C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S2525C7D1Ev,_ZThn3180_N7S2525C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2525C7 = {  "S2525C7", // class name
  bases_S2525C7, 9,
  &(vtc_S2525C7[0]), // expected_vtbl_contents
  &(vtt_S2525C7[0]), // expected_vtt_contents
  ABISELECT(5856,4104), // object size
  NSPAIRA(_ZTI7S2525C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2525C7),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2525C7),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2525C6  : virtual S20507C6 , virtual S2525C2 , S2525C7 {
  void *s2525c6f0;
  ::S2525C12 s2525c6f1;
  virtual  ~S2525C6(); // _ZN7S2525C6D2Ev
  S2525C6(); // tgen
};
//SIG(-1 S2525C6) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 VBC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC5{ BC4 VBC2 v1 FD[2] Fi[2] FD[3]} FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC5 VBC3 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC5 VBC4 FC10{}} VBC11{ BC2 VBC4 VBC7 BC5 vd FC9 FC5} FC4 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} vd Fp FC11}


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

static void Test_S2525C6()
{
  extern Class_Descriptor cd_S2525C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(556,1559)];
    init_test(&cd_S2525C6, buf);
    S2525C6 *dp, &lv = *(dp=new (buf) S2525C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8880,6232), "sizeof(S2525C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C6)");
    /*is_ambiguous_... S2525C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(7568,5308), "S2525C6");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(7568,5308), "S2525C6");
    /*is_ambiguous_... S2525C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*), ABISELECT(7672,5376), "S2525C6");
    /*is_ambiguous_... S2525C6::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(7776,5452), "S2525C6");
    /*is_ambiguous_... S2525C2::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*), ABISELECT(7776,5452), "S2525C6");
    /*is_ambiguous_... S2525C7::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C7*), ABISELECT(7776,5452), "S2525C6");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(8224,5768), "S2525C6");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(8224,5768), "S2525C6");
    check_base_class_offset(lv, (S2525C5*)(S2525C2*), ABISELECT(8208,5764), "S2525C6");
    check_base_class_offset(lv, (S2525C5*)(S2525C7*), ABISELECT(8208,5764), "S2525C6");
    check_base_class_offset(lv, (S2525C2*), ABISELECT(7664,5372), "S2525C6");
    check_base_class_offset(lv, (S2525C2*)(S2525C7*), ABISELECT(7664,5372), "S2525C6");
    check_base_class_offset(lv, (S20507C11*)(S2525C7*), ABISELECT(8752,6148), "S2525C6");
    check_base_class_offset(lv, (S2525C7*), 0, "S2525C6");
    check_field_offset(lv, s2525c6f0, ABISELECT(4536,3180), "S2525C6.s2525c6f0");
    check_field_offset(lv, s2525c6f1, ABISELECT(4544,3184), "S2525C6.s2525c6f1");
    test_class_info(&lv, &cd_S2525C6);
    dp->~S2525C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C6(Test_S2525C6, "S2525C6", ABISELECT(8880,6232));

#else // __cplusplus

extern void _ZN7S2525C6C1Ev();
extern void _ZN7S2525C6D2Ev();
Name_Map name_map_S2525C6[] = {
  NSPAIR(_ZN7S2525C6C1Ev),
  NSPAIR(_ZN7S2525C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S2525C7;
extern VTBL_ENTRY _ZTI7S2525C7[];
extern  VTBL_ENTRY _ZTV7S2525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C7[];
static Base_Class bases_S2525C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(7568,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(7672,5376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(8208,5764), //bcp->offset
    14, //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
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2525C2,    ABISELECT(7664,5372), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C11,    ABISELECT(8752,6148), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2525C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2525C6[];
extern void _ZN7S2525C6D1Ev();
extern void _ZN7S2525C6D0Ev();
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S2525C6D1Ev,_ZTv0_n12_N7S2525C6D1Ev)();
extern void ABISELECT(_ZThn8752_N7S2525C6D1Ev,_ZThn6148_N7S2525C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C6D0Ev,_ZTv0_n12_N7S2525C6D0Ev)();
extern void ABISELECT(_ZThn8752_N7S2525C6D0Ev,_ZThn6148_N7S2525C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2525C6[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C6[0]),
  (VTBL_ENTRY)&_ZN7S2525C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C6D0Ev,
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI7S2525C6[0]),
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI7S2525C6[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI7S2525C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C6D1Ev,_ZTv0_n12_N7S2525C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C6D0Ev,_ZTv0_n12_N7S2525C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S2525C6[];
extern void _ZN7S2525C7D1Ev();
extern void _ZN7S2525C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C7__7S2525C6[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev)();
extern void ABISELECT(_ZThn8752_N7S2525C7D1Ev,_ZThn6148_N7S2525C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev)();
extern void ABISELECT(_ZThn8752_N7S2525C7D0Ev,_ZThn6148_N7S2525C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C7__7S2525C6[] = {
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C7__7S2525C6[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__7S2525C7__7S2525C6[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__7S2525C6[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C2__7S2525C6[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C6[] = {
  ABISELECT(-640,-456),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTT_ENTRY vtt_S2525C6[] = {
  {&(_ZTV7S2525C6[7]),  7,24},
  {&(_tg__ZTV7S2525C7__7S2525C6[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S2525C7__7S2525C6[3]),  3,5},
  {&(_tg__ZTV7S2525C5__7S2525C7__7S2525C6[4]),  4,5},
  {&(_tg__ZTV7S2525C2__7S2525C7__7S2525C6[5]),  5,5},
  {&(_ZTV7S2525C6[14]),  14,24},
  {&(_ZTV7S2525C6[18]),  18,24},
  {&(_ZTV7S2525C6[22]),  22,24},
  {&(_tg__ZTV7S2525C2__7S2525C6[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C2__7S2525C6[4]),  4,5},
  {&(_tg__ZTV7S2525C5__7S2525C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2525C6[];
extern  VTBL_ENTRY _ZTV7S2525C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C6[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N7S2525C7D0Ev,_ZThn6148_N7S2525C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N7S2525C7D1Ev,_ZThn6148_N7S2525C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C6D0Ev,_ZTv0_n12_N7S2525C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N7S2525C6D0Ev,_ZThn6148_N7S2525C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C6D1Ev,_ZTv0_n12_N7S2525C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N7S2525C6D1Ev,_ZThn6148_N7S2525C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2525C6 = {  "S2525C6", // class name
  bases_S2525C6, 10,
  &(vtc_S2525C6[0]), // expected_vtbl_contents
  &(vtt_S2525C6[0]), // expected_vtt_contents
  ABISELECT(8880,6232), // object size
  NSPAIRA(_ZTI7S2525C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2525C6),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2525C6),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2525C15  : virtual S20507C6 , virtual S2525C4 , virtual S2525C10 , virtual S2525C12 , S2525C9 {
  ::S20507C11 s2525c15f0;
  long double s2525c15f1;
  virtual  ~S2525C15(); // _ZN8S2525C15D2Ev
  S2525C15(); // tgen
};
//SIG(-1 S2525C15) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ VBC2 VBC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} VBC3 FC6{}} VBC7{ BC2 VBC3 VBC8{ vd m Fp FD[5] Fp FD} BC5 vd FC4 FC5} BC9{ VBC2 VBC8 VBC4 VBC7 FC3 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC8 FD}


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

static void Test_S2525C15()
{
  extern Class_Descriptor cd_S2525C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(274,765)];
    init_test(&cd_S2525C15, buf);
    S2525C15 *dp, &lv = *(dp=new (buf) S2525C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4368,3056), "sizeof(S2525C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C15)");
    /*is_ambiguous_... S2525C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(784,540), "S2525C15");
    /*is_ambiguous_... S2525C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C10*), ABISELECT(784,540), "S2525C15");
    /*is_ambiguous_... S2525C15::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(784,540), "S2525C15");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*)(S2525C12*), ABISELECT(784,540), "S2525C15");
    /*is_ambiguous_... S2525C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C9*), ABISELECT(784,540), "S2525C15");
    /*is_ambiguous_... S2525C15::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(880,604), "S2525C15");
    /*is_ambiguous_... S2525C15::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*), ABISELECT(880,604), "S2525C15");
    /*is_ambiguous_... S2525C10::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C10*), ABISELECT(880,604), "S2525C15");
    /*is_ambiguous_... S2525C12::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C12*), ABISELECT(880,604), "S2525C15");
    /*is_ambiguous_... S2525C15::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(1344,928), "S2525C15");
    /*is_ambiguous_... S2525C15::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(1344,928), "S2525C15");
    check_base_class_offset(lv, (S2525C5*)(S2525C10*), ABISELECT(1328,924), "S2525C15");
    check_base_class_offset(lv, (S2525C10*), ABISELECT(1312,916), "S2525C15");
    check_base_class_offset(lv, (S2525C10*)(S2525C9*), ABISELECT(1312,916), "S2525C15");
    /*is_ambiguous_... S2525C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C12*), ABISELECT(2416,1692), "S2525C15");
    check_base_class_offset(lv, (S20507C11*)(S2525C12*), ABISELECT(4240,2972), "S2525C15");
    check_base_class_offset(lv, (S20507C11*)(S2525C9*), ABISELECT(4240,2972), "S2525C15");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(1888,1312), "S2525C15");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(1888,1312), "S2525C15");
    check_base_class_offset(lv, (S2525C5*)(S2525C12*), ABISELECT(1872,1308), "S2525C15");
    check_base_class_offset(lv, (S2525C12*), ABISELECT(1872,1308), "S2525C15");
    check_base_class_offset(lv, (S2525C12*)(S2525C9*), ABISELECT(1872,1308), "S2525C15");
    check_base_class_offset(lv, (S2525C9*), 0, "S2525C15");
    check_field_offset(lv, s2525c15f0, ABISELECT(640,444), "S2525C15.s2525c15f0");
    check_field_offset(lv, s2525c15f1, ABISELECT(768,528), "S2525C15.s2525c15f1");
    test_class_info(&lv, &cd_S2525C15);
    dp->~S2525C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C15(Test_S2525C15, "S2525C15", ABISELECT(4368,3056));

#else // __cplusplus

extern void _ZN8S2525C15C1Ev();
extern void _ZN8S2525C15D2Ev();
Name_Map name_map_S2525C15[] = {
  NSPAIR(_ZN8S2525C15C1Ev),
  NSPAIR(_ZN8S2525C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S2525C10;
extern VTBL_ENTRY _ZTI8S2525C10[];
extern  VTBL_ENTRY _ZTV8S2525C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C10[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S2525C12;
extern VTBL_ENTRY _ZTI8S2525C12[];
extern  VTBL_ENTRY _ZTV8S2525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C12[];
extern Class_Descriptor cd_S2525C9;
extern VTBL_ENTRY _ZTI7S2525C9[];
extern  VTBL_ENTRY _ZTV7S2525C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C9[];
static Base_Class bases_S2525C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(784,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(880,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
    2, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(880,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(1328,924), //bcp->offset
    15, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2525C10,    ABISELECT(1312,916), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2416,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4240,2972), //bcp->offset
    30, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(1872,1308), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2525C12,    ABISELECT(1872,1308), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S2525C9,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2525C15[];
extern void _ZN8S2525C15D1Ev();
extern void _ZN8S2525C15D0Ev();
extern void _ZN7S2525C52v1Ev();
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S2525C15D1Ev,_ZTv0_n28_N8S2525C15D1Ev)();
extern void ABISELECT(_ZThn1872_N8S2525C15D1Ev,_ZThn1308_N8S2525C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2525C15D0Ev,_ZTv0_n28_N8S2525C15D0Ev)();
extern void ABISELECT(_ZThn1872_N8S2525C15D0Ev,_ZThn1308_N8S2525C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2525C15D1Ev,_ZTv0_n12_N8S2525C15D1Ev)();
extern void ABISELECT(_ZThn4240_N8S2525C15D1Ev,_ZThn2972_N8S2525C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2525C15D0Ev,_ZTv0_n12_N8S2525C15D0Ev)();
extern void ABISELECT(_ZThn4240_N8S2525C15D0Ev,_ZThn2972_N8S2525C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2525C15[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN8S2525C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C15D0Ev,
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C15D1Ev,_ZTv0_n28_N8S2525C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C15D0Ev,_ZTv0_n28_N8S2525C15D0Ev),
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C15D1Ev,_ZTv0_n12_N8S2525C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C15D0Ev,_ZTv0_n12_N8S2525C15D0Ev),
};
extern VTBL_ENTRY _ZTV8S2525C15[];
extern void _ZN7S2525C9D1Ev();
extern void _ZN7S2525C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C9__8S2525C15[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev)();
extern void ABISELECT(_ZThn4240_N7S2525C9D1Ev,_ZThn2972_N7S2525C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev)();
extern void ABISELECT(_ZThn4240_N7S2525C9D0Ev,_ZThn2972_N7S2525C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C9__8S2525C15[] = {
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__7S2525C9__8S2525C15[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C9__8S2525C15[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev)();
extern void ABISELECT(_ZThn1872_N7S2525C9D1Ev,_ZThn1308_N7S2525C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev)();
extern void ABISELECT(_ZThn1872_N7S2525C9D0Ev,_ZThn1308_N7S2525C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2525C12__7S2525C9__8S2525C15[] = {
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__8S2525C15[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C10__8S2525C15[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C15[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void _ZN8S2525C12D1Ev();
extern void _ZN8S2525C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C12__8S2525C15[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D0Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C58S2525C12__A1__8S2525C15[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev)();
extern void ABISELECT(_ZThn2368_N8S2525C12D1Ev,_ZThn1664_N8S2525C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev)();
extern void ABISELECT(_ZThn2368_N8S2525C12D0Ev,_ZThn1664_N8S2525C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C12__8S2525C15[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev),
};
static  VTT_ENTRY vtt_S2525C15[] = {
  {&(_ZTV8S2525C15[8]),  8,35},
  {&(_tg__ZTV7S2525C9__8S2525C15[8]),  8,10},
  {&(_tg__ZTV9S20507C11__7S2525C9__8S2525C15[3]),  3,5},
  {&(_tg__ZTV8S2525C10__7S2525C9__8S2525C15[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C9__8S2525C15[4]),  4,5},
  {&(_tg__ZTV8S2525C12__7S2525C9__8S2525C15[7]),  7,10},
  {&(_ZTV8S2525C15[15]),  15,35},
  {&(_ZTV8S2525C15[19]),  19,35},
  {&(_ZTV8S2525C15[27]),  27,35},
  {&(_ZTV8S2525C15[33]),  33,35},
  {&(_tg__ZTV8S2525C10__8S2525C15[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C10__8S2525C15[4]),  4,5},
  {&(_tg__ZTV7S2525C5__8S2525C15[3]),  3,4},
  {&(_tg__ZTV8S2525C12__8S2525C15[5]),  5,8},
  {&(_tg__ZTV7S2525C58S2525C12__A1__8S2525C15[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S2525C12__8S2525C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2525C15[];
extern  VTBL_ENTRY _ZTV8S2525C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C15[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S2525C12D0Ev,_ZThn1664_N8S2525C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S2525C12D1Ev,_ZThn1664_N8S2525C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N7S2525C9D0Ev,_ZThn1308_N7S2525C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N7S2525C9D1Ev,_ZThn1308_N7S2525C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N7S2525C9D0Ev,_ZThn2972_N7S2525C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N7S2525C9D1Ev,_ZThn2972_N7S2525C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C15D0Ev,_ZTv0_n12_N8S2525C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S2525C15D0Ev,_ZThn2972_N8S2525C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C15D1Ev,_ZTv0_n12_N8S2525C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S2525C15D1Ev,_ZThn2972_N8S2525C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2525C15D0Ev,_ZTv0_n28_N8S2525C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S2525C15D0Ev,_ZThn1308_N8S2525C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2525C15D1Ev,_ZTv0_n28_N8S2525C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S2525C15D1Ev,_ZThn1308_N8S2525C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2525C15 = {  "S2525C15", // class name
  bases_S2525C15, 14,
  &(vtc_S2525C15[0]), // expected_vtbl_contents
  &(vtt_S2525C15[0]), // expected_vtt_contents
  ABISELECT(4368,3056), // object size
  NSPAIRA(_ZTI8S2525C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2525C15),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2525C15),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2525C14  : virtual S20507C6 , virtual S2525C5 , S2525C2 , S2525C7 , virtual S2525C12 {
  int s2525c14f0;
  void *s2525c14f1;
  int s2525c14f2:9;
  char s2525c14f3;
  long double s2525c14f4;
  ::S2525C5 s2525c14f5;
  ::S2525C15 s2525c14f6;
  char s2525c14f7;
  short s2525c14f8[7];
  ::S468C20_nt s2525c14f9;
  int s2525c14f10;
  char s2525c14f11;
  long s2525c14f12;
  virtual  ~S2525C14(); // _ZN8S2525C14D2Ev
  S2525C14(); // tgen
};
//SIG(-1 S2525C14) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} BC5{ BC2 VBC4 VBC3 FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC3 VBC5 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC3 VBC4 FC10{}} VBC11{ BC2 VBC4 VBC7 BC3 vd FC9 FC3} FC4 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} VBC11 vd Fi Fp Fi:9 Fc FD FC3 FC12{ VBC2 VBC4 VBC9 VBC11 BC8 vd FC7 FD} Fc Fs[7] FC10 Fi Fc Fl}


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

static void Test_S2525C14()
{
  extern Class_Descriptor cd_S2525C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(839,2353)];
    init_test(&cd_S2525C14, buf);
    S2525C14 *dp, &lv = *(dp=new (buf) S2525C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13408,9408), "sizeof(S2525C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C14)");
    /*is_ambiguous_... S2525C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(9736,6820), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(9736,6820), "S2525C14");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*)(S2525C12*), ABISELECT(9736,6820), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(9840,6888), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(9840,6888), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C5*), ABISELECT(9824,6884), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C2*), ABISELECT(9824,6884), "S2525C14");
    check_base_class_offset(lv, (S2525C5*)(S2525C7*), ABISELECT(9824,6884), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C2*), ABISELECT(9824,6884), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*), ABISELECT(8,4), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(10368,7268), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*), ABISELECT(10368,7268), "S2525C14");
    /*is_ambiguous_... S2525C7::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C7*), ABISELECT(10368,7268), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*), ABISELECT(10368,7268), "S2525C14");
    /*is_ambiguous_... S2525C12::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C12*), ABISELECT(10368,7268), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C2*), 0, "S2525C14");
    check_base_class_offset(lv, (S20507C11*)(S2525C7*), ABISELECT(10800,7580), "S2525C14");
    check_base_class_offset(lv, (S20507C11*)(S2525C12*), ABISELECT(10800,7580), "S2525C14");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*), ABISELECT(10936,7668), "S2525C14");
    check_base_class_offset(lv, (S2525C2*)(S2525C7*), ABISELECT(10928,7664), "S2525C14");
    check_base_class_offset(lv, (S2525C7*), ABISELECT(112,80), "S2525C14");
    /*is_ambiguous_... S2525C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C12*), ABISELECT(11584,8128), "S2525C14");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(11056,7748), "S2525C14");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(11056,7748), "S2525C14");
    check_base_class_offset(lv, (S2525C5*)(S2525C12*), ABISELECT(11040,7744), "S2525C14");
    check_base_class_offset(lv, (S2525C12*), ABISELECT(11040,7744), "S2525C14");
    check_field_offset(lv, s2525c14f0, ABISELECT(4648,3260), "S2525C14.s2525c14f0");
    check_field_offset(lv, s2525c14f1, ABISELECT(4656,3264), "S2525C14.s2525c14f1");
    set_bf_and_test(lv, s2525c14f2, ABISELECT(4664,3268), 0, 9, 1, "S2525C14");
    set_bf_and_test(lv, s2525c14f2, ABISELECT(4664,3268), 0, 9, hide_sll(1LL<<8), "S2525C14");
    check_field_offset(lv, s2525c14f3, ABISELECT(4666,3270), "S2525C14.s2525c14f3");
    check_field_offset(lv, s2525c14f4, ABISELECT(4672,3272), "S2525C14.s2525c14f4");
    check_field_offset(lv, s2525c14f5, ABISELECT(4688,3284), "S2525C14.s2525c14f5");
    check_field_offset(lv, s2525c14f6, ABISELECT(5328,3732), "S2525C14.s2525c14f6");
    check_field_offset(lv, s2525c14f7, ABISELECT(9696,6788), "S2525C14.s2525c14f7");
    check_field_offset(lv, s2525c14f8, ABISELECT(9698,6790), "S2525C14.s2525c14f8");
    check_field_offset(lv, s2525c14f9, ABISELECT(9712,6804), "S2525C14.s2525c14f9");
    check_field_offset(lv, s2525c14f10, ABISELECT(9716,6808), "S2525C14.s2525c14f10");
    check_field_offset(lv, s2525c14f11, ABISELECT(9720,6812), "S2525C14.s2525c14f11");
    check_field_offset(lv, s2525c14f12, ABISELECT(9728,6816), "S2525C14.s2525c14f12");
    test_class_info(&lv, &cd_S2525C14);
    dp->~S2525C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C14(Test_S2525C14, "S2525C14", ABISELECT(13408,9408));

#else // __cplusplus

extern void _ZN8S2525C14C1Ev();
extern void _ZN8S2525C14D2Ev();
Name_Map name_map_S2525C14[] = {
  NSPAIR(_ZN8S2525C14C1Ev),
  NSPAIR(_ZN8S2525C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
extern Class_Descriptor cd_S2525C7;
extern VTBL_ENTRY _ZTI7S2525C7[];
extern  VTBL_ENTRY _ZTV7S2525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S2525C12;
extern VTBL_ENTRY _ZTI8S2525C12[];
extern  VTBL_ENTRY _ZTV8S2525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C12[];
static Base_Class bases_S2525C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(9736,6820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(9840,6888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(9840,6888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(9824,6884), //bcp->offset
    19, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(10368,7268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(10368,7268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C2,    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_S20507C11,    ABISELECT(10800,7580), //bcp->offset
    24, //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
    11, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(10936,7668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C2,    ABISELECT(10928,7664), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2525C7,    ABISELECT(112,80), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(11584,8128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(11056,7748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(11056,7748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(11040,7744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2525C12,    ABISELECT(11040,7744), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //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 _ZTI8S2525C14[];
extern void _ZN8S2525C14D1Ev();
extern void _ZN8S2525C14D0Ev();
extern void ABISELECT(_ZThn112_N8S2525C14D1Ev,_ZThn80_N8S2525C14D1Ev)();
extern void ABISELECT(_ZThn112_N8S2525C14D0Ev,_ZThn80_N8S2525C14D0Ev)();
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S2525C14D1Ev,_ZTv0_n12_N8S2525C14D1Ev)();
extern void ABISELECT(_ZThn10800_N8S2525C14D1Ev,_ZThn7580_N8S2525C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2525C14D0Ev,_ZTv0_n12_N8S2525C14D0Ev)();
extern void ABISELECT(_ZThn10800_N8S2525C14D0Ev,_ZThn7580_N8S2525C14D0Ev)() __attribute__((weak));
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S2525C14D1Ev,_ZTv0_n28_N8S2525C14D1Ev)();
extern void ABISELECT(_ZThn11040_N8S2525C14D1Ev,_ZThn7744_N8S2525C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2525C14D0Ev,_ZTv0_n28_N8S2525C14D0Ev)();
extern void ABISELECT(_ZThn11040_N8S2525C14D0Ev,_ZThn7744_N8S2525C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2525C14[] = {
  ABISELECT(11040,7744),
  ABISELECT(10928,7664),
  ABISELECT(10800,7580),
  ABISELECT(9736,6820),
  ABISELECT(9824,6884),
  ABISELECT(10368,7268),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN8S2525C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C14D0Ev,
  ABISELECT(10816,7584),
  ABISELECT(9624,6740),
  ABISELECT(9712,6804),
  ABISELECT(10256,7188),
  ABISELECT(10688,7500),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S2525C14D1Ev,_ZThn80_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S2525C14D0Ev,_ZThn80_N8S2525C14D0Ev),
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9824,-6884),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  ABISELECT(-10800,-7580),
  ABISELECT(-10800,-7580),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C14D1Ev,_ZTv0_n12_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C14D0Ev,_ZTv0_n12_N8S2525C14D0Ev),
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  ABISELECT(-10928,-7664),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  ABISELECT(-11040,-7744),
  0,
  ABISELECT(-240,-164),
  ABISELECT(-672,-476),
  ABISELECT(-1304,-924),
  ABISELECT(-11040,-7744),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C14D1Ev,_ZTv0_n28_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C14D0Ev,_ZTv0_n28_N8S2525C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S2525C14[];
static  VTBL_ENTRY _tg__ZTV7S2525C2__A__8S2525C14[] = {
  ABISELECT(9736,6820),
  ABISELECT(9824,6884),
  ABISELECT(10368,7268),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C2__A__8S2525C14[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9824,-6884),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C7D1Ev();
extern void _ZN7S2525C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C7__8S2525C14[] = {
  ABISELECT(10816,7584),
  ABISELECT(9624,6740),
  ABISELECT(9712,6804),
  ABISELECT(10256,7188),
  ABISELECT(10688,7500),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev)();
extern void ABISELECT(_ZThn10688_N7S2525C7D1Ev,_ZThn7500_N7S2525C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev)();
extern void ABISELECT(_ZThn10688_N7S2525C7D0Ev,_ZThn7500_N7S2525C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C7__8S2525C14[] = {
  ABISELECT(-10688,-7500),
  ABISELECT(-10688,-7500),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C7__8S2525C14[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-9712,-6804),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__7S2525C7__8S2525C14[] = {
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  ABISELECT(-10816,-7584),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C14[] = {
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__A1__8S2525C14[] = {
  ABISELECT(-1192,-844),
  ABISELECT(-1104,-780),
  ABISELECT(-560,-396),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C2__A1__8S2525C14[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(1104,780),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void _ZN8S2525C12D1Ev();
extern void _ZN8S2525C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C12__8S2525C14[] = {
  ABISELECT(-240,-164),
  ABISELECT(-672,-476),
  ABISELECT(-1304,-924),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D0Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C58S2525C12__A1__8S2525C14[] = {
  ABISELECT(-1304,-924),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C12__8S2525C14[] = {
  ABISELECT(240,164),
  ABISELECT(240,164),
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev),
};
static  VTT_ENTRY vtt_S2525C14[] = {
  {&(_ZTV8S2525C14[8]),  8,44},
  {&(_tg__ZTV7S2525C2__A__8S2525C14[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C2__A__8S2525C14[4]),  4,5},
  {&(_tg__ZTV7S2525C7__8S2525C14[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S2525C7__8S2525C14[3]),  3,5},
  {&(_tg__ZTV7S2525C5__7S2525C7__8S2525C14[4]),  4,5},
  {&(_tg__ZTV7S2525C2__7S2525C7__8S2525C14[5]),  5,5},
  {&(_ZTV8S2525C14[23]),  23,44},
  {&(_ZTV8S2525C14[17]),  17,44},
  {&(_ZTV8S2525C14[27]),  27,44},
  {&(_ZTV8S2525C14[34]),  34,44},
  {&(_ZTV8S2525C14[41]),  41,44},
  {&(_tg__ZTV7S2525C5__8S2525C14[3]),  3,4},
  {&(_tg__ZTV7S2525C2__A1__8S2525C14[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C2__A1__8S2525C14[4]),  4,5},
  {&(_tg__ZTV8S2525C12__8S2525C14[5]),  5,8},
  {&(_tg__ZTV7S2525C58S2525C12__A1__8S2525C14[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S2525C12__8S2525C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2525C14[];
extern  VTBL_ENTRY _ZTV8S2525C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C14[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10688_N7S2525C7D0Ev,_ZThn7500_N7S2525C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10688_N7S2525C7D1Ev,_ZThn7500_N7S2525C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2525C14D0Ev,_ZTv0_n28_N8S2525C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11040_N8S2525C14D0Ev,_ZThn7744_N8S2525C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2525C14D1Ev,_ZTv0_n28_N8S2525C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11040_N8S2525C14D1Ev,_ZThn7744_N8S2525C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C14D0Ev,_ZTv0_n12_N8S2525C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S2525C14D0Ev,_ZThn7580_N8S2525C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C14D1Ev,_ZTv0_n12_N8S2525C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S2525C14D1Ev,_ZThn7580_N8S2525C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2525C14 = {  "S2525C14", // class name
  bases_S2525C14, 17,
  &(vtc_S2525C14[0]), // expected_vtbl_contents
  &(vtt_S2525C14[0]), // expected_vtt_contents
  ABISELECT(13408,9408), // object size
  NSPAIRA(_ZTI8S2525C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2525C14),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2525C14),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2525C13  : virtual S20507C11 , S2525C9 , S2525C5 , virtual S2525C14 , virtual S2525C15 {
  ::S2525C5 s2525c13f0;
  char s2525c13f1;
  long double s2525c13f2;
  int s2525c13f3;
  long double s2525c13f4;
  ::S2525C10 s2525c13f5;
  virtual  ~S2525C13(); // _ZN8S2525C13D2Ev
  virtual void  v2(); // _ZN8S2525C132v2Ev
  virtual void  v3(); // _ZN8S2525C132v3Ev
  virtual void  v4(); // _ZN8S2525C132v4Ev
  S2525C13(); // tgen
};
//SIG(-1 S2525C13) C1{ VBC2{ vd m Fp FD[5] Fp FD} BC3{ VBC4{ m Fi[10] Fp[6]} VBC2 VBC5{ VBC4 VBC6{ BC7{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v4 FD[2] Fi[2] FD[3]} VBC7 FC8{}} VBC9{ BC4 VBC7 VBC2 BC6 vd FC5 FC6} FC7 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} BC6 VBC10{ VBC4 VBC6 BC11{ BC4 VBC7 VBC6 FD} BC12{ VBC2 VBC7 VBC6 VBC11 vd FD[9] Fi FC3 Fi FL FC2 FL} VBC9 vd Fi Fp Fi:9 Fc FD FC6 FC13{ VBC4 VBC7 VBC5 VBC9 BC3 vd FC2 FD} Fc Fs[7] FC8 Fi Fc Fl} VBC13 vd v1 v2 v3 FC6 Fc FD Fi FD FC5}


 S2525C13 ::~S2525C13(){ note_dtor("S2525C13", this);}
void  S2525C13 ::v2(){vfunc_called(this, "_ZN8S2525C132v2Ev");}
void  S2525C13 ::v3(){vfunc_called(this, "_ZN8S2525C132v3Ev");}
void  S2525C13 ::v4(){vfunc_called(this, "_ZN8S2525C132v4Ev");}
S2525C13 ::S2525C13(){ note_ctor("S2525C13", this);} // tgen

static void Test_S2525C13()
{
  extern Class_Descriptor cd_S2525C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1076,3009)];
    init_test(&cd_S2525C13, buf);
    S2525C13 *dp, &lv = *(dp=new (buf) S2525C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17200,12032), "sizeof(S2525C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C13)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2976,2076), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S20507C11*)(S2525C9*), ABISELECT(2976,2076), "S2525C13");
    check_base_class_offset(lv, (S20507C11*)(S2525C12*), ABISELECT(2976,2076), "S2525C13");
    check_base_class_offset(lv, (S20507C11*)(S2525C7*)(S2525C14*), ABISELECT(2976,2076), "S2525C13");
    check_base_class_offset(lv, (S20507C11*)(S2525C9*)(S2525C15*), ABISELECT(2976,2076), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C9*), ABISELECT(3104,2160), "S2525C13");
    /*is_ambiguous_... S2525C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C10*), ABISELECT(3104,2160), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(3104,2160), "S2525C13");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*)(S2525C12*), ABISELECT(3104,2160), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(3104,2160), "S2525C13");
    /*is_ambiguous_... S2525C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C14*), ABISELECT(3104,2160), "S2525C13");
    /*is_ambiguous_... S2525C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C15*), ABISELECT(3104,2160), "S2525C13");
    /*is_ambiguous_... S2525C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C9*)(S2525C15*), ABISELECT(3104,2160), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(3232,2236), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(3232,2236), "S2525C13");
    check_base_class_offset(lv, (S2525C5*)(S2525C10*), ABISELECT(3216,2232), "S2525C13");
    /*is_ambiguous_... S2525C14::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C14*), ABISELECT(3216,2232), "S2525C13");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C2*)(S2525C14*), ABISELECT(3216,2232), "S2525C13");
    check_base_class_offset(lv, (S2525C5*)(S2525C7*)(S2525C14*), ABISELECT(3216,2232), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C2*), ABISELECT(3216,2232), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(3760,2616), "S2525C13");
    /*is_ambiguous_... S2525C10::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C10*), ABISELECT(3760,2616), "S2525C13");
    /*is_ambiguous_... S2525C12::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C12*), ABISELECT(3760,2616), "S2525C13");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*)(S2525C14*), ABISELECT(3760,2616), "S2525C13");
    /*is_ambiguous_... S2525C7::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C7*)(S2525C14*), ABISELECT(3760,2616), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*), ABISELECT(3760,2616), "S2525C13");
    /*is_ambiguous_... S2525C15::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C15*), ABISELECT(3760,2616), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S2525C10*)(S2525C9*), ABISELECT(3192,2224), "S2525C13");
    check_base_class_offset(lv, (S2525C10*)(S2525C15*), ABISELECT(3192,2224), "S2525C13");
    check_base_class_offset(lv, (S2525C10*)(S2525C9*)(S2525C15*), ABISELECT(3192,2224), "S2525C13");
    /*is_ambiguous_... S2525C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C12*), ABISELECT(4736,3312), "S2525C13");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(4208,2932), "S2525C13");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(4208,2932), "S2525C13");
    check_base_class_offset(lv, (S2525C5*)(S2525C12*), ABISELECT(4192,2928), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S2525C12*)(S2525C9*), ABISELECT(4192,2928), "S2525C13");
    check_base_class_offset(lv, (S2525C12*)(S2525C14*), ABISELECT(4192,2928), "S2525C13");
    check_base_class_offset(lv, (S2525C12*)(S2525C15*), ABISELECT(4192,2928), "S2525C13");
    check_base_class_offset(lv, (S2525C12*)(S2525C9*)(S2525C15*), ABISELECT(4192,2928), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S2525C9*), 0, "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(656,448), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(656,448), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C5*), ABISELECT(640,444), "S2525C13");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*)(S2525C14*), ABISELECT(6568,4596), "S2525C13");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C2*)(S2525C14*), ABISELECT(6560,4592), "S2525C13");
    /*is_ambiguous_... S2525C13::S2525C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*), ABISELECT(16312,11416), "S2525C13");
    check_base_class_offset(lv, (S2525C2*)(S2525C7*)(S2525C14*), ABISELECT(16304,11412), "S2525C13");
    check_base_class_offset(lv, (S2525C7*)(S2525C14*), ABISELECT(6672,4672), "S2525C13");
    check_base_class_offset(lv, (S2525C14*), ABISELECT(6560,4592), "S2525C13");
    check_base_class_offset(lv, (S2525C9*)(S2525C15*), ABISELECT(16416,11492), "S2525C13");
    check_base_class_offset(lv, (S2525C15*), ABISELECT(16416,11492), "S2525C13");
    check_field_offset(lv, s2525c13f0, ABISELECT(1184,828), "S2525C13.s2525c13f0");
    check_field_offset(lv, s2525c13f1, ABISELECT(1824,1276), "S2525C13.s2525c13f1");
    check_field_offset(lv, s2525c13f2, ABISELECT(1840,1280), "S2525C13.s2525c13f2");
    check_field_offset(lv, s2525c13f3, ABISELECT(1856,1292), "S2525C13.s2525c13f3");
    check_field_offset(lv, s2525c13f4, ABISELECT(1872,1296), "S2525C13.s2525c13f4");
    check_field_offset(lv, s2525c13f5, ABISELECT(1888,1308), "S2525C13.s2525c13f5");
    test_class_info(&lv, &cd_S2525C13);
    dp->~S2525C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C13(Test_S2525C13, "S2525C13", ABISELECT(17200,12032));

#else // __cplusplus

extern void _ZN8S2525C13C1Ev();
extern void _ZN8S2525C13D2Ev();
Name_Map name_map_S2525C13[] = {
  NSPAIR(_ZN8S2525C13C1Ev),
  NSPAIR(_ZN8S2525C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C10;
extern VTBL_ENTRY _ZTI8S2525C10[];
extern  VTBL_ENTRY _ZTV8S2525C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C10[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S2525C12;
extern VTBL_ENTRY _ZTI8S2525C12[];
extern  VTBL_ENTRY _ZTV8S2525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C12[];
extern Class_Descriptor cd_S2525C9;
extern VTBL_ENTRY _ZTI7S2525C9[];
extern  VTBL_ENTRY _ZTV7S2525C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C9[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
extern Class_Descriptor cd_S2525C7;
extern VTBL_ENTRY _ZTI7S2525C7[];
extern  VTBL_ENTRY _ZTV7S2525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C7[];
extern Class_Descriptor cd_S2525C14;
extern VTBL_ENTRY _ZTI8S2525C14[];
extern  VTBL_ENTRY _ZTV8S2525C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C14[];
extern Class_Descriptor cd_S2525C9;
extern VTBL_ENTRY _ZTI7S2525C9[];
extern  VTBL_ENTRY _ZTV7S2525C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C9[];
extern Class_Descriptor cd_S2525C15;
extern VTBL_ENTRY _ZTI8S2525C15[];
extern  VTBL_ENTRY _ZTV8S2525C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C15[];
static Base_Class bases_S2525C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(2976,2076), //bcp->offset
    20, //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_S20507C6,    ABISELECT(3104,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
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(3232,2236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(3232,2236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(3216,2232), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(3760,2616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(3760,2616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C10,    ABISELECT(3192,2224), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(4736,3312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(4208,2932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(4208,2932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(4192,2928), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2525C12,    ABISELECT(4192,2928), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S2525C9,    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},
  {&cd_S20507C6,    ABISELECT(656,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
    15, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(656,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
    16, //immediately_derived
  0, 0},
  {&cd_S2525C5,    ABISELECT(640,444), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(6568,4596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C2,    ABISELECT(6560,4592), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(16312,11416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C2,    ABISELECT(16304,11412), //bcp->offset
    65, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S2525C7,    ABISELECT(6672,4672), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2525C14,    ABISELECT(6560,4592), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2525C9,    ABISELECT(16416,11492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2525C15,    ABISELECT(16416,11492), //bcp->offset
    70, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2525C13[];
extern void _ZN8S2525C13D1Ev();
extern void _ZN8S2525C13D0Ev();
extern void _ZN8S2525C132v2Ev();
extern void _ZN8S2525C132v3Ev();
extern void _ZN8S2525C132v4Ev();
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S2525C13D1Ev,_ZTv0_n12_N8S2525C13D1Ev)();
extern void ABISELECT(_ZThn2976_N8S2525C13D1Ev,_ZThn2076_N8S2525C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2525C13D0Ev,_ZTv0_n12_N8S2525C13D0Ev)();
extern void ABISELECT(_ZThn2976_N8S2525C13D0Ev,_ZThn2076_N8S2525C13D0Ev)() __attribute__((weak));
extern void _ZN7S2525C52v1Ev();
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S2525C13D1Ev,_ZTv0_n28_N8S2525C13D1Ev)();
extern void ABISELECT(_ZThn4192_N8S2525C13D1Ev,_ZThn2928_N8S2525C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2525C13D0Ev,_ZTv0_n28_N8S2525C13D0Ev)();
extern void ABISELECT(_ZThn4192_N8S2525C13D0Ev,_ZThn2928_N8S2525C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev)();
extern void ABISELECT(_ZThn6560_N8S2525C13D1Ev,_ZThn4592_N8S2525C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev)();
extern void ABISELECT(_ZThn6560_N8S2525C13D0Ev,_ZThn4592_N8S2525C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn112_n72_N8S2525C13D1Ev,_ZTvn80_n36_N8S2525C13D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N8S2525C13D0Ev,_ZTvn80_n36_N8S2525C13D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev)();
extern void ABISELECT(_ZThn16416_N8S2525C13D1Ev,_ZThn11492_N8S2525C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev)();
extern void ABISELECT(_ZThn16416_N8S2525C13D0Ev,_ZThn11492_N8S2525C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2525C13[] = {
  ABISELECT(16416,11492),
  ABISELECT(16304,11412),
  ABISELECT(6560,4592),
  ABISELECT(4192,2928),
  ABISELECT(3760,2616),
  ABISELECT(3216,2232),
  ABISELECT(3192,2224),
  ABISELECT(2976,2076),
  ABISELECT(3104,2160),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&_ZN8S2525C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C13D0Ev,
  (VTBL_ENTRY)&_ZN8S2525C132v2Ev,
  (VTBL_ENTRY)&_ZN8S2525C132v3Ev,
  (VTBL_ENTRY)&_ZN8S2525C132v4Ev,
  ABISELECT(2464,1716),
  ABISELECT(-640,-444),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  ABISELECT(-2976,-2076),
  ABISELECT(-2976,-2076),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C13D1Ev,_ZTv0_n12_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C13D0Ev,_ZTv0_n12_N8S2525C13D0Ev),
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  ABISELECT(-3192,-2224),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  0,
  ABISELECT(-112,-72),
  ABISELECT(-3216,-2232),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  ABISELECT(-4192,-2928),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(-4192,-2928),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C13D1Ev,_ZTv0_n28_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C13D0Ev,_ZTv0_n28_N8S2525C13D0Ev),
  ABISELECT(-6560,-4592),
  ABISELECT(-2368,-1664),
  ABISELECT(9744,6820),
  ABISELECT(-3584,-2516),
  ABISELECT(-3456,-2432),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  ABISELECT(-6560,-4592),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev),
  ABISELECT(9632,6740),
  ABISELECT(-3568,-2512),
  ABISELECT(-3456,-2440),
  ABISELECT(-2912,-2056),
  ABISELECT(-3696,-2596),
  ABISELECT(-6672,-4672),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S2525C13D1Ev,_ZTvn80_n36_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S2525C13D0Ev,_ZTvn80_n36_N8S2525C13D0Ev),
  ABISELECT(-13200,-9252),
  ABISELECT(-13088,-9180),
  ABISELECT(-12544,-8796),
  ABISELECT(-16304,-11412),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  ABISELECT(-16416,-11492),
  ABISELECT(-12224,-8564),
  ABISELECT(-12656,-8876),
  ABISELECT(-13200,-9260),
  ABISELECT(-13224,-9268),
  ABISELECT(-13440,-9416),
  ABISELECT(-13312,-9332),
  ABISELECT(-16416,-11492),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S2525C13[];
extern void _ZN7S2525C9D1Ev();
extern void _ZN7S2525C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C9__8S2525C13[] = {
  ABISELECT(4192,2928),
  ABISELECT(3760,2616),
  ABISELECT(3216,2232),
  ABISELECT(3192,2224),
  ABISELECT(2976,2076),
  ABISELECT(3104,2160),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev)();
extern void ABISELECT(_ZThn2976_N7S2525C9D1Ev,_ZThn2076_N7S2525C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev)();
extern void ABISELECT(_ZThn2976_N7S2525C9D0Ev,_ZThn2076_N7S2525C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C9__8S2525C13[] = {
  ABISELECT(-2976,-2076),
  ABISELECT(-2976,-2076),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__7S2525C9__8S2525C13[] = {
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  ABISELECT(-3192,-2224),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C9__8S2525C13[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(-3216,-2232),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev)();
extern void ABISELECT(_ZThn4192_N7S2525C9D1Ev,_ZThn2928_N7S2525C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev)();
extern void ABISELECT(_ZThn4192_N7S2525C9D0Ev,_ZThn2928_N7S2525C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2525C12__7S2525C9__8S2525C13[] = {
  ABISELECT(-4192,-2928),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(-4192,-2928),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__A__8S2525C13[] = {
  ABISELECT(2464,1716),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__8S2525C13[] = {
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C10__8S2525C13[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C13[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void _ZN8S2525C12D1Ev();
extern void _ZN8S2525C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C12__8S2525C13[] = {
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D0Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C58S2525C12__A1__8S2525C13[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C12__8S2525C13[] = {
  ABISELECT(1216,852),
  ABISELECT(1216,852),
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev),
};
extern void _ZN8S2525C14D1Ev();
extern void _ZN8S2525C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C14__8S2525C13[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(9744,6820),
  ABISELECT(-3584,-2516),
  ABISELECT(-3456,-2432),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN8S2525C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C28S2525C14__8S2525C13[] = {
  ABISELECT(-3456,-2432),
  ABISELECT(-3344,-2360),
  ABISELECT(-2800,-1976),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C28S2525C14__8S2525C13[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(3344,2360),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C7D1Ev();
extern void _ZN7S2525C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C78S2525C14__8S2525C13[] = {
  ABISELECT(9632,6740),
  ABISELECT(-3568,-2512),
  ABISELECT(-3456,-2440),
  ABISELECT(-2912,-2056),
  ABISELECT(-3696,-2596),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C78S2525C14__8S2525C13[] = {
  ABISELECT(3696,2596),
  ABISELECT(3696,2596),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C78S2525C14__8S2525C13[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(3456,2440),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__7S2525C78S2525C14__8S2525C13[] = {
  ABISELECT(-13200,-9252),
  ABISELECT(-13088,-9180),
  ABISELECT(-12544,-8796),
  ABISELECT(-9632,-6740),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C14__8S2525C13[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(3344,2360),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZThn112_N8S2525C14D1Ev,_ZThn80_N8S2525C14D1Ev)();
extern void ABISELECT(_ZThn112_N8S2525C14D0Ev,_ZThn80_N8S2525C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2525C7__8S2525C14__8S2525C13[] = {
  ABISELECT(9632,6740),
  ABISELECT(-3568,-2512),
  ABISELECT(-3456,-2440),
  ABISELECT(-2912,-2056),
  ABISELECT(-3696,-2596),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S2525C14D1Ev,_ZThn80_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S2525C14D0Ev,_ZThn80_N8S2525C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2525C14D1Ev,_ZTv0_n12_N8S2525C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2525C14D0Ev,_ZTv0_n12_N8S2525C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C14__8S2525C13[] = {
  ABISELECT(3584,2516),
  ABISELECT(3584,2516),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C14D1Ev,_ZTv0_n12_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C14D0Ev,_ZTv0_n12_N8S2525C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__A1__8S2525C14__8S2525C13[] = {
  ABISELECT(-13200,-9252),
  ABISELECT(-13088,-9180),
  ABISELECT(-12544,-8796),
  ABISELECT(-9744,-6820),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S2525C14D1Ev,_ZTv0_n28_N8S2525C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2525C14D0Ev,_ZTv0_n28_N8S2525C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2525C12__8S2525C14__8S2525C13[] = {
  ABISELECT(2368,1664),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(2368,1664),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C14D1Ev,_ZTv0_n28_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C14D0Ev,_ZTv0_n28_N8S2525C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__A1__8S2525C13[] = {
  ABISELECT(-13200,-9252),
  ABISELECT(-13088,-9180),
  ABISELECT(-12544,-8796),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C2__A1__8S2525C13[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(13088,9180),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN8S2525C15D1Ev();
extern void _ZN8S2525C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C15__8S2525C13[] = {
  ABISELECT(-12224,-8564),
  ABISELECT(-12656,-8876),
  ABISELECT(-13200,-9260),
  ABISELECT(-13224,-9268),
  ABISELECT(-13440,-9416),
  ABISELECT(-13312,-9332),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN8S2525C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C15D0Ev,
};
extern void _ZN7S2525C9D1Ev();
extern void _ZN7S2525C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C98S2525C15__A1__8S2525C13[] = {
  ABISELECT(-12224,-8564),
  ABISELECT(-12656,-8876),
  ABISELECT(-13200,-9260),
  ABISELECT(-13224,-9268),
  ABISELECT(-13440,-9416),
  ABISELECT(-13312,-9332),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C98S2525C15__A1__8S2525C13[] = {
  ABISELECT(13440,9416),
  ABISELECT(13440,9416),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__7S2525C98S2525C15__A1__8S2525C13[] = {
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  ABISELECT(13224,9268),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C98S2525C15__A1__8S2525C13[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(13200,9260),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev)();
extern void ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2525C12__7S2525C98S2525C15__A1__8S2525C13[] = {
  ABISELECT(12224,8564),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(12224,8564),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__8S2525C15__8S2525C13[] = {
  ABISELECT(568,392),
  ABISELECT(24,8),
  ABISELECT(-88,-64),
  ABISELECT(13224,9268),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C15__8S2525C13[] = {
  0,
  ABISELECT(-112,-72),
  ABISELECT(13200,9260),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S2525C15D1Ev,_ZTv0_n28_N8S2525C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2525C15D0Ev,_ZTv0_n28_N8S2525C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2525C12__8S2525C15__8S2525C13[] = {
  ABISELECT(12224,8564),
  0,
  ABISELECT(-1216,-852),
  ABISELECT(-432,-312),
  ABISELECT(-1088,-768),
  ABISELECT(12224,8564),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C15D1Ev,_ZTv0_n28_N8S2525C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C15D0Ev,_ZTv0_n28_N8S2525C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2525C15D1Ev,_ZTv0_n12_N8S2525C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2525C15D0Ev,_ZTv0_n12_N8S2525C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C15__8S2525C13[] = {
  ABISELECT(13440,9416),
  ABISELECT(13440,9416),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C15D1Ev,_ZTv0_n12_N8S2525C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C15D0Ev,_ZTv0_n12_N8S2525C15D0Ev),
};
static  VTT_ENTRY vtt_S2525C13[] = {
  {&(_ZTV8S2525C13[11]),  11,81},
  {&(_tg__ZTV7S2525C9__8S2525C13[8]),  8,10},
  {&(_tg__ZTV9S20507C11__7S2525C9__8S2525C13[3]),  3,5},
  {&(_tg__ZTV8S2525C10__7S2525C9__8S2525C13[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C9__8S2525C13[4]),  4,5},
  {&(_tg__ZTV8S2525C12__7S2525C9__8S2525C13[7]),  7,10},
  {&(_tg__ZTV7S2525C5__A__8S2525C13[3]),  3,4},
  {&(_ZTV8S2525C13[23]),  23,81},
  {&(_ZTV8S2525C13[30]),  30,81},
  {&(_ZTV8S2525C13[34]),  34,81},
  {&(_ZTV8S2525C13[42]),  42,81},
  {&(_ZTV8S2525C13[19]),  19,81},
  {&(_ZTV8S2525C13[54]),  54,81},
  {&(_ZTV8S2525C13[63]),  63,81},
  {&(_ZTV8S2525C13[70]),  70,81},
  {&(_ZTV8S2525C13[79]),  79,81},
  {&(_tg__ZTV8S2525C10__8S2525C13[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C10__8S2525C13[4]),  4,5},
  {&(_tg__ZTV7S2525C5__8S2525C13[3]),  3,4},
  {&(_tg__ZTV8S2525C12__8S2525C13[5]),  5,8},
  {&(_tg__ZTV7S2525C58S2525C12__A1__8S2525C13[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S2525C12__8S2525C13[3]),  3,5},
  {&(_tg__ZTV8S2525C14__8S2525C13[8]),  8,10},
  {&(_tg__ZTV7S2525C28S2525C14__8S2525C13[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C28S2525C14__8S2525C13[4]),  4,5},
  {&(_tg__ZTV7S2525C78S2525C14__8S2525C13[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S2525C78S2525C14__8S2525C13[3]),  3,5},
  {&(_tg__ZTV7S2525C5__7S2525C78S2525C14__8S2525C13[4]),  4,5},
  {&(_tg__ZTV7S2525C2__7S2525C78S2525C14__8S2525C13[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C14__8S2525C13[4]),  4,5},
  {&(_tg__ZTV7S2525C7__8S2525C14__8S2525C13[7]),  7,9},
  {&(_tg__ZTV9S20507C11__8S2525C14__8S2525C13[3]),  3,5},
  {&(_tg__ZTV7S2525C2__A1__8S2525C14__8S2525C13[5]),  5,5},
  {&(_tg__ZTV8S2525C12__8S2525C14__8S2525C13[7]),  7,10},
  {&(_tg__ZTV7S2525C2__A1__8S2525C13[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C2__A1__8S2525C13[4]),  4,5},
  {&(_tg__ZTV8S2525C15__8S2525C13[8]),  8,10},
  {&(_tg__ZTV7S2525C98S2525C15__A1__8S2525C13[8]),  8,10},
  {&(_tg__ZTV9S20507C11__7S2525C98S2525C15__A1__8S2525C13[3]),  3,5},
  {&(_tg__ZTV8S2525C10__7S2525C98S2525C15__A1__8S2525C13[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C98S2525C15__A1__8S2525C13[4]),  4,5},
  {&(_tg__ZTV8S2525C12__7S2525C98S2525C15__A1__8S2525C13[7]),  7,10},
  {&(_tg__ZTV8S2525C10__8S2525C15__8S2525C13[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C15__8S2525C13[4]),  4,5},
  {&(_tg__ZTV8S2525C12__8S2525C15__8S2525C13[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S2525C15__8S2525C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2525C13[];
extern  VTBL_ENTRY _ZTV8S2525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C13[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N7S2525C9D0Ev,_ZThn2928_N7S2525C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N7S2525C9D1Ev,_ZThn2928_N7S2525C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2976_N7S2525C9D0Ev,_ZThn2076_N7S2525C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2976_N7S2525C9D1Ev,_ZThn2076_N7S2525C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16416_N8S2525C13D0Ev,_ZThn11492_N8S2525C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6560_N8S2525C13D0Ev,_ZThn4592_N8S2525C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16416_N8S2525C13D1Ev,_ZThn11492_N8S2525C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6560_N8S2525C13D1Ev,_ZThn4592_N8S2525C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2525C13D0Ev,_ZTv0_n28_N8S2525C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N8S2525C13D0Ev,_ZThn2928_N8S2525C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2525C13D1Ev,_ZTv0_n28_N8S2525C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4192_N8S2525C13D1Ev,_ZThn2928_N8S2525C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C13D0Ev,_ZTv0_n12_N8S2525C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2976_N8S2525C13D0Ev,_ZThn2076_N8S2525C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C13D1Ev,_ZTv0_n12_N8S2525C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2976_N8S2525C13D1Ev,_ZThn2076_N8S2525C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2525C13 = {  "S2525C13", // class name
  bases_S2525C13, 25,
  &(vtc_S2525C13[0]), // expected_vtbl_contents
  &(vtt_S2525C13[0]), // expected_vtt_contents
  ABISELECT(17200,12032), // object size
  NSPAIRA(_ZTI8S2525C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2525C13),81, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2525C13),46, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2525C1  : S2525C2 , S2525C6 , S2525C13 {
  void *s2525c1f0;
  __tsi64 s2525c1f1;
  ~S2525C1(); // tgen
  S2525C1(); // tgen
};
//SIG(1 S2525C1) C1{ BC2{ BC3{ m Fi[10] Fp[6]} VBC4{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC5{ BC4 VBC3 v1 FD[2] Fi[2] FD[3]} FD} BC6{ VBC3 VBC2 BC7{ VBC8{ vd m Fp FD[5] Fp FD} VBC4 VBC5 VBC2 vd FD[9] Fi FC9{ VBC3 VBC8 VBC10{ VBC3 VBC5 VBC4 FC11{}} VBC12{ BC3 VBC4 VBC8 BC5 vd FC10 FC5} FC4 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC8 FL} vd Fp FC12} BC13{ VBC8 BC9 BC5 VBC14{ VBC3 VBC5 BC2 BC7 VBC12 vd Fi Fp Fi:9 Fc FD FC5 FC15{ VBC3 VBC4 VBC10 VBC12 BC9 vd FC8 FD} Fc Fs[7] FC11 Fi Fc Fl} VBC15 vd v2 v3 v4 FC5 Fc FD Fi FD FC10} Fp FL}


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

static void Test_S2525C1()
{
  extern Class_Descriptor cd_S2525C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1557,4359)];
    init_test(&cd_S2525C1, buf);
    S2525C1 *dp, &lv = *(dp=new (buf) S2525C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24896,17432), "sizeof(S2525C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2525C1)");
    /*is_ambiguous_... S2525C1::S2525C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*), ABISELECT(8,4), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C7::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C7*)(S2525C6*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C10::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C10*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C12::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C12*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C2*)(S2525C14*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C7::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C7*)(S2525C14*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C15::S2525C4 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C15*), ABISELECT(10672,7476), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*), ABISELECT(11120,7792), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C5*), ABISELECT(11120,7792), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C6*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C9*)(S2525C13*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C10*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*)(S2525C12*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C5*)(S2525C13*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C14*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C15::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C15*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C9::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C9*)(S2525C15*), ABISELECT(11648,8172), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C2*), ABISELECT(11104,7788), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C2*), ABISELECT(11104,7788), "S2525C1");
    check_base_class_offset(lv, (S2525C5*)(S2525C7*)(S2525C6*), ABISELECT(11104,7788), "S2525C1");
    check_base_class_offset(lv, (S2525C5*)(S2525C10*), ABISELECT(11104,7788), "S2525C1");
    /*is_ambiguous_... S2525C14::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C14*), ABISELECT(11104,7788), "S2525C1");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C2*)(S2525C14*), ABISELECT(11104,7788), "S2525C1");
    check_base_class_offset(lv, (S2525C5*)(S2525C7*)(S2525C14*), ABISELECT(11104,7788), "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C2*), 0, "S2525C1");
    /*is_ambiguous_... S2525C1::S2525C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*), ABISELECT(11752,8240), "S2525C1");
    check_base_class_offset(lv, (S2525C2*)(S2525C6*), ABISELECT(11744,8236), "S2525C1");
    check_base_class_offset(lv, (S2525C2*)(S2525C7*)(S2525C6*), ABISELECT(11744,8236), "S2525C1");
    check_base_class_offset(lv, (S2525C2*)(S2525C7*)(S2525C14*), ABISELECT(11744,8236), "S2525C1");
    check_base_class_offset(lv, (S20507C11*)(S2525C7*)(S2525C6*), ABISELECT(11856,8316), "S2525C1");
    check_base_class_offset(lv, (S20507C11*)(S2525C13*), ABISELECT(11856,8316), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S20507C11*)(S2525C9*)(S2525C13*), ABISELECT(11856,8316), "S2525C1");
    check_base_class_offset(lv, (S20507C11*)(S2525C12*), ABISELECT(11856,8316), "S2525C1");
    check_base_class_offset(lv, (S20507C11*)(S2525C7*)(S2525C14*), ABISELECT(11856,8316), "S2525C1");
    check_base_class_offset(lv, (S20507C11*)(S2525C9*)(S2525C15*), ABISELECT(11856,8316), "S2525C1");
    check_base_class_offset(lv, (S2525C7*)(S2525C6*), ABISELECT(112,80), "S2525C1");
    check_base_class_offset(lv, (S2525C6*), ABISELECT(112,80), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S2525C10*)(S2525C9*)(S2525C13*), ABISELECT(11984,8400), "S2525C1");
    check_base_class_offset(lv, (S2525C10*)(S2525C15*), ABISELECT(11984,8400), "S2525C1");
    check_base_class_offset(lv, (S2525C10*)(S2525C9*)(S2525C15*), ABISELECT(11984,8400), "S2525C1");
    /*is_ambiguous_... S2525C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C12*), ABISELECT(12544,8792), "S2525C1");
    check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(12016,8412), "S2525C1");
    check_base_class_offset(lv, (S2525C4*)(S2525C5*)(S2525C12*), ABISELECT(12016,8412), "S2525C1");
    check_base_class_offset(lv, (S2525C5*)(S2525C12*), ABISELECT(12000,8408), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S2525C12*)(S2525C9*)(S2525C13*), ABISELECT(12000,8408), "S2525C1");
    check_base_class_offset(lv, (S2525C12*)(S2525C14*), ABISELECT(12000,8408), "S2525C1");
    check_base_class_offset(lv, (S2525C12*)(S2525C15*), ABISELECT(12000,8408), "S2525C1");
    check_base_class_offset(lv, (S2525C12*)(S2525C9*)(S2525C15*), ABISELECT(12000,8408), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C9 */ AMB_check_base_class_offset(lv, (S2525C9*)(S2525C13*), ABISELECT(7680,5388), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C4*)(S2525C5*)(S2525C13*), ABISELECT(8336,5836), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C4*)(S2525C5*)(S2525C13*), ABISELECT(8336,5836), "S2525C1");
    /*is_ambiguous_... S2525C13::S2525C5 */ AMB_check_base_class_offset(lv, (S2525C5*)(S2525C13*), ABISELECT(8320,5832), "S2525C1");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2525C2*)(S2525C14*), ABISELECT(14376,10076), "S2525C1");
    /*is_ambiguous_... S2525C14::S2525C2 */ AMB_check_base_class_offset(lv, (S2525C2*)(S2525C14*), ABISELECT(14368,10072), "S2525C1");
    check_base_class_offset(lv, (S2525C7*)(S2525C14*), ABISELECT(14480,10152), "S2525C1");
    check_base_class_offset(lv, (S2525C14*)(S2525C13*), ABISELECT(14368,10072), "S2525C1");
    check_base_class_offset(lv, (S2525C9*)(S2525C15*), ABISELECT(24112,16892), "S2525C1");
    check_base_class_offset(lv, (S2525C15*)(S2525C13*), ABISELECT(24112,16892), "S2525C1");
    check_base_class_offset(lv, (S2525C13*), ABISELECT(7680,5388), "S2525C1");
    check_field_offset(lv, s2525c1f0, ABISELECT(10656,7464), "S2525C1.s2525c1f0");
    check_field_offset(lv, s2525c1f1, ABISELECT(10664,7468), "S2525C1.s2525c1f1");
    test_class_info(&lv, &cd_S2525C1);
    dp->~S2525C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2525C1(Test_S2525C1, "S2525C1", ABISELECT(24896,17432));

#else // __cplusplus

extern void _ZN7S2525C1C1Ev();
extern void _ZN7S2525C1D1Ev();
Name_Map name_map_S2525C1[] = {
  NSPAIR(_ZN7S2525C1C1Ev),
  NSPAIR(_ZN7S2525C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S2525C7;
extern VTBL_ENTRY _ZTI7S2525C7[];
extern  VTBL_ENTRY _ZTV7S2525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C7[];
extern Class_Descriptor cd_S2525C6;
extern VTBL_ENTRY _ZTI7S2525C6[];
extern  VTBL_ENTRY _ZTV7S2525C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C6[];
extern Class_Descriptor cd_S2525C10;
extern VTBL_ENTRY _ZTI8S2525C10[];
extern  VTBL_ENTRY _ZTV8S2525C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C10[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S2525C12;
extern VTBL_ENTRY _ZTI8S2525C12[];
extern  VTBL_ENTRY _ZTV8S2525C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C12[];
extern Class_Descriptor cd_S2525C9;
extern VTBL_ENTRY _ZTI7S2525C9[];
extern  VTBL_ENTRY _ZTV7S2525C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C9[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C4;
extern VTBL_ENTRY _ZTI7S2525C4[];
extern Class_Descriptor cd_S2525C5;
extern VTBL_ENTRY _ZTI7S2525C5[];
extern  VTBL_ENTRY _ZTV7S2525C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2525C2;
extern VTBL_ENTRY _ZTI7S2525C2[];
extern  VTBL_ENTRY _ZTV7S2525C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C2[];
extern Class_Descriptor cd_S2525C7;
extern VTBL_ENTRY _ZTI7S2525C7[];
extern  VTBL_ENTRY _ZTV7S2525C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C7[];
extern Class_Descriptor cd_S2525C14;
extern VTBL_ENTRY _ZTI8S2525C14[];
extern  VTBL_ENTRY _ZTV8S2525C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C14[];
extern Class_Descriptor cd_S2525C9;
extern VTBL_ENTRY _ZTI7S2525C9[];
extern  VTBL_ENTRY _ZTV7S2525C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C9[];
extern Class_Descriptor cd_S2525C15;
extern VTBL_ENTRY _ZTI8S2525C15[];
extern  VTBL_ENTRY _ZTV8S2525C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C15[];
extern Class_Descriptor cd_S2525C13;
extern VTBL_ENTRY _ZTI8S2525C13[];
extern  VTBL_ENTRY _ZTV8S2525C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2525C13[];
static Base_Class bases_S2525C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(10672,7476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2525C4,    ABISELECT(10672,7476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(11120,7792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(11120,7792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(11648,8172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(11104,7788), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2525C2,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(11752,8240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C2,    ABISELECT(11744,8236), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20507C11,    ABISELECT(11856,8316), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2525C7,    ABISELECT(112,80), //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
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2525C6,    ABISELECT(112,80), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2525C10,    ABISELECT(11984,8400), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(12544,8792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(12016,8412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(12016,8412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(12000,8408), //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
    5, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2525C12,    ABISELECT(12000,8408), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S2525C9,    ABISELECT(7680,5388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(8336,5836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C4,    ABISELECT(8336,5836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C5,    ABISELECT(8320,5832), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //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
    29, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(14376,10076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2525C2,    ABISELECT(14368,10072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2525C7,    ABISELECT(14480,10152), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2525C14,    ABISELECT(14368,10072), //bcp->offset
    72, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2525C9,    ABISELECT(24112,16892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2525C15,    ABISELECT(24112,16892), //bcp->offset
    92, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2525C13,    ABISELECT(7680,5388), //bcp->offset
    22, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2525C1[];
extern void _ZN7S2525C1D1Ev();
extern void _ZN7S2525C1D0Ev();
extern void ABISELECT(_ZThn112_N7S2525C1D1Ev,_ZThn80_N7S2525C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S2525C1D0Ev,_ZThn80_N7S2525C1D0Ev)();
extern void ABISELECT(_ZThn7680_N7S2525C1D1Ev,_ZThn5388_N7S2525C1D1Ev)();
extern void ABISELECT(_ZThn7680_N7S2525C1D0Ev,_ZThn5388_N7S2525C1D0Ev)();
extern void _ZN8S2525C132v2Ev();
extern void _ZN8S2525C132v3Ev();
extern void _ZN8S2525C132v4Ev();
extern void _ZN7S2525C52v1Ev();
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S2525C1D1Ev,_ZTv0_n12_N7S2525C1D1Ev)();
extern void ABISELECT(_ZThn11856_N7S2525C1D1Ev,_ZThn8316_N7S2525C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C1D0Ev,_ZTv0_n12_N7S2525C1D0Ev)();
extern void ABISELECT(_ZThn11856_N7S2525C1D0Ev,_ZThn8316_N7S2525C1D0Ev)() __attribute__((weak));
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N7S2525C1D1Ev,_ZTv0_n28_N7S2525C1D1Ev)();
extern void ABISELECT(_ZThn12000_N7S2525C1D1Ev,_ZThn8408_N7S2525C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2525C1D0Ev,_ZTv0_n28_N7S2525C1D0Ev)();
extern void ABISELECT(_ZThn12000_N7S2525C1D0Ev,_ZThn8408_N7S2525C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2525C1D1Ev,_ZTv0_n36_N7S2525C1D1Ev)();
extern void ABISELECT(_ZThn14368_N7S2525C1D1Ev,_ZThn10072_N7S2525C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2525C1D0Ev,_ZTv0_n36_N7S2525C1D0Ev)();
extern void ABISELECT(_ZThn14368_N7S2525C1D0Ev,_ZThn10072_N7S2525C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn112_n72_N7S2525C1D1Ev,_ZTvn80_n36_N7S2525C1D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N7S2525C1D0Ev,_ZTvn80_n36_N7S2525C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N7S2525C1D1Ev,_ZTv0_n36_N7S2525C1D1Ev)();
extern void ABISELECT(_ZThn24112_N7S2525C1D1Ev,_ZThn16892_N7S2525C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2525C1D0Ev,_ZTv0_n36_N7S2525C1D0Ev)();
extern void ABISELECT(_ZThn24112_N7S2525C1D0Ev,_ZThn16892_N7S2525C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2525C1[] = {
  ABISELECT(24112,16892),
  ABISELECT(14368,10072),
  ABISELECT(12000,8408),
  ABISELECT(11984,8400),
  ABISELECT(11856,8316),
  ABISELECT(11744,8236),
  ABISELECT(11648,8172),
  ABISELECT(11104,7788),
  ABISELECT(10672,7476),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&_ZN7S2525C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C1D0Ev,
  ABISELECT(11632,8156),
  ABISELECT(11536,8092),
  ABISELECT(10992,7708),
  ABISELECT(10560,7396),
  ABISELECT(11744,8236),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S2525C1D1Ev,_ZThn80_N7S2525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S2525C1D0Ev,_ZThn80_N7S2525C1D0Ev),
  ABISELECT(16432,11504),
  ABISELECT(4064,2848),
  ABISELECT(6688,4684),
  ABISELECT(4320,3020),
  ABISELECT(2992,2088),
  ABISELECT(3424,2400),
  ABISELECT(4304,3012),
  ABISELECT(4176,2928),
  ABISELECT(3968,2784),
  ABISELECT(-7680,-5388),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7680_N7S2525C1D1Ev,_ZThn5388_N7S2525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7680_N7S2525C1D0Ev,_ZThn5388_N7S2525C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2525C132v2Ev,
  (VTBL_ENTRY)&_ZN8S2525C132v3Ev,
  (VTBL_ENTRY)&_ZN8S2525C132v4Ev,
  ABISELECT(3328,2340),
  ABISELECT(-8320,-5832),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  0,
  ABISELECT(544,384),
  ABISELECT(-11104,-7788),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-11744,-8236),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  ABISELECT(-11856,-8316),
  ABISELECT(-11856,-8316),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C1D1Ev,_ZTv0_n12_N7S2525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C1D0Ev,_ZTv0_n12_N7S2525C1D0Ev),
  ABISELECT(-1312,-924),
  ABISELECT(-880,-612),
  ABISELECT(-336,-228),
  ABISELECT(-11984,-8400),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  ABISELECT(-12000,-8408),
  0,
  ABISELECT(-144,-92),
  ABISELECT(-1328,-932),
  ABISELECT(-352,-236),
  ABISELECT(-12000,-8408),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C1D1Ev,_ZTv0_n28_N7S2525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C1D0Ev,_ZTv0_n28_N7S2525C1D0Ev),
  ABISELECT(-14368,-10072),
  ABISELECT(-2368,-1664),
  ABISELECT(-2624,-1836),
  ABISELECT(-2512,-1756),
  ABISELECT(-2720,-1900),
  ABISELECT(-3264,-2284),
  ABISELECT(-3696,-2596),
  ABISELECT(-14368,-10072),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2525C1D1Ev,_ZTv0_n36_N7S2525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2525C1D0Ev,_ZTv0_n36_N7S2525C1D0Ev),
  ABISELECT(-2736,-1916),
  ABISELECT(-2832,-1980),
  ABISELECT(-3376,-2364),
  ABISELECT(-3808,-2676),
  ABISELECT(-2624,-1836),
  ABISELECT(-14480,-10152),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N7S2525C1D1Ev,_ZTvn80_n36_N7S2525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N7S2525C1D0Ev,_ZTvn80_n36_N7S2525C1D0Ev),
  ABISELECT(-24112,-16892),
  ABISELECT(-12112,-8484),
  ABISELECT(-13440,-9416),
  ABISELECT(-13008,-9104),
  ABISELECT(-12128,-8492),
  ABISELECT(-12256,-8576),
  ABISELECT(-12464,-8720),
  ABISELECT(-24112,-16892),
  (VTBL_ENTRY)&(_ZTI7S2525C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2525C1D1Ev,_ZTv0_n36_N7S2525C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2525C1D0Ev,_ZTv0_n36_N7S2525C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S2525C1[];
static  VTBL_ENTRY _tg__ZTV7S2525C2__A__7S2525C1[] = {
  ABISELECT(11648,8172),
  ABISELECT(11104,7788),
  ABISELECT(10672,7476),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C2__A__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-11104,-7788),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C6D1Ev();
extern void _ZN7S2525C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C6__7S2525C1[] = {
  ABISELECT(11632,8156),
  ABISELECT(11536,8092),
  ABISELECT(10992,7708),
  ABISELECT(10560,7396),
  ABISELECT(11744,8236),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C6[0]),
  (VTBL_ENTRY)&_ZN7S2525C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C6D0Ev,
};
extern void _ZN7S2525C7D1Ev();
extern void _ZN7S2525C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C77S2525C6__7S2525C1[] = {
  ABISELECT(11632,8156),
  ABISELECT(11536,8092),
  ABISELECT(10992,7708),
  ABISELECT(10560,7396),
  ABISELECT(11744,8236),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev)();
extern void ABISELECT(_ZThn11744_N7S2525C7D1Ev,_ZThn8236_N7S2525C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev)();
extern void ABISELECT(_ZThn11744_N7S2525C7D0Ev,_ZThn8236_N7S2525C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C77S2525C6__7S2525C1[] = {
  ABISELECT(-11744,-8236),
  ABISELECT(-11744,-8236),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C77S2525C6__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-10992,-7708),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__7S2525C77S2525C6__7S2525C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-11632,-8156),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__7S2525C6__7S2525C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-11632,-8156),
  (VTBL_ENTRY)&(_ZTI7S2525C6[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C6__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-10992,-7708),
  (VTBL_ENTRY)&(_ZTI7S2525C6[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C6D1Ev,_ZTv0_n12_N7S2525C6D1Ev)();
extern void ABISELECT(_ZThn11744_N7S2525C6D1Ev,_ZThn8236_N7S2525C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C6D0Ev,_ZTv0_n12_N7S2525C6D0Ev)();
extern void ABISELECT(_ZThn11744_N7S2525C6D0Ev,_ZThn8236_N7S2525C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C6__7S2525C1[] = {
  ABISELECT(-11744,-8236),
  ABISELECT(-11744,-8236),
  (VTBL_ENTRY)&(_ZTI7S2525C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C6D1Ev,_ZTv0_n12_N7S2525C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C6D0Ev,_ZTv0_n12_N7S2525C6D0Ev),
};
extern void _ZN8S2525C13D1Ev();
extern void _ZN8S2525C13D0Ev();
extern void _ZN8S2525C132v2Ev();
extern void _ZN8S2525C132v3Ev();
extern void _ZN8S2525C132v4Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C13__7S2525C1[] = {
  ABISELECT(16432,11504),
  ABISELECT(4064,2848),
  ABISELECT(6688,4684),
  ABISELECT(4320,3020),
  ABISELECT(2992,2088),
  ABISELECT(3424,2400),
  ABISELECT(4304,3012),
  ABISELECT(4176,2928),
  ABISELECT(3968,2784),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&_ZN8S2525C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C13D0Ev,
  (VTBL_ENTRY)&_ZN8S2525C132v2Ev,
  (VTBL_ENTRY)&_ZN8S2525C132v3Ev,
  (VTBL_ENTRY)&_ZN8S2525C132v4Ev,
};
extern void _ZN7S2525C9D1Ev();
extern void _ZN7S2525C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C98S2525C13__7S2525C1[] = {
  ABISELECT(4320,3020),
  ABISELECT(2992,2088),
  ABISELECT(3424,2400),
  ABISELECT(4304,3012),
  ABISELECT(4176,2928),
  ABISELECT(3968,2784),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev)();
extern void ABISELECT(_ZThn4176_N7S2525C9D1Ev,_ZThn2928_N7S2525C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev)();
extern void ABISELECT(_ZThn4176_N7S2525C9D0Ev,_ZThn2928_N7S2525C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C98S2525C13__7S2525C1[] = {
  ABISELECT(-4176,-2928),
  ABISELECT(-4176,-2928),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__7S2525C98S2525C13__7S2525C1[] = {
  ABISELECT(-1312,-924),
  ABISELECT(-880,-612),
  ABISELECT(-336,-228),
  ABISELECT(-4304,-3012),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C98S2525C13__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-3424,-2400),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev)();
extern void ABISELECT(_ZThn4320_N7S2525C9D1Ev,_ZThn3020_N7S2525C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev)();
extern void ABISELECT(_ZThn4320_N7S2525C9D0Ev,_ZThn3020_N7S2525C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2525C12__7S2525C98S2525C13__7S2525C1[] = {
  ABISELECT(-4320,-3020),
  0,
  ABISELECT(-144,-92),
  ABISELECT(-1328,-932),
  ABISELECT(-352,-236),
  ABISELECT(-4320,-3020),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C58S2525C13__A2__7S2525C1[] = {
  ABISELECT(3328,2340),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2525C13D1Ev,_ZTv0_n12_N8S2525C13D1Ev)();
extern void ABISELECT(_ZThn4176_N8S2525C13D1Ev,_ZThn2928_N8S2525C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2525C13D0Ev,_ZTv0_n12_N8S2525C13D0Ev)();
extern void ABISELECT(_ZThn4176_N8S2525C13D0Ev,_ZThn2928_N8S2525C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C13__7S2525C1[] = {
  ABISELECT(-4176,-2928),
  ABISELECT(-4176,-2928),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C13D1Ev,_ZTv0_n12_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C13D0Ev,_ZTv0_n12_N8S2525C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__8S2525C13__7S2525C1[] = {
  ABISELECT(-1312,-924),
  ABISELECT(-880,-612),
  ABISELECT(-336,-228),
  ABISELECT(-4304,-3012),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C13__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-3424,-2400),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S2525C13D1Ev,_ZTv0_n28_N8S2525C13D1Ev)();
extern void ABISELECT(_ZThn4320_N8S2525C13D1Ev,_ZThn3020_N8S2525C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2525C13D0Ev,_ZTv0_n28_N8S2525C13D0Ev)();
extern void ABISELECT(_ZThn4320_N8S2525C13D0Ev,_ZThn3020_N8S2525C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2525C12__8S2525C13__7S2525C1[] = {
  ABISELECT(-4320,-3020),
  0,
  ABISELECT(-144,-92),
  ABISELECT(-1328,-932),
  ABISELECT(-352,-236),
  ABISELECT(-4320,-3020),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C13D1Ev,_ZTv0_n28_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C13D0Ev,_ZTv0_n28_N8S2525C13D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__A__8S2525C13__7S2525C1[] = {
  ABISELECT(3328,2340),
  ABISELECT(-640,-444),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev)();
extern void ABISELECT(_ZThn6688_N8S2525C13D1Ev,_ZThn4684_N8S2525C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev)();
extern void ABISELECT(_ZThn6688_N8S2525C13D0Ev,_ZThn4684_N8S2525C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2525C14__8S2525C13__7S2525C1[] = {
  ABISELECT(-6688,-4684),
  ABISELECT(-2368,-1664),
  ABISELECT(-2624,-1836),
  ABISELECT(-2512,-1756),
  ABISELECT(-2720,-1900),
  ABISELECT(-3264,-2284),
  ABISELECT(-3696,-2596),
  ABISELECT(-6688,-4684),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev),
};
extern void ABISELECT(_ZTvn112_n72_N8S2525C13D1Ev,_ZTvn80_n36_N8S2525C13D1Ev)();
extern void ABISELECT(_ZTvn112_n72_N8S2525C13D0Ev,_ZTvn80_n36_N8S2525C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2525C78S2525C14__8S2525C13__7S2525C1[] = {
  ABISELECT(-2736,-1916),
  ABISELECT(-2832,-1980),
  ABISELECT(-3376,-2364),
  ABISELECT(-3808,-2676),
  ABISELECT(-2624,-1836),
  ABISELECT(-6800,-4764),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S2525C13D1Ev,_ZTvn80_n36_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n72_N8S2525C13D0Ev,_ZTvn80_n36_N8S2525C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__A1__8S2525C13__7S2525C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-4064,-2848),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
};
extern void ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev)();
extern void ABISELECT(_ZThn16432_N8S2525C13D1Ev,_ZThn11504_N8S2525C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev)();
extern void ABISELECT(_ZThn16432_N8S2525C13D0Ev,_ZThn11504_N8S2525C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2525C15__8S2525C13__7S2525C1[] = {
  ABISELECT(-16432,-11504),
  ABISELECT(-12112,-8484),
  ABISELECT(-13440,-9416),
  ABISELECT(-13008,-9104),
  ABISELECT(-12128,-8492),
  ABISELECT(-12256,-8576),
  ABISELECT(-12464,-8720),
  ABISELECT(-16432,-11504),
  (VTBL_ENTRY)&(_ZTI8S2525C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C1[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__A1__7S2525C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C2__A1__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__7S2525C1[] = {
  ABISELECT(-1312,-924),
  ABISELECT(-880,-612),
  ABISELECT(-336,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C10__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(880,612),
  (VTBL_ENTRY)&(_ZTI8S2525C10[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void _ZN8S2525C12D1Ev();
extern void _ZN8S2525C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C12__7S2525C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-1328,-932),
  ABISELECT(-352,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C12D0Ev,
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C58S2525C12__A1__7S2525C1[] = {
  ABISELECT(-352,-236),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C5[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C12__7S2525C1[] = {
  ABISELECT(144,92),
  ABISELECT(144,92),
  (VTBL_ENTRY)&(_ZTI8S2525C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D1Ev,_ZTv0_n12_N8S2525C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C12D0Ev,_ZTv0_n12_N8S2525C12D0Ev),
};
extern void _ZN8S2525C14D1Ev();
extern void _ZN8S2525C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C14__7S2525C1[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2624,-1836),
  ABISELECT(-2512,-1756),
  ABISELECT(-2720,-1900),
  ABISELECT(-3264,-2284),
  ABISELECT(-3696,-2596),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN8S2525C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C28S2525C14__A2__7S2525C1[] = {
  ABISELECT(-2720,-1900),
  ABISELECT(-3264,-2284),
  ABISELECT(-3696,-2596),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C28S2525C14__A2__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(3264,2284),
  (VTBL_ENTRY)&(_ZTI7S2525C2[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C7D1Ev();
extern void _ZN7S2525C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C78S2525C14__A1__7S2525C1[] = {
  ABISELECT(-2736,-1916),
  ABISELECT(-2832,-1980),
  ABISELECT(-3376,-2364),
  ABISELECT(-3808,-2676),
  ABISELECT(-2624,-1836),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C78S2525C14__A1__7S2525C1[] = {
  ABISELECT(2624,1836),
  ABISELECT(2624,1836),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C78S2525C14__A1__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(3376,2364),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__7S2525C78S2525C14__A1__7S2525C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(2736,1916),
  (VTBL_ENTRY)&(_ZTI7S2525C7[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C14__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(3264,2284),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void ABISELECT(_ZThn112_N8S2525C14D1Ev,_ZThn80_N8S2525C14D1Ev)();
extern void ABISELECT(_ZThn112_N8S2525C14D0Ev,_ZThn80_N8S2525C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2525C7__8S2525C14__7S2525C1[] = {
  ABISELECT(-2736,-1916),
  ABISELECT(-2832,-1980),
  ABISELECT(-3376,-2364),
  ABISELECT(-3808,-2676),
  ABISELECT(-2624,-1836),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S2525C14D1Ev,_ZThn80_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S2525C14D0Ev,_ZThn80_N8S2525C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2525C14D1Ev,_ZTv0_n12_N8S2525C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2525C14D0Ev,_ZTv0_n12_N8S2525C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C14__7S2525C1[] = {
  ABISELECT(2512,1756),
  ABISELECT(2512,1756),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C14D1Ev,_ZTv0_n12_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C14D0Ev,_ZTv0_n12_N8S2525C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2525C2__A1__8S2525C14__7S2525C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(2624,1836),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S2525C14D1Ev,_ZTv0_n28_N8S2525C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2525C14D0Ev,_ZTv0_n28_N8S2525C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2525C12__8S2525C14__7S2525C1[] = {
  ABISELECT(2368,1664),
  0,
  ABISELECT(-144,-92),
  ABISELECT(-1328,-932),
  ABISELECT(-352,-236),
  ABISELECT(2368,1664),
  (VTBL_ENTRY)&(_ZTI8S2525C14[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C14D1Ev,_ZTv0_n28_N8S2525C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C14D0Ev,_ZTv0_n28_N8S2525C14D0Ev),
};
extern void _ZN8S2525C15D1Ev();
extern void _ZN8S2525C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2525C15__7S2525C1[] = {
  ABISELECT(-12112,-8484),
  ABISELECT(-13440,-9416),
  ABISELECT(-13008,-9104),
  ABISELECT(-12128,-8492),
  ABISELECT(-12256,-8576),
  ABISELECT(-12464,-8720),
  0,
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN8S2525C15D1Ev,
  (VTBL_ENTRY)&_ZN8S2525C15D0Ev,
};
extern void _ZN7S2525C9D1Ev();
extern void _ZN7S2525C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C98S2525C15__A1__7S2525C1[] = {
  ABISELECT(-12112,-8484),
  ABISELECT(-13440,-9416),
  ABISELECT(-13008,-9104),
  ABISELECT(-12128,-8492),
  ABISELECT(-12256,-8576),
  ABISELECT(-12464,-8720),
  0,
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2525C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S2525C98S2525C15__A1__7S2525C1[] = {
  ABISELECT(12256,8576),
  ABISELECT(12256,8576),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__7S2525C98S2525C15__A1__7S2525C1[] = {
  ABISELECT(-1312,-924),
  ABISELECT(-880,-612),
  ABISELECT(-336,-228),
  ABISELECT(12128,8492),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__7S2525C98S2525C15__A1__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(13008,9104),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev)();
extern void ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2525C12__7S2525C98S2525C15__A1__7S2525C1[] = {
  ABISELECT(12112,8484),
  0,
  ABISELECT(-144,-92),
  ABISELECT(-1328,-932),
  ABISELECT(-352,-236),
  ABISELECT(12112,8484),
  (VTBL_ENTRY)&(_ZTI7S2525C9[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S2525C10__8S2525C15__7S2525C1[] = {
  ABISELECT(-1312,-924),
  ABISELECT(-880,-612),
  ABISELECT(-336,-228),
  ABISELECT(12128,8492),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
};
extern void _ZN7S2525C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2525C5__8S2525C15__7S2525C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(13008,9104),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
};
extern void _ZN7S2525C52v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S2525C15D1Ev,_ZTv0_n28_N8S2525C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2525C15D0Ev,_ZTv0_n28_N8S2525C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2525C12__8S2525C15__7S2525C1[] = {
  ABISELECT(12112,8484),
  0,
  ABISELECT(-144,-92),
  ABISELECT(-1328,-932),
  ABISELECT(-352,-236),
  ABISELECT(12112,8484),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&_ZN7S2525C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C15D1Ev,_ZTv0_n28_N8S2525C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2525C15D0Ev,_ZTv0_n28_N8S2525C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2525C15D1Ev,_ZTv0_n12_N8S2525C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2525C15D0Ev,_ZTv0_n12_N8S2525C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S2525C15__7S2525C1[] = {
  ABISELECT(12256,8576),
  ABISELECT(12256,8576),
  (VTBL_ENTRY)&(_ZTI8S2525C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C15D1Ev,_ZTv0_n12_N8S2525C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2525C15D0Ev,_ZTv0_n12_N8S2525C15D0Ev),
};
static  VTT_ENTRY vtt_S2525C1[] = {
  {&(_ZTV7S2525C1[11]),  11,103},
  {&(_tg__ZTV7S2525C2__A__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C2__A__7S2525C1[4]),  4,5},
  {&(_tg__ZTV7S2525C6__7S2525C1[7]),  7,9},
  {&(_tg__ZTV7S2525C77S2525C6__7S2525C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S2525C77S2525C6__7S2525C1[3]),  3,5},
  {&(_tg__ZTV7S2525C5__7S2525C77S2525C6__7S2525C1[4]),  4,5},
  {&(_tg__ZTV7S2525C2__7S2525C77S2525C6__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C2__7S2525C6__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C6__7S2525C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__7S2525C6__7S2525C1[3]),  3,5},
  {&(_tg__ZTV8S2525C13__7S2525C1[11]),  11,16},
  {&(_tg__ZTV7S2525C98S2525C13__7S2525C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__7S2525C98S2525C13__7S2525C1[3]),  3,5},
  {&(_tg__ZTV8S2525C10__7S2525C98S2525C13__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C98S2525C13__7S2525C1[4]),  4,5},
  {&(_tg__ZTV8S2525C12__7S2525C98S2525C13__7S2525C1[7]),  7,10},
  {&(_tg__ZTV7S2525C58S2525C13__A2__7S2525C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S2525C13__7S2525C1[3]),  3,5},
  {&(_tg__ZTV8S2525C10__8S2525C13__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C13__7S2525C1[4]),  4,5},
  {&(_tg__ZTV8S2525C12__8S2525C13__7S2525C1[7]),  7,10},
  {&(_tg__ZTV7S2525C5__A__8S2525C13__7S2525C1[3]),  3,4},
  {&(_tg__ZTV8S2525C14__8S2525C13__7S2525C1[9]),  9,11},
  {&(_tg__ZTV7S2525C78S2525C14__8S2525C13__7S2525C1[7]),  7,9},
  {&(_tg__ZTV7S2525C2__A1__8S2525C13__7S2525C1[5]),  5,5},
  {&(_tg__ZTV8S2525C15__8S2525C13__7S2525C1[9]),  9,11},
  {&(_ZTV7S2525C1[46]),  46,103},
  {&(_ZTV7S2525C1[20]),  20,103},
  {&(_ZTV7S2525C1[52]),  52,103},
  {&(_ZTV7S2525C1[55]),  55,103},
  {&(_ZTV7S2525C1[33]),  33,103},
  {&(_ZTV7S2525C1[62]),  62,103},
  {&(_ZTV7S2525C1[69]),  69,103},
  {&(_ZTV7S2525C1[41]),  41,103},
  {&(_ZTV7S2525C1[81]),  81,103},
  {&(_ZTV7S2525C1[90]),  90,103},
  {&(_ZTV7S2525C1[101]),  101,103},
  {&(_tg__ZTV7S2525C5__7S2525C1[3]),  3,4},
  {&(_tg__ZTV7S2525C2__A1__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C2__A1__7S2525C1[4]),  4,5},
  {&(_tg__ZTV8S2525C10__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C10__7S2525C1[4]),  4,5},
  {&(_tg__ZTV8S2525C12__7S2525C1[5]),  5,8},
  {&(_tg__ZTV7S2525C58S2525C12__A1__7S2525C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__8S2525C12__7S2525C1[3]),  3,5},
  {&(_tg__ZTV8S2525C14__7S2525C1[8]),  8,10},
  {&(_tg__ZTV7S2525C28S2525C14__A2__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C28S2525C14__A2__7S2525C1[4]),  4,5},
  {&(_tg__ZTV7S2525C78S2525C14__A1__7S2525C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S2525C78S2525C14__A1__7S2525C1[3]),  3,5},
  {&(_tg__ZTV7S2525C5__7S2525C78S2525C14__A1__7S2525C1[4]),  4,5},
  {&(_tg__ZTV7S2525C2__7S2525C78S2525C14__A1__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C14__7S2525C1[4]),  4,5},
  {&(_tg__ZTV7S2525C7__8S2525C14__7S2525C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__8S2525C14__7S2525C1[3]),  3,5},
  {&(_tg__ZTV7S2525C2__A1__8S2525C14__7S2525C1[5]),  5,5},
  {&(_tg__ZTV8S2525C12__8S2525C14__7S2525C1[7]),  7,10},
  {&(_tg__ZTV8S2525C15__7S2525C1[8]),  8,10},
  {&(_tg__ZTV7S2525C98S2525C15__A1__7S2525C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__7S2525C98S2525C15__A1__7S2525C1[3]),  3,5},
  {&(_tg__ZTV8S2525C10__7S2525C98S2525C15__A1__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__7S2525C98S2525C15__A1__7S2525C1[4]),  4,5},
  {&(_tg__ZTV8S2525C12__7S2525C98S2525C15__A1__7S2525C1[7]),  7,10},
  {&(_tg__ZTV8S2525C10__8S2525C15__7S2525C1[5]),  5,5},
  {&(_tg__ZTV7S2525C5__8S2525C15__7S2525C1[4]),  4,5},
  {&(_tg__ZTV8S2525C12__8S2525C15__7S2525C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S2525C15__7S2525C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2525C1[];
extern  VTBL_ENTRY _ZTV7S2525C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2525C1[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2525C13D0Ev,_ZTv0_n36_N8S2525C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16432_N8S2525C13D0Ev,_ZThn11504_N8S2525C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6688_N8S2525C13D0Ev,_ZThn4684_N8S2525C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2525C13D1Ev,_ZTv0_n36_N8S2525C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16432_N8S2525C13D1Ev,_ZThn11504_N8S2525C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6688_N8S2525C13D1Ev,_ZThn4684_N8S2525C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2525C13D0Ev,_ZTv0_n28_N8S2525C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N8S2525C13D0Ev,_ZThn3020_N8S2525C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2525C13D1Ev,_ZTv0_n28_N8S2525C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N8S2525C13D1Ev,_ZThn3020_N8S2525C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C13D0Ev,_ZTv0_n12_N8S2525C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4176_N8S2525C13D0Ev,_ZThn2928_N8S2525C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2525C13D1Ev,_ZTv0_n12_N8S2525C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4176_N8S2525C13D1Ev,_ZThn2928_N8S2525C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C9D0Ev,_ZTv0_n28_N7S2525C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S2525C9D0Ev,_ZThn3020_N7S2525C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C9D1Ev,_ZTv0_n28_N7S2525C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S2525C9D1Ev,_ZThn3020_N7S2525C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C9D0Ev,_ZTv0_n12_N7S2525C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4176_N7S2525C9D0Ev,_ZThn2928_N7S2525C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C9D1Ev,_ZTv0_n12_N7S2525C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4176_N7S2525C9D1Ev,_ZThn2928_N7S2525C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C6D0Ev,_ZTv0_n12_N7S2525C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11744_N7S2525C6D0Ev,_ZThn8236_N7S2525C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C6D1Ev,_ZTv0_n12_N7S2525C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11744_N7S2525C6D1Ev,_ZThn8236_N7S2525C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C7D0Ev,_ZTv0_n12_N7S2525C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11744_N7S2525C7D0Ev,_ZThn8236_N7S2525C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C7D1Ev,_ZTv0_n12_N7S2525C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11744_N7S2525C7D1Ev,_ZThn8236_N7S2525C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2525C1D0Ev,_ZTv0_n36_N7S2525C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24112_N7S2525C1D0Ev,_ZThn16892_N7S2525C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N7S2525C1D0Ev,_ZThn10072_N7S2525C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2525C1D1Ev,_ZTv0_n36_N7S2525C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24112_N7S2525C1D1Ev,_ZThn16892_N7S2525C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14368_N7S2525C1D1Ev,_ZThn10072_N7S2525C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C1D0Ev,_ZTv0_n28_N7S2525C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12000_N7S2525C1D0Ev,_ZThn8408_N7S2525C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2525C1D1Ev,_ZTv0_n28_N7S2525C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12000_N7S2525C1D1Ev,_ZThn8408_N7S2525C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C1D0Ev,_ZTv0_n12_N7S2525C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11856_N7S2525C1D0Ev,_ZThn8316_N7S2525C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2525C1D1Ev,_ZTv0_n12_N7S2525C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11856_N7S2525C1D1Ev,_ZThn8316_N7S2525C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2525C1 = {  "S2525C1", // class name
  bases_S2525C1, 30,
  &(vtc_S2525C1[0]), // expected_vtbl_contents
  &(vtt_S2525C1[0]), // expected_vtt_contents
  ABISELECT(24896,17432), // object size
  NSPAIRA(_ZTI7S2525C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2525C1),103, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2525C1),68, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S966C5  : virtual S7394C3 {
  __tsi64 s966c5f0[4];
  ::S7394C3 s966c5f1;
  int s966c5f2;
  ::S7394C3 s966c5f3;
  __tsi64 s966c5f4;
  void *s966c5f5;
  ::S7394C3 s966c5f6;
  void *s966c5f7[4];
  ~S966C5(); // tgen
  S966C5(); // tgen
};
//SIG(-1 S966C5) C1{ VBC2{ m FD[2] Fc[8]} FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]}


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

static void Test_S966C5()
{
  extern Class_Descriptor cd_S966C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S966C5, buf);
    S966C5 *dp, &lv = *(dp=new (buf) S966C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S966C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C5)");
    check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S966C5");
    check_field_offset(lv, s966c5f0, ABISELECT(8,4), "S966C5.s966c5f0");
    check_field_offset(lv, s966c5f1, ABISELECT(48,36), "S966C5.s966c5f1");
    check_field_offset(lv, s966c5f2, ABISELECT(96,68), "S966C5.s966c5f2");
    check_field_offset(lv, s966c5f3, ABISELECT(112,72), "S966C5.s966c5f3");
    check_field_offset(lv, s966c5f4, ABISELECT(160,104), "S966C5.s966c5f4");
    check_field_offset(lv, s966c5f5, ABISELECT(168,112), "S966C5.s966c5f5");
    check_field_offset(lv, s966c5f6, ABISELECT(176,116), "S966C5.s966c5f6");
    check_field_offset(lv, s966c5f7, ABISELECT(224,148), "S966C5.s966c5f7");
    test_class_info(&lv, &cd_S966C5);
    dp->~S966C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C5(Test_S966C5, "S966C5", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN6S966C5C1Ev();
extern void _ZN6S966C5D1Ev();
Name_Map name_map_S966C5[] = {
  NSPAIR(_ZN6S966C5C1Ev),
  NSPAIR(_ZN6S966C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
static Base_Class bases_S966C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S966C5[];
static  VTBL_ENTRY vtc_S966C5[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern VTBL_ENTRY _ZTV6S966C5[];
static  VTT_ENTRY vtt_S966C5[] = {
  {&(_ZTV6S966C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
Class_Descriptor cd_S966C5 = {  "S966C5", // class name
  bases_S966C5, 1,
  &(vtc_S966C5[0]), // expected_vtbl_contents
  &(vtt_S966C5[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI6S966C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV6S966C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S966C5),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  S966C6  {
  ::S966C5 s966c6f0;
  void *s966c6f1;
  __tsi64 s966c6f2;
  int s966c6f3;
  void *s966c6f4;
  ::S7394C6 s966c6f5[8];
  char s966c6f6;
  void *s966c6f7;
  virtual  ~S966C6(); // _ZN6S966C6D1Ev
  virtual void  v1(); // _ZN6S966C62v1Ev
  virtual void  v2(); // _ZN6S966C62v2Ev
  S966C6(); // tgen
};
//SIG(-1 S966C6) C1{ vd v1 v2 FC2{ VBC3{ m FD[2] Fc[8]} FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} Fp FL Fi Fp FU4{ m FD FL FD FL Fi}[8] Fc Fp}


 S966C6 ::~S966C6(){ note_dtor("S966C6", this);}
void  S966C6 ::v1(){vfunc_called(this, "_ZN6S966C62v1Ev");}
void  S966C6 ::v2(){vfunc_called(this, "_ZN6S966C62v2Ev");}
S966C6 ::S966C6(){ note_ctor("S966C6", this);} // tgen

static void Test_S966C6()
{
  extern Class_Descriptor cd_S966C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,82)];
    init_test(&cd_S966C6, buf);
    S966C6 *dp, &lv = *(dp=new (buf) S966C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,324), "sizeof(S966C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C6)");
    check_field_offset(lv, s966c6f0, ABISELECT(16,4), "S966C6.s966c6f0");
    check_field_offset(lv, s966c6f1, ABISELECT(320,200), "S966C6.s966c6f1");
    check_field_offset(lv, s966c6f2, ABISELECT(328,204), "S966C6.s966c6f2");
    check_field_offset(lv, s966c6f3, ABISELECT(336,212), "S966C6.s966c6f3");
    check_field_offset(lv, s966c6f4, ABISELECT(344,216), "S966C6.s966c6f4");
    check_field_offset(lv, s966c6f5, ABISELECT(352,220), "S966C6.s966c6f5");
    check_field_offset(lv, s966c6f6, ABISELECT(480,316), "S966C6.s966c6f6");
    check_field_offset(lv, s966c6f7, ABISELECT(488,320), "S966C6.s966c6f7");
    test_class_info(&lv, &cd_S966C6);
    dp->~S966C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C6(Test_S966C6, "S966C6", ABISELECT(496,324));

#else // __cplusplus

extern void _ZN6S966C6C1Ev();
extern void _ZN6S966C6D1Ev();
Name_Map name_map_S966C6[] = {
  NSPAIR(_ZN6S966C6C1Ev),
  NSPAIR(_ZN6S966C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S966C6[];
extern void _ZN6S966C6D1Ev();
extern void _ZN6S966C6D0Ev();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY vtc_S966C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S966C6[0]),
  (VTBL_ENTRY)&_ZN6S966C6D1Ev,
  (VTBL_ENTRY)&_ZN6S966C6D0Ev,
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern VTBL_ENTRY _ZTI6S966C6[];
extern  VTBL_ENTRY _ZTV6S966C6[];
Class_Descriptor cd_S966C6 = {  "S966C6", // class name
  0,0,//no base classes
  &(vtc_S966C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,324), // object size
  NSPAIRA(_ZTI6S966C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S966C6),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  S966C3  : S7394C3 , S966C5 , virtual S966C6 {
  void *s966c3f0[4];
  __tsi64 s966c3f1;
  void *s966c3f2[3];
  ::S7394C6 s966c3f3;
  ::S966C6 s966c3f4;
  long double s966c3f5;
  short  :0;
  ::S7394C3 s966c3f7;
  long double s966c3f8;
  void *s966c3f9;
  virtual  ~S966C3(); // _ZN6S966C3D2Ev
  virtual void  v3(); // _ZN6S966C32v3Ev
  S966C3(); // tgen
};
//SIG(-1 S966C3) C1{ BC2{ m FD[2] Fc[8]} BC3{ VBC2 FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]} VBC4{ vd v2 v3 FC3 Fp FL Fi Fp FU5{ m FD FL FD FL Fi}[8] Fc Fp} vd v1 Fp[4] FL Fp[3] FU5 FC4 FD Fs:0 FC2 FD Fp}


 S966C3 ::~S966C3(){ note_dtor("S966C3", this);}
void  S966C3 ::v3(){vfunc_called(this, "_ZN6S966C32v3Ev");}
S966C3 ::S966C3(){ note_ctor("S966C3", this);} // tgen

static void Test_S966C3()
{
  extern Class_Descriptor cd_S966C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,247)];
    init_test(&cd_S966C3, buf);
    S966C3 *dp, &lv = *(dp=new (buf) S966C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,984), "sizeof(S966C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C3)");
    /*is_ambiguous_... S966C3::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S966C3");
    check_base_class_offset(lv, (S7394C3*)(S966C5*), ABISELECT(976,628), "S966C3");
    check_base_class_offset(lv, (S966C5*), 0, "S966C3");
    check_base_class_offset(lv, (S966C6*), ABISELECT(1024,660), "S966C3");
    check_field_offset(lv, s966c3f0, ABISELECT(304,196), "S966C3.s966c3f0");
    check_field_offset(lv, s966c3f1, ABISELECT(336,212), "S966C3.s966c3f1");
    check_field_offset(lv, s966c3f2, ABISELECT(344,220), "S966C3.s966c3f2");
    check_field_offset(lv, s966c3f3, ABISELECT(368,232), "S966C3.s966c3f3");
    check_field_offset(lv, s966c3f4, ABISELECT(384,244), "S966C3.s966c3f4");
    check_field_offset(lv, s966c3f5, ABISELECT(880,568), "S966C3.s966c3f5");
    check_field_offset(lv, s966c3f7, ABISELECT(896,580), "S966C3.s966c3f7");
    check_field_offset(lv, s966c3f8, ABISELECT(944,612), "S966C3.s966c3f8");
    check_field_offset(lv, s966c3f9, ABISELECT(960,624), "S966C3.s966c3f9");
    test_class_info(&lv, &cd_S966C3);
    dp->~S966C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C3(Test_S966C3, "S966C3", ABISELECT(1520,984));

#else // __cplusplus

extern void _ZN6S966C3C1Ev();
extern void _ZN6S966C3D2Ev();
Name_Map name_map_S966C3[] = {
  NSPAIR(_ZN6S966C3C1Ev),
  NSPAIR(_ZN6S966C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C6;
extern VTBL_ENTRY _ZTI6S966C6[];
extern  VTBL_ENTRY _ZTV6S966C6[];
static Base_Class bases_S966C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C3,    ABISELECT(976,628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S966C5,    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_S966C6,    ABISELECT(1024,660), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S966C3[];
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY vtc_S966C3[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern VTBL_ENTRY _ZTV6S966C3[];
static  VTBL_ENTRY _tg__ZTV6S966C5__6S966C3[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
static  VTT_ENTRY vtt_S966C3[] = {
  {&(_ZTV6S966C3[4]),  4,16},
  {&(_tg__ZTV6S966C5__6S966C3[3]),  3,3},
  {&(_ZTV6S966C3[12]),  12,16},
};
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S966C3 = {  "S966C3", // class name
  bases_S966C3, 4,
  &(vtc_S966C3[0]), // expected_vtbl_contents
  &(vtt_S966C3[0]), // expected_vtt_contents
  ABISELECT(1520,984), // object size
  NSPAIRA(_ZTI6S966C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S966C3),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S966C3),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S966C2  : S966C3 {
  ::S966C5 s966c2f0;
  void *s966c2f1[5];
  int s966c2f2;
  __tsi64 s966c2f3[9];
  ::S468C20_nt s966c2f4;
  __tsi64 s966c2f5[6];
  char  :0;
  __tsi64 s966c2f7;
  long double s966c2f8;
  ::S7394C6 s966c2f9;
  ::S7394C3 s966c2f10;
  int s966c2f11;
  int s966c2f12;
  long s966c2f13;
  virtual  ~S966C2(); // _ZN6S966C2D2Ev
  S966C2(); // tgen
};
//SIG(-1 S966C2) C1{ BC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v1 v2 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} vd FC4 Fp[5] Fi FL[9] FC7{} FL[6] Fc:0 FL FD FU6 FC3 Fi Fi Fl}


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

static void Test_S966C2()
{
  extern Class_Descriptor cd_S966C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(133,352)];
    init_test(&cd_S966C2, buf);
    S966C2 *dp, &lv = *(dp=new (buf) S966C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1404), "sizeof(S966C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C2)");
    /*is_ambiguous_... S966C3::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*), ABISELECT(256,164), "S966C2");
    check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*), ABISELECT(1568,1048), "S966C2");
    check_base_class_offset(lv, (S966C5*)(S966C3*), 0, "S966C2");
    check_base_class_offset(lv, (S966C6*)(S966C3*), ABISELECT(1616,1080), "S966C2");
    check_base_class_offset(lv, (S966C3*), 0, "S966C2");
    check_field_offset(lv, s966c2f0, ABISELECT(976,628), "S966C2.s966c2f0");
    check_field_offset(lv, s966c2f1, ABISELECT(1280,824), "S966C2.s966c2f1");
    check_field_offset(lv, s966c2f2, ABISELECT(1320,844), "S966C2.s966c2f2");
    check_field_offset(lv, s966c2f3, ABISELECT(1328,848), "S966C2.s966c2f3");
    check_field_offset(lv, s966c2f4, ABISELECT(1400,920), "S966C2.s966c2f4");
    check_field_offset(lv, s966c2f5, ABISELECT(1408,924), "S966C2.s966c2f5");
    check_field_offset(lv, s966c2f7, ABISELECT(1456,972), "S966C2.s966c2f7");
    check_field_offset(lv, s966c2f8, ABISELECT(1472,980), "S966C2.s966c2f8");
    check_field_offset(lv, s966c2f9, ABISELECT(1488,992), "S966C2.s966c2f9");
    check_field_offset(lv, s966c2f10, ABISELECT(1504,1004), "S966C2.s966c2f10");
    check_field_offset(lv, s966c2f11, ABISELECT(1552,1036), "S966C2.s966c2f11");
    check_field_offset(lv, s966c2f12, ABISELECT(1556,1040), "S966C2.s966c2f12");
    check_field_offset(lv, s966c2f13, ABISELECT(1560,1044), "S966C2.s966c2f13");
    test_class_info(&lv, &cd_S966C2);
    dp->~S966C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C2(Test_S966C2, "S966C2", ABISELECT(2112,1404));

#else // __cplusplus

extern void _ZN6S966C2C1Ev();
extern void _ZN6S966C2D2Ev();
Name_Map name_map_S966C2[] = {
  NSPAIR(_ZN6S966C2C1Ev),
  NSPAIR(_ZN6S966C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C6;
extern VTBL_ENTRY _ZTI6S966C6[];
extern  VTBL_ENTRY _ZTV6S966C6[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
static Base_Class bases_S966C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(1568,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S966C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S966C6,    ABISELECT(1616,1080), //bcp->offset
    7, //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
    4, //immediately_derived
  0, 1},
  {&cd_S966C3,    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 _ZTI6S966C2[];
extern void _ZN6S966C2D1Ev();
extern void _ZN6S966C2D0Ev();
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev)();
extern void ABISELECT(_ZThn1616_N6S966C2D1Ev,_ZThn1080_N6S966C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev)();
extern void ABISELECT(_ZThn1616_N6S966C2D0Ev,_ZThn1080_N6S966C2D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY vtc_S966C2[] = {
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C2[0]),
  (VTBL_ENTRY)&_ZN6S966C2D1Ev,
  (VTBL_ENTRY)&_ZN6S966C2D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  0,
  ABISELECT(-1616,-1080),
  ABISELECT(-1616,-1080),
  (VTBL_ENTRY)&(_ZTI6S966C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern VTBL_ENTRY _ZTV6S966C2[];
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__6S966C2[] = {
  ABISELECT(1616,1080),
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C3__6S966C2[] = {
  ABISELECT(1568,1048),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZThn1616_N6S966C3D1Ev,_ZThn1080_N6S966C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void ABISELECT(_ZThn1616_N6S966C3D0Ev,_ZThn1080_N6S966C3D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C3__6S966C2[] = {
  0,
  0,
  ABISELECT(-1616,-1080),
  ABISELECT(-1616,-1080),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
static  VTT_ENTRY vtt_S966C2[] = {
  {&(_ZTV6S966C2[4]),  4,16},
  {&(_tg__ZTV6S966C3__6S966C2[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C3__6S966C2[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C3__6S966C2[5]),  5,9},
  {&(_ZTV6S966C2[12]),  12,16},
};
extern VTBL_ENTRY _ZTI6S966C2[];
extern  VTBL_ENTRY _ZTV6S966C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C2[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N6S966C3D0Ev,_ZThn1080_N6S966C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N6S966C3D1Ev,_ZThn1080_N6S966C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N6S966C2D0Ev,_ZThn1080_N6S966C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1616_N6S966C2D1Ev,_ZThn1080_N6S966C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S966C2 = {  "S966C2", // class name
  bases_S966C2, 5,
  &(vtc_S966C2[0]), // expected_vtbl_contents
  &(vtt_S966C2[0]), // expected_vtt_contents
  ABISELECT(2112,1404), // object size
  NSPAIRA(_ZTI6S966C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S966C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S966C2),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S966C11  : virtual S966C3 , S7394C9 {
  long double s966c11f0;
  __tsi64 s966c11f1;
  __tsi64 s966c11f2:13;
  virtual  ~S966C11(); // _ZN7S966C11D2Ev
  S966C11(); // tgen
};
//SIG(-1 S966C11) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v1 v2 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} BC7{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13}


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

static void Test_S966C11()
{
  extern Class_Descriptor cd_S966C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,268)];
    init_test(&cd_S966C11, buf);
    S966C11 *dp, &lv = *(dp=new (buf) S966C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,1068), "sizeof(S966C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C11)");
    /*is_ambiguous_... S966C3::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*), ABISELECT(368,248), "S966C11");
    check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*), ABISELECT(1088,712), "S966C11");
    check_base_class_offset(lv, (S966C5*)(S966C3*), ABISELECT(112,84), "S966C11");
    check_base_class_offset(lv, (S966C6*)(S966C3*), ABISELECT(1136,744), "S966C11");
    check_base_class_offset(lv, (S966C3*), ABISELECT(112,84), "S966C11");
    check_base_class_offset(lv, (S7394C9*), ABISELECT(8,4), "S966C11");
    check_field_offset(lv, s966c11f0, ABISELECT(80,60), "S966C11.s966c11f0");
    check_field_offset(lv, s966c11f1, ABISELECT(96,72), "S966C11.s966c11f1");
    set_bf_and_test(lv, s966c11f2, ABISELECT(104,80), 0, 13, 1, "S966C11");
    set_bf_and_test(lv, s966c11f2, ABISELECT(104,80), 0, 13, hide_sll(1LL<<12), "S966C11");
    test_class_info(&lv, &cd_S966C11);
    dp->~S966C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C11(Test_S966C11, "S966C11", ABISELECT(1632,1068));

#else // __cplusplus

extern void _ZN7S966C11C1Ev();
extern void _ZN7S966C11D2Ev();
Name_Map name_map_S966C11[] = {
  NSPAIR(_ZN7S966C11C1Ev),
  NSPAIR(_ZN7S966C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C6;
extern VTBL_ENTRY _ZTI6S966C6[];
extern  VTBL_ENTRY _ZTV6S966C6[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
static Base_Class bases_S966C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(1088,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S966C5,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S966C6,    ABISELECT(1136,744), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S966C3,    ABISELECT(112,84), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S966C11[];
extern void _ZN7S966C11D1Ev();
extern void _ZN7S966C11D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev)();
extern void ABISELECT(_ZThn112_N7S966C11D1Ev,_ZThn84_N7S966C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev)();
extern void ABISELECT(_ZThn112_N7S966C11D0Ev,_ZThn84_N7S966C11D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev)();
extern void ABISELECT(_ZThn1136_N7S966C11D1Ev,_ZThn744_N7S966C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev)();
extern void ABISELECT(_ZThn1136_N7S966C11D0Ev,_ZThn744_N7S966C11D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY vtc_S966C11[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&_ZN7S966C11D1Ev,
  (VTBL_ENTRY)&_ZN7S966C11D0Ev,
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S966C11[];
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C11[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C3__7S966C11[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C3__7S966C11[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
static  VTT_ENTRY vtt_S966C11[] = {
  {&(_ZTV7S966C11[5]),  5,25},
  {&(_ZTV7S966C11[13]),  13,25},
  {&(_ZTV7S966C11[21]),  21,25},
  {&(_tg__ZTV6S966C3__7S966C11[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C3__7S966C11[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C3__7S966C11[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S966C11[];
extern  VTBL_ENTRY _ZTV7S966C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C11[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S966C11D0Ev,_ZThn744_N7S966C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S966C11D1Ev,_ZThn744_N7S966C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S966C11D0Ev,_ZThn84_N7S966C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S966C11D1Ev,_ZThn84_N7S966C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S966C11 = {  "S966C11", // class name
  bases_S966C11, 6,
  &(vtc_S966C11[0]), // expected_vtbl_contents
  &(vtt_S966C11[0]), // expected_vtt_contents
  ABISELECT(1632,1068), // object size
  NSPAIRA(_ZTI7S966C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S966C11),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S966C11),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S966C10  : virtual S966C11 {
  ::S966C6 s966c10f0;
  int s966c10f1;
  int s966c10f2;
  ::S7394C6 s966c10f3;
  virtual  ~S966C10(); // _ZN7S966C10D2Ev
  virtual void  v4(); // _ZN7S966C102v4Ev
  S966C10(); // tgen
};
//SIG(-1 S966C10) C1{ VBC2{ VBC3{ BC4{ m FD[2] Fc[8]} BC5{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC6{ vd v2 v3 FC5 Fp FL Fi Fp FU7{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU7 FC6 FD Fs:0 FC4 FD Fp} BC8{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} vd v1 FC6 Fi Fi FU7}


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

static void Test_S966C10()
{
  extern Class_Descriptor cd_S966C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(137,355)];
    init_test(&cd_S966C10, buf);
    S966C10 *dp, &lv = *(dp=new (buf) S966C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2176,1416), "sizeof(S966C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C10)");
    /*is_ambiguous_... S966C3::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*), ABISELECT(912,596), "S966C10");
    check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*), ABISELECT(1632,1060), "S966C10");
    check_base_class_offset(lv, (S966C5*)(S966C3*), ABISELECT(656,432), "S966C10");
    check_base_class_offset(lv, (S966C6*)(S966C3*), ABISELECT(1680,1092), "S966C10");
    check_base_class_offset(lv, (S966C3*)(S966C11*), ABISELECT(656,432), "S966C10");
    check_base_class_offset(lv, (S7394C9*)(S966C11*), ABISELECT(552,352), "S966C10");
    check_base_class_offset(lv, (S966C11*), ABISELECT(544,348), "S966C10");
    check_field_offset(lv, s966c10f0, ABISELECT(16,4), "S966C10.s966c10f0");
    check_field_offset(lv, s966c10f1, ABISELECT(512,328), "S966C10.s966c10f1");
    check_field_offset(lv, s966c10f2, ABISELECT(516,332), "S966C10.s966c10f2");
    check_field_offset(lv, s966c10f3, ABISELECT(528,336), "S966C10.s966c10f3");
    test_class_info(&lv, &cd_S966C10);
    dp->~S966C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C10(Test_S966C10, "S966C10", ABISELECT(2176,1416));

#else // __cplusplus

extern void _ZN7S966C10C1Ev();
extern void _ZN7S966C10D2Ev();
Name_Map name_map_S966C10[] = {
  NSPAIR(_ZN7S966C10C1Ev),
  NSPAIR(_ZN7S966C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C6;
extern VTBL_ENTRY _ZTI6S966C6[];
extern  VTBL_ENTRY _ZTV6S966C6[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S966C11;
extern VTBL_ENTRY _ZTI7S966C11[];
extern  VTBL_ENTRY _ZTV7S966C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C11[];
static Base_Class bases_S966C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(912,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(1632,1060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S966C5,    ABISELECT(656,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S966C6,    ABISELECT(1680,1092), //bcp->offset
    26, //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
    4, //immediately_derived
  0, 1},
  {&cd_S966C3,    ABISELECT(656,432), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(552,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S966C11,    ABISELECT(544,348), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S966C10[];
extern void _ZN7S966C10D1Ev();
extern void _ZN7S966C10D0Ev();
extern void _ZN7S966C102v4Ev();
extern void ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev)();
extern void ABISELECT(_ZThn544_N7S966C10D1Ev,_ZThn348_N7S966C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev)();
extern void ABISELECT(_ZThn544_N7S966C10D0Ev,_ZThn348_N7S966C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev)();
extern void ABISELECT(_ZThn656_N7S966C10D1Ev,_ZThn432_N7S966C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev)();
extern void ABISELECT(_ZThn656_N7S966C10D0Ev,_ZThn432_N7S966C10D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S966C10D1Ev,_ZTv0_n12_N7S966C10D1Ev)();
extern void ABISELECT(_ZThn1680_N7S966C10D1Ev,_ZThn1092_N7S966C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S966C10D0Ev,_ZTv0_n12_N7S966C10D0Ev)();
extern void ABISELECT(_ZThn1680_N7S966C10D0Ev,_ZThn1092_N7S966C10D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY vtc_S966C10[] = {
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&_ZN7S966C10D1Ev,
  (VTBL_ENTRY)&_ZN7S966C10D0Ev,
  (VTBL_ENTRY)&_ZN7S966C102v4Ev,
  ABISELECT(-544,-348),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-544,-348),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev),
  0,
  ABISELECT(-656,-432),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-656,-432),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  0,
  ABISELECT(-1680,-1092),
  ABISELECT(-1680,-1092),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C10D1Ev,_ZTv0_n12_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C10D0Ev,_ZTv0_n12_N7S966C10D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S966C10[];
extern void _ZN7S966C11D1Ev();
extern void _ZN7S966C11D0Ev();
static  VTBL_ENTRY _tg__ZTV7S966C11__7S966C10[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&_ZN7S966C11D1Ev,
  (VTBL_ENTRY)&_ZN7S966C11D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev)();
extern void ABISELECT(_ZThn112_N7S966C11D1Ev,_ZThn84_N7S966C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev)();
extern void ABISELECT(_ZThn112_N7S966C11D0Ev,_ZThn84_N7S966C11D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C11__7S966C10[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev)();
extern void ABISELECT(_ZThn1136_N7S966C11D1Ev,_ZThn744_N7S966C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev)();
extern void ABISELECT(_ZThn1136_N7S966C11D0Ev,_ZThn744_N7S966C11D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__7S966C11__7S966C10[] = {
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C10[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C3__7S966C10[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C3__7S966C10[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
static  VTT_ENTRY vtt_S966C10[] = {
  {&(_ZTV7S966C10[6]),  6,35},
  {&(_ZTV7S966C10[15]),  15,35},
  {&(_ZTV7S966C10[23]),  23,35},
  {&(_ZTV7S966C10[31]),  31,35},
  {&(_tg__ZTV7S966C11__7S966C10[5]),  5,7},
  {&(_tg__ZTV6S966C3__7S966C11__7S966C10[6]),  6,9},
  {&(_tg__ZTV6S966C6__7S966C11__7S966C10[5]),  5,9},
  {&(_tg__ZTV6S966C3__7S966C10[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C3__7S966C10[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C3__7S966C10[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S966C10[];
extern  VTBL_ENTRY _ZTV7S966C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C10[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S966C11D0Ev,_ZThn744_N7S966C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S966C11D1Ev,_ZThn744_N7S966C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S966C11D0Ev,_ZThn84_N7S966C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S966C11D1Ev,_ZThn84_N7S966C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C10D0Ev,_ZTv0_n12_N7S966C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N7S966C10D0Ev,_ZThn1092_N7S966C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C10D1Ev,_ZTv0_n12_N7S966C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N7S966C10D1Ev,_ZThn1092_N7S966C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S966C10D0Ev,_ZThn432_N7S966C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S966C10D1Ev,_ZThn432_N7S966C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S966C10D0Ev,_ZThn348_N7S966C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S966C10D1Ev,_ZThn348_N7S966C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S966C10 = {  "S966C10", // class name
  bases_S966C10, 7,
  &(vtc_S966C10[0]), // expected_vtbl_contents
  &(vtt_S966C10[0]), // expected_vtt_contents
  ABISELECT(2176,1416), // object size
  NSPAIRA(_ZTI7S966C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S966C10),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S966C10),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S966C13  : virtual S966C3 {
  short s966c13f0;
  __tsi64 s966c13f1;
  ::S966C6 s966c13f2;
  ::S7394C3 s966c13f3[5];
  ::S966C3 s966c13f4[8];
  ::S966C5 s966c13f5[5];
  ::S966C5 s966c13f6;
  void *s966c13f7;
  __tsi64 s966c13f8;
  __tsi64 s966c13f9;
  int s966c13f10[2];
  virtual  ~S966C13(); // _ZN7S966C13D2Ev
  virtual void  v5(); // _ZN7S966C132v5Ev
  S966C13(); // tgen
};
//SIG(-1 S966C13) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v2 v3 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} vd v1 Fs FL FC5 FC3[5] FC2[8] FC4[5] FC4 Fp FL FL Fi[2]}


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

static void Test_S966C13()
{
  extern Class_Descriptor cd_S966C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1020,2641)];
    init_test(&cd_S966C13, buf);
    S966C13 *dp, &lv = *(dp=new (buf) S966C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16304,10560), "sizeof(S966C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C13)");
    /*is_ambiguous_... S966C3::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*), ABISELECT(15040,9740), "S966C13");
    check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*), ABISELECT(15760,10204), "S966C13");
    check_base_class_offset(lv, (S966C5*)(S966C3*), ABISELECT(14784,9576), "S966C13");
    check_base_class_offset(lv, (S966C6*)(S966C3*), ABISELECT(15808,10236), "S966C13");
    check_base_class_offset(lv, (S966C3*), ABISELECT(14784,9576), "S966C13");
    check_field_offset(lv, s966c13f0, ABISELECT(8,4), "S966C13.s966c13f0");
    check_field_offset(lv, s966c13f1, ABISELECT(16,8), "S966C13.s966c13f1");
    check_field_offset(lv, s966c13f2, ABISELECT(32,16), "S966C13.s966c13f2");
    check_field_offset(lv, s966c13f3, ABISELECT(528,340), "S966C13.s966c13f3");
    check_field_offset(lv, s966c13f4, ABISELECT(768,500), "S966C13.s966c13f4");
    check_field_offset(lv, s966c13f5, ABISELECT(12928,8372), "S966C13.s966c13f5");
    check_field_offset(lv, s966c13f6, ABISELECT(14448,9352), "S966C13.s966c13f6");
    check_field_offset(lv, s966c13f7, ABISELECT(14752,9548), "S966C13.s966c13f7");
    check_field_offset(lv, s966c13f8, ABISELECT(14760,9552), "S966C13.s966c13f8");
    check_field_offset(lv, s966c13f9, ABISELECT(14768,9560), "S966C13.s966c13f9");
    check_field_offset(lv, s966c13f10, ABISELECT(14776,9568), "S966C13.s966c13f10");
    test_class_info(&lv, &cd_S966C13);
    dp->~S966C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C13(Test_S966C13, "S966C13", ABISELECT(16304,10560));

#else // __cplusplus

extern void _ZN7S966C13C1Ev();
extern void _ZN7S966C13D2Ev();
Name_Map name_map_S966C13[] = {
  NSPAIR(_ZN7S966C13C1Ev),
  NSPAIR(_ZN7S966C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C6;
extern VTBL_ENTRY _ZTI6S966C6[];
extern  VTBL_ENTRY _ZTV6S966C6[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
static Base_Class bases_S966C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(15040,9740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(15760,10204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S966C5,    ABISELECT(14784,9576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S966C6,    ABISELECT(15808,10236), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S966C3,    ABISELECT(14784,9576), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S966C13[];
extern void _ZN7S966C13D1Ev();
extern void _ZN7S966C13D0Ev();
extern void _ZN7S966C132v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S966C13D1Ev,_ZTv0_n20_N7S966C13D1Ev)();
extern void ABISELECT(_ZThn14784_N7S966C13D1Ev,_ZThn9576_N7S966C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C13D0Ev,_ZTv0_n20_N7S966C13D0Ev)();
extern void ABISELECT(_ZThn14784_N7S966C13D0Ev,_ZThn9576_N7S966C13D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S966C13D1Ev,_ZTv0_n12_N7S966C13D1Ev)();
extern void ABISELECT(_ZThn15808_N7S966C13D1Ev,_ZThn10236_N7S966C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S966C13D0Ev,_ZTv0_n12_N7S966C13D0Ev)();
extern void ABISELECT(_ZThn15808_N7S966C13D0Ev,_ZThn10236_N7S966C13D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY vtc_S966C13[] = {
  ABISELECT(15808,10236),
  ABISELECT(15760,10204),
  ABISELECT(14784,9576),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&_ZN7S966C13D1Ev,
  (VTBL_ENTRY)&_ZN7S966C13D0Ev,
  (VTBL_ENTRY)&_ZN7S966C132v5Ev,
  0,
  ABISELECT(-14784,-9576),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-14784,-9576),
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C13D1Ev,_ZTv0_n20_N7S966C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C13D0Ev,_ZTv0_n20_N7S966C13D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  0,
  ABISELECT(-15808,-10236),
  ABISELECT(-15808,-10236),
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C13D1Ev,_ZTv0_n12_N7S966C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C13D0Ev,_ZTv0_n12_N7S966C13D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S966C13[];
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C13[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C3__7S966C13[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C3__7S966C13[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
static  VTT_ENTRY vtt_S966C13[] = {
  {&(_ZTV7S966C13[5]),  5,26},
  {&(_ZTV7S966C13[14]),  14,26},
  {&(_ZTV7S966C13[22]),  22,26},
  {&(_tg__ZTV6S966C3__7S966C13[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C3__7S966C13[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C3__7S966C13[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S966C13[];
extern  VTBL_ENTRY _ZTV7S966C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C13[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C13D0Ev,_ZTv0_n12_N7S966C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N7S966C13D0Ev,_ZThn10236_N7S966C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C13D1Ev,_ZTv0_n12_N7S966C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N7S966C13D1Ev,_ZThn10236_N7S966C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C13D0Ev,_ZTv0_n20_N7S966C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N7S966C13D0Ev,_ZThn9576_N7S966C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C13D1Ev,_ZTv0_n20_N7S966C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14784_N7S966C13D1Ev,_ZThn9576_N7S966C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S966C13 = {  "S966C13", // class name
  bases_S966C13, 5,
  &(vtc_S966C13[0]), // expected_vtbl_contents
  &(vtt_S966C13[0]), // expected_vtt_contents
  ABISELECT(16304,10560), // object size
  NSPAIRA(_ZTI7S966C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S966C13),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S966C13),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S966C9  : virtual S966C10 , virtual S966C2 , virtual S966C13 {
  int s966c9f0;
  int s966c9f1;
  ::S966C13 s966c9f2;
  __tsi64 s966c9f3;
  int s966c9f4;
  long double s966c9f5;
  void *s966c9f6;
  int s966c9f7;
  virtual void  v6(); // _ZN6S966C92v6Ev
  ~S966C9(); // tgen
  S966C9(); // tgen
};
//SIG(-1 S966C9) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FD[2] Fc[8]} BC6{ VBC5 FL[4] FC5 Fi FC5 FL Fp FC5 Fp[4]} VBC7{ vd v2 v3 FC6 Fp FL Fi Fp FU8{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU8 FC7 FD Fs:0 FC5 FD Fp} BC9{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} vd v5 FC7 Fi Fi FU8} VBC10{ BC4 vd FC6 Fp[5] Fi FL[9] FC11{} FL[6] Fc:0 FL FD FU8 FC5 Fi Fi Fl} VBC12{ VBC4 vd v6 Fs FL FC7 FC5[5] FC4[8] FC6[5] FC6 Fp FL FL Fi[2]} v1 Fi Fi FC12 FL Fi FD Fp Fi}


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

static void Test_S966C9()
{
  extern Class_Descriptor cd_S966C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2182,5662)];
    init_test(&cd_S966C9, buf);
    S966C9 *dp, &lv = *(dp=new (buf) S966C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(34896,22644), "sizeof(S966C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C9)");
    /*is_ambiguous_... S966C9::S966C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*), ABISELECT(17280,11200), "S966C9");
    /*is_ambiguous_... S966C9::S966C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*), ABISELECT(18000,11664), "S966C9");
    check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*)(S966C2*), ABISELECT(18000,11664), "S966C9");
    /*is_ambiguous_... S966C9::S966C3 */ AMB_check_base_class_offset(lv, (S966C5*)(S966C3*), ABISELECT(17024,11036), "S966C9");
    /*is_ambiguous_... S966C9::S966C3 */ AMB_check_base_class_offset(lv, (S966C6*)(S966C3*), ABISELECT(18048,11696), "S966C9");
    check_base_class_offset(lv, (S966C6*)(S966C3*)(S966C2*), ABISELECT(18048,11696), "S966C9");
    check_base_class_offset(lv, (S966C3*)(S966C11*), ABISELECT(17024,11036), "S966C9");
    check_base_class_offset(lv, (S966C3*)(S966C13*), ABISELECT(17024,11036), "S966C9");
    check_base_class_offset(lv, (S7394C9*)(S966C11*), ABISELECT(16920,10956), "S966C9");
    check_base_class_offset(lv, (S966C11*)(S966C10*), ABISELECT(16912,10952), "S966C9");
    check_base_class_offset(lv, (S966C10*), ABISELECT(16368,10604), "S966C9");
    /*is_ambiguous_... S966C3::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*)(S966C2*), ABISELECT(18800,12184), "S966C9");
    check_base_class_offset(lv, (S966C5*)(S966C3*)(S966C2*), ABISELECT(18544,12020), "S966C9");
    check_base_class_offset(lv, (S966C3*)(S966C2*), ABISELECT(18544,12020), "S966C9");
    check_base_class_offset(lv, (S966C2*), ABISELECT(18544,12020), "S966C9");
    check_base_class_offset(lv, (S966C13*), ABISELECT(20112,13068), "S966C9");
    check_field_offset(lv, s966c9f0, ABISELECT(8,4), "S966C9.s966c9f0");
    check_field_offset(lv, s966c9f1, ABISELECT(12,8), "S966C9.s966c9f1");
    check_field_offset(lv, s966c9f2, ABISELECT(16,12), "S966C9.s966c9f2");
    check_field_offset(lv, s966c9f3, ABISELECT(16320,10572), "S966C9.s966c9f3");
    check_field_offset(lv, s966c9f4, ABISELECT(16328,10580), "S966C9.s966c9f4");
    check_field_offset(lv, s966c9f5, ABISELECT(16336,10584), "S966C9.s966c9f5");
    check_field_offset(lv, s966c9f6, ABISELECT(16352,10596), "S966C9.s966c9f6");
    check_field_offset(lv, s966c9f7, ABISELECT(16360,10600), "S966C9.s966c9f7");
    test_class_info(&lv, &cd_S966C9);
    dp->~S966C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C9(Test_S966C9, "S966C9", ABISELECT(34896,22644));

#else // __cplusplus

extern void _ZN6S966C9C1Ev();
extern void _ZN6S966C9D1Ev();
Name_Map name_map_S966C9[] = {
  NSPAIR(_ZN6S966C9C1Ev),
  NSPAIR(_ZN6S966C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C6;
extern VTBL_ENTRY _ZTI6S966C6[];
extern  VTBL_ENTRY _ZTV6S966C6[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S966C11;
extern VTBL_ENTRY _ZTI7S966C11[];
extern  VTBL_ENTRY _ZTV7S966C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C11[];
extern Class_Descriptor cd_S966C10;
extern VTBL_ENTRY _ZTI7S966C10[];
extern  VTBL_ENTRY _ZTV7S966C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C10[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
extern Class_Descriptor cd_S966C2;
extern VTBL_ENTRY _ZTI6S966C2[];
extern  VTBL_ENTRY _ZTV6S966C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C2[];
extern Class_Descriptor cd_S966C13;
extern VTBL_ENTRY _ZTI7S966C13[];
extern  VTBL_ENTRY _ZTV7S966C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C13[];
static Base_Class bases_S966C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(17280,11200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7394C3,    ABISELECT(18000,11664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S966C5,    ABISELECT(17024,11036), //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
    4, //immediately_derived
  0, 0},
  {&cd_S966C6,    ABISELECT(18048,11696), //bcp->offset
    40, //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
    4, //immediately_derived
  0, 1},
  {&cd_S966C3,    ABISELECT(17024,11036), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //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
    6, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(16920,10956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S966C11,    ABISELECT(16912,10952), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S966C10,    ABISELECT(16368,10604), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7394C3,    ABISELECT(18800,12184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S966C5,    ABISELECT(18544,12020), //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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S966C3,    ABISELECT(18544,12020), //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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S966C2,    ABISELECT(18544,12020), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S966C13,    ABISELECT(20112,13068), //bcp->offset
    58, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S966C9[];
extern void _ZN6S966C92v6Ev();
extern void _ZN6S966C9D1Ev();
extern void _ZN6S966C9D0Ev();
extern void ABISELECT(_ZTv0_n56_N6S966C9D1Ev,_ZTv0_n28_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn16368_N6S966C9D1Ev,_ZThn10604_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N6S966C9D0Ev,_ZTv0_n28_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn16368_N6S966C9D0Ev,_ZThn10604_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN7S966C102v4Ev();
extern void ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn16912_N6S966C9D1Ev,_ZThn10952_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn16912_N6S966C9D0Ev,_ZThn10952_N6S966C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn17024_N6S966C9D1Ev,_ZThn11036_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn17024_N6S966C9D0Ev,_ZThn11036_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S966C9D1Ev,_ZTv0_n12_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn18048_N6S966C9D1Ev,_ZThn11696_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C9D0Ev,_ZTv0_n12_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn18048_N6S966C9D0Ev,_ZThn11696_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
extern void ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn18544_N6S966C9D1Ev,_ZThn12020_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn18544_N6S966C9D0Ev,_ZThn12020_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn20112_N6S966C9D1Ev,_ZThn13068_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn20112_N6S966C9D0Ev,_ZThn13068_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN7S966C132v5Ev();
static  VTBL_ENTRY vtc_S966C9[] = {
  ABISELECT(20112,13068),
  ABISELECT(18544,12020),
  ABISELECT(18048,11696),
  ABISELECT(18000,11664),
  ABISELECT(17024,11036),
  ABISELECT(16912,10952),
  ABISELECT(16368,10604),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&_ZN6S966C92v6Ev,
  (VTBL_ENTRY)&_ZN6S966C9D1Ev,
  (VTBL_ENTRY)&_ZN6S966C9D0Ev,
  0,
  ABISELECT(-16368,-10604),
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  ABISELECT(-16368,-10604),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N6S966C9D1Ev,_ZTv0_n28_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N6S966C9D0Ev,_ZTv0_n28_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN7S966C102v4Ev,
  ABISELECT(-16912,-10952),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-16912,-10952),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev),
  0,
  ABISELECT(-17024,-11036),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-17024,-11036),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  0,
  ABISELECT(-18048,-11696),
  ABISELECT(-18048,-11696),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C9D1Ev,_ZTv0_n12_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C9D0Ev,_ZTv0_n12_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
  0,
  ABISELECT(-18544,-12020),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(-18544,-12020),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  ABISELECT(-20112,-13068),
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  ABISELECT(-20112,-13068),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN7S966C132v5Ev,
};
extern VTBL_ENTRY _ZTV6S966C9[];
extern void _ZN7S966C10D1Ev();
extern void _ZN7S966C10D0Ev();
extern void _ZN7S966C102v4Ev();
static  VTBL_ENTRY _tg__ZTV7S966C10__6S966C9[] = {
  ABISELECT(1680,1092),
  ABISELECT(1632,1060),
  ABISELECT(656,432),
  ABISELECT(544,348),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&_ZN7S966C10D1Ev,
  (VTBL_ENTRY)&_ZN7S966C10D0Ev,
  (VTBL_ENTRY)&_ZN7S966C102v4Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev)();
extern void ABISELECT(_ZThn544_N7S966C10D1Ev,_ZThn348_N7S966C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev)();
extern void ABISELECT(_ZThn544_N7S966C10D0Ev,_ZThn348_N7S966C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S966C11__7S966C10__6S966C9[] = {
  ABISELECT(-544,-348),
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  ABISELECT(-544,-348),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev)();
extern void ABISELECT(_ZThn656_N7S966C10D1Ev,_ZThn432_N7S966C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev)();
extern void ABISELECT(_ZThn656_N7S966C10D0Ev,_ZThn432_N7S966C10D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C10__6S966C9[] = {
  0,
  ABISELECT(-656,-432),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-656,-432),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S966C10D1Ev,_ZTv0_n12_N7S966C10D1Ev)();
extern void ABISELECT(_ZThn1680_N7S966C10D1Ev,_ZThn1092_N7S966C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S966C10D0Ev,_ZTv0_n12_N7S966C10D0Ev)();
extern void ABISELECT(_ZThn1680_N7S966C10D0Ev,_ZThn1092_N7S966C10D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__7S966C10__6S966C9[] = {
  0,
  0,
  ABISELECT(-1680,-1092),
  ABISELECT(-1680,-1092),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C10D1Ev,_ZTv0_n12_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C10D0Ev,_ZTv0_n12_N7S966C10D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN7S966C11D1Ev();
extern void _ZN7S966C11D0Ev();
static  VTBL_ENTRY _tg__ZTV7S966C11__6S966C9[] = {
  ABISELECT(1136,744),
  ABISELECT(1088,712),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&_ZN7S966C11D1Ev,
  (VTBL_ENTRY)&_ZN7S966C11D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev)();
extern void ABISELECT(_ZThn112_N7S966C11D1Ev,_ZThn84_N7S966C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev)();
extern void ABISELECT(_ZThn112_N7S966C11D0Ev,_ZThn84_N7S966C11D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C11__6S966C9[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev)();
extern void ABISELECT(_ZThn1136_N7S966C11D1Ev,_ZThn744_N7S966C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev)();
extern void ABISELECT(_ZThn1136_N7S966C11D0Ev,_ZThn744_N7S966C11D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__7S966C11__6S966C9[] = {
  0,
  0,
  ABISELECT(-1136,-744),
  ABISELECT(-1136,-744),
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__6S966C9[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C3__6S966C9[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C3__6S966C9[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN6S966C2D1Ev();
extern void _ZN6S966C2D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C2__6S966C9[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C2[0]),
  (VTBL_ENTRY)&_ZN6S966C2D1Ev,
  (VTBL_ENTRY)&_ZN6S966C2D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C36S966C2__A1__6S966C9[] = {
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C36S966C2__A1__6S966C9[] = {
  ABISELECT(-544,-356),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C36S966C2__A1__6S966C9[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C2__6S966C9[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI6S966C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN7S966C13D1Ev();
extern void _ZN7S966C13D0Ev();
extern void _ZN7S966C132v5Ev();
static  VTBL_ENTRY _tg__ZTV7S966C13__6S966C9[] = {
  ABISELECT(-2064,-1372),
  ABISELECT(-2112,-1404),
  ABISELECT(-3088,-2032),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&_ZN7S966C13D1Ev,
  (VTBL_ENTRY)&_ZN7S966C13D0Ev,
  (VTBL_ENTRY)&_ZN7S966C132v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S966C13D1Ev,_ZTv0_n20_N7S966C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S966C13D0Ev,_ZTv0_n20_N7S966C13D0Ev)();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C13__6S966C9[] = {
  0,
  ABISELECT(3088,2032),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(3088,2032),
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C13D1Ev,_ZTv0_n20_N7S966C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C13D0Ev,_ZTv0_n20_N7S966C13D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S966C13D1Ev,_ZTv0_n12_N7S966C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S966C13D0Ev,_ZTv0_n12_N7S966C13D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__7S966C13__6S966C9[] = {
  0,
  0,
  ABISELECT(2064,1372),
  ABISELECT(2064,1372),
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C13D1Ev,_ZTv0_n12_N7S966C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C13D0Ev,_ZTv0_n12_N7S966C13D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
static  VTT_ENTRY vtt_S966C9[] = {
  {&(_ZTV6S966C9[9]),  9,68},
  {&(_ZTV6S966C9[20]),  20,68},
  {&(_ZTV6S966C9[29]),  29,68},
  {&(_ZTV6S966C9[37]),  37,68},
  {&(_ZTV6S966C9[45]),  45,68},
  {&(_ZTV6S966C9[55]),  55,68},
  {&(_ZTV6S966C9[65]),  65,68},
  {&(_tg__ZTV7S966C10__6S966C9[6]),  6,9},
  {&(_tg__ZTV7S966C11__7S966C10__6S966C9[6]),  6,8},
  {&(_tg__ZTV6S966C3__7S966C10__6S966C9[6]),  6,9},
  {&(_tg__ZTV6S966C6__7S966C10__6S966C9[5]),  5,9},
  {&(_tg__ZTV7S966C11__6S966C9[5]),  5,7},
  {&(_tg__ZTV6S966C3__7S966C11__6S966C9[6]),  6,9},
  {&(_tg__ZTV6S966C6__7S966C11__6S966C9[5]),  5,9},
  {&(_tg__ZTV6S966C3__6S966C9[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C3__6S966C9[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C3__6S966C9[5]),  5,9},
  {&(_tg__ZTV6S966C2__6S966C9[4]),  4,7},
  {&(_tg__ZTV6S966C36S966C2__A1__6S966C9[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C36S966C2__A1__6S966C9[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C36S966C2__A1__6S966C9[5]),  5,9},
  {&(_tg__ZTV6S966C6__6S966C2__6S966C9[5]),  5,9},
  {&(_tg__ZTV7S966C13__6S966C9[5]),  5,8},
  {&(_tg__ZTV6S966C3__7S966C13__6S966C9[6]),  6,9},
  {&(_tg__ZTV6S966C6__7S966C13__6S966C9[5]),  5,9},
};
extern VTBL_ENTRY _ZTI6S966C9[];
extern  VTBL_ENTRY _ZTV6S966C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C9[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D0Ev,_ZThn660_N6S966C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N6S966C3D1Ev,_ZThn660_N6S966C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S966C11D0Ev,_ZThn744_N7S966C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S966C11D1Ev,_ZThn744_N7S966C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S966C11D0Ev,_ZThn84_N7S966C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S966C11D1Ev,_ZThn84_N7S966C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C10D0Ev,_ZTv0_n12_N7S966C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N7S966C10D0Ev,_ZThn1092_N7S966C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S966C10D1Ev,_ZTv0_n12_N7S966C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N7S966C10D1Ev,_ZThn1092_N7S966C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S966C10D0Ev,_ZThn432_N7S966C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S966C10D1Ev,_ZThn432_N7S966C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S966C10D0Ev,_ZThn348_N7S966C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S966C10D1Ev,_ZThn348_N7S966C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C9D0Ev,_ZTv0_n12_N6S966C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N6S966C9D0Ev,_ZThn11696_N6S966C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C9D1Ev,_ZTv0_n12_N6S966C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N6S966C9D1Ev,_ZThn11696_N6S966C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18544_N6S966C9D0Ev,_ZThn12020_N6S966C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17024_N6S966C9D0Ev,_ZThn11036_N6S966C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18544_N6S966C9D1Ev,_ZThn12020_N6S966C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17024_N6S966C9D1Ev,_ZThn11036_N6S966C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20112_N6S966C9D0Ev,_ZThn13068_N6S966C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N6S966C9D0Ev,_ZThn10952_N6S966C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20112_N6S966C9D1Ev,_ZThn13068_N6S966C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N6S966C9D1Ev,_ZThn10952_N6S966C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N6S966C9D0Ev,_ZTv0_n28_N6S966C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N6S966C9D0Ev,_ZThn10604_N6S966C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N6S966C9D1Ev,_ZTv0_n28_N6S966C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N6S966C9D1Ev,_ZThn10604_N6S966C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S966C9 = {  "S966C9", // class name
  bases_S966C9, 13,
  &(vtc_S966C9[0]), // expected_vtbl_contents
  &(vtt_S966C9[0]), // expected_vtt_contents
  ABISELECT(34896,22644), // object size
  NSPAIRA(_ZTI6S966C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S966C9),68, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S966C9),25, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S966C1  : S966C2 , virtual S966C9 , S966C5 {
  int s966c1f0[3];
  int s966c1f1;
  char s966c1f2;
  void *s966c1f3;
  ~S966C1(); // tgen
  S966C1(); // tgen
};
//SIG(1 S966C1) C1{ BC2{ BC3{ BC4{ m FD[2] Fc[8]} BC5{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC6{ vd v1 v2 FC5 Fp FL Fi Fp FU7{ m FD FL FD FL Fi}[8] Fc Fp} vd v3 Fp[4] FL Fp[3] FU7 FC6 FD Fs:0 FC4 FD Fp} vd FC5 Fp[5] Fi FL[9] FC8{} FL[6] Fc:0 FL FD FU7 FC4 Fi Fi Fl} VBC9{ VBC10{ VBC11{ VBC3 BC12{ m FL[4] Fc:1 FL[2] FL:4} vd FD FL FL:13} vd v4 FC6 Fi Fi FU7} VBC2 VBC13{ VBC3 vd v5 Fs FL FC6 FC4[5] FC3[8] FC5[5] FC5 Fp FL FL Fi[2]} v6 Fi Fi FC13 FL Fi FD Fp Fi} BC5 Fi[3] Fi Fc Fp}


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

static void Test_S966C1()
{
  extern Class_Descriptor cd_S966C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2298,5971)];
    init_test(&cd_S966C1, buf);
    S966C1 *dp, &lv = *(dp=new (buf) S966C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(36752,23880), "sizeof(S966C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S966C1)");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*)(S966C2*), ABISELECT(256,164), "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*)(S966C2*), ABISELECT(1856,1236), "S966C1");
    /*is_ambiguous_... S966C1::S966C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*), ABISELECT(1856,1236), "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C5*)(S966C3*)(S966C2*), ABISELECT(1856,1236), "S966C1");
    /*is_ambiguous_... S966C1::S966C5 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C5*), ABISELECT(1856,1236), "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S966C5*)(S966C3*)(S966C2*), 0, "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S966C6*)(S966C3*)(S966C2*), ABISELECT(1904,1268), "S966C1");
    /*is_ambiguous_... S966C1::S966C3 */ AMB_check_base_class_offset(lv, (S966C6*)(S966C3*), ABISELECT(1904,1268), "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S966C6*)(S966C3*)(S966C2*), ABISELECT(1904,1268), "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S966C3*)(S966C2*), 0, "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S966C2*), 0, "S966C1");
    /*is_ambiguous_... S966C1::S966C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*), ABISELECT(19680,12792), "S966C1");
    /*is_ambiguous_... S966C1::S966C3 */ AMB_check_base_class_offset(lv, (S966C5*)(S966C3*), ABISELECT(19424,12628), "S966C1");
    check_base_class_offset(lv, (S966C3*)(S966C11*), ABISELECT(19424,12628), "S966C1");
    check_base_class_offset(lv, (S966C3*)(S966C13*), ABISELECT(19424,12628), "S966C1");
    check_base_class_offset(lv, (S7394C9*)(S966C11*), ABISELECT(19320,12548), "S966C1");
    check_base_class_offset(lv, (S966C11*)(S966C10*), ABISELECT(19312,12544), "S966C1");
    check_base_class_offset(lv, (S966C10*)(S966C9*), ABISELECT(18768,12196), "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S7394C3*)(S966C3*)(S966C2*), ABISELECT(20656,13420), "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S966C5*)(S966C3*)(S966C2*), ABISELECT(20400,13256), "S966C1");
    /*is_ambiguous_... S966C1::S966C2 */ AMB_check_base_class_offset(lv, (S966C3*)(S966C2*), ABISELECT(20400,13256), "S966C1");
    check_base_class_offset(lv, (S966C2*)(S966C9*), ABISELECT(20400,13256), "S966C1");
    check_base_class_offset(lv, (S966C13*)(S966C9*), ABISELECT(21968,14304), "S966C1");
    check_base_class_offset(lv, (S966C9*), ABISELECT(2400,1592), "S966C1");
    /*is_ambiguous_... S966C1::S966C5 */ AMB_check_base_class_offset(lv, (S966C5*), ABISELECT(1568,1048), "S966C1");
    check_field_offset(lv, s966c1f0, ABISELECT(1824,1212), "S966C1.s966c1f0");
    check_field_offset(lv, s966c1f1, ABISELECT(1836,1224), "S966C1.s966c1f1");
    check_field_offset(lv, s966c1f2, ABISELECT(1840,1228), "S966C1.s966c1f2");
    check_field_offset(lv, s966c1f3, ABISELECT(1848,1232), "S966C1.s966c1f3");
    test_class_info(&lv, &cd_S966C1);
    dp->~S966C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS966C1(Test_S966C1, "S966C1", ABISELECT(36752,23880));

#else // __cplusplus

extern void _ZN6S966C1C1Ev();
extern void _ZN6S966C1D1Ev();
Name_Map name_map_S966C1[] = {
  NSPAIR(_ZN6S966C1C1Ev),
  NSPAIR(_ZN6S966C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C6;
extern VTBL_ENTRY _ZTI6S966C6[];
extern  VTBL_ENTRY _ZTV6S966C6[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
extern Class_Descriptor cd_S966C2;
extern VTBL_ENTRY _ZTI6S966C2[];
extern  VTBL_ENTRY _ZTV6S966C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C2[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
extern Class_Descriptor cd_S7394C9;
extern VTBL_ENTRY _ZTI7S7394C9[];
extern Class_Descriptor cd_S966C11;
extern VTBL_ENTRY _ZTI7S966C11[];
extern  VTBL_ENTRY _ZTV7S966C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C11[];
extern Class_Descriptor cd_S966C10;
extern VTBL_ENTRY _ZTI7S966C10[];
extern  VTBL_ENTRY _ZTV7S966C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C10[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
extern Class_Descriptor cd_S966C3;
extern VTBL_ENTRY _ZTI6S966C3[];
extern  VTBL_ENTRY _ZTV6S966C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C3[];
extern Class_Descriptor cd_S966C2;
extern VTBL_ENTRY _ZTI6S966C2[];
extern  VTBL_ENTRY _ZTV6S966C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C2[];
extern Class_Descriptor cd_S966C13;
extern VTBL_ENTRY _ZTI7S966C13[];
extern  VTBL_ENTRY _ZTV7S966C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S966C13[];
extern Class_Descriptor cd_S966C9;
extern VTBL_ENTRY _ZTI6S966C9[];
extern  VTBL_ENTRY _ZTV6S966C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C9[];
extern Class_Descriptor cd_S966C5;
extern VTBL_ENTRY _ZTI6S966C5[];
extern  VTBL_ENTRY _ZTV6S966C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C5[];
static Base_Class bases_S966C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(1856,1236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S966C5,    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
    11, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S966C6,    ABISELECT(1904,1268), //bcp->offset
    16, //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
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S966C3,    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
    12, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S966C2,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C3,    ABISELECT(19680,12792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S966C5,    ABISELECT(19424,12628), //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
    8, //immediately_derived
  0, 0},
  {&cd_S966C3,    ABISELECT(19424,12628), //bcp->offset
    58, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7394C9,    ABISELECT(19320,12548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S966C11,    ABISELECT(19312,12544), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S966C10,    ABISELECT(18768,12196), //bcp->offset
    39, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7394C3,    ABISELECT(20656,13420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S966C5,    ABISELECT(20400,13256), //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
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S966C3,    ABISELECT(20400,13256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S966C2,    ABISELECT(20400,13256), //bcp->offset
    67, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S966C13,    ABISELECT(21968,14304), //bcp->offset
    76, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S966C9,    ABISELECT(2400,1592), //bcp->offset
    25, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S966C5,    ABISELECT(1568,1048), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S966C1[];
extern void _ZN6S966C1D1Ev();
extern void _ZN6S966C1D0Ev();
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N6S966C1D1Ev,_ZTv0_n12_N6S966C1D1Ev)();
extern void ABISELECT(_ZThn1904_N6S966C1D1Ev,_ZThn1268_N6S966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C1D0Ev,_ZTv0_n12_N6S966C1D0Ev)();
extern void ABISELECT(_ZThn1904_N6S966C1D0Ev,_ZThn1268_N6S966C1D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
extern void _ZN6S966C92v6Ev();
extern void ABISELECT(_ZTv0_n88_N6S966C1D1Ev,_ZTv0_n44_N6S966C1D1Ev)();
extern void ABISELECT(_ZThn2400_N6S966C1D1Ev,_ZThn1592_N6S966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N6S966C1D0Ev,_ZTv0_n44_N6S966C1D0Ev)();
extern void ABISELECT(_ZThn2400_N6S966C1D0Ev,_ZThn1592_N6S966C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N6S966C1D1Ev,_ZTv0_n28_N6S966C1D1Ev)();
extern void ABISELECT(_ZThn18768_N6S966C1D1Ev,_ZThn12196_N6S966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N6S966C1D0Ev,_ZTv0_n28_N6S966C1D0Ev)();
extern void ABISELECT(_ZThn18768_N6S966C1D0Ev,_ZThn12196_N6S966C1D0Ev)() __attribute__((weak));
extern void _ZN7S966C102v4Ev();
extern void ABISELECT(_ZTv0_n48_N6S966C1D1Ev,_ZTv0_n24_N6S966C1D1Ev)();
extern void ABISELECT(_ZThn19312_N6S966C1D1Ev,_ZThn12544_N6S966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S966C1D0Ev,_ZTv0_n24_N6S966C1D0Ev)();
extern void ABISELECT(_ZThn19312_N6S966C1D0Ev,_ZThn12544_N6S966C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S966C1D1Ev,_ZTv0_n20_N6S966C1D1Ev)();
extern void ABISELECT(_ZThn19424_N6S966C1D1Ev,_ZThn12628_N6S966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S966C1D0Ev,_ZTv0_n20_N6S966C1D0Ev)();
extern void ABISELECT(_ZThn19424_N6S966C1D0Ev,_ZThn12628_N6S966C1D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n40_N6S966C1D1Ev,_ZTv0_n20_N6S966C1D1Ev)();
extern void ABISELECT(_ZThn20400_N6S966C1D1Ev,_ZThn13256_N6S966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S966C1D0Ev,_ZTv0_n20_N6S966C1D0Ev)();
extern void ABISELECT(_ZThn20400_N6S966C1D0Ev,_ZThn13256_N6S966C1D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
extern void ABISELECT(_ZTv0_n48_N6S966C1D1Ev,_ZTv0_n24_N6S966C1D1Ev)();
extern void ABISELECT(_ZThn21968_N6S966C1D1Ev,_ZThn14304_N6S966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S966C1D0Ev,_ZTv0_n24_N6S966C1D0Ev)();
extern void ABISELECT(_ZThn21968_N6S966C1D0Ev,_ZThn14304_N6S966C1D0Ev)() __attribute__((weak));
extern void _ZN7S966C132v5Ev();
static  VTBL_ENTRY vtc_S966C1[] = {
  ABISELECT(21968,14304),
  ABISELECT(20400,13256),
  ABISELECT(19424,12628),
  ABISELECT(19312,12544),
  ABISELECT(18768,12196),
  ABISELECT(2400,1592),
  ABISELECT(1904,1268),
  ABISELECT(1856,1236),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  (VTBL_ENTRY)&_ZN6S966C1D1Ev,
  (VTBL_ENTRY)&_ZN6S966C1D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  ABISELECT(288,188),
  ABISELECT(-1568,-1048),
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  0,
  0,
  ABISELECT(-1904,-1268),
  ABISELECT(-1904,-1268),
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C1D1Ev,_ZTv0_n12_N6S966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C1D0Ev,_ZTv0_n12_N6S966C1D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
  ABISELECT(-2400,-1592),
  0,
  ABISELECT(19568,12712),
  ABISELECT(18000,11664),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(17024,11036),
  ABISELECT(16912,10952),
  ABISELECT(16368,10604),
  ABISELECT(-2400,-1592),
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  (VTBL_ENTRY)&_ZN6S966C92v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N6S966C1D1Ev,_ZTv0_n44_N6S966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N6S966C1D0Ev,_ZTv0_n44_N6S966C1D0Ev),
  0,
  ABISELECT(-18768,-12196),
  ABISELECT(-16864,-10928),
  ABISELECT(-16912,-10960),
  ABISELECT(656,432),
  ABISELECT(544,348),
  ABISELECT(-18768,-12196),
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N6S966C1D1Ev,_ZTv0_n28_N6S966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N6S966C1D0Ev,_ZTv0_n28_N6S966C1D0Ev),
  (VTBL_ENTRY)&_ZN7S966C102v4Ev,
  ABISELECT(-19312,-12544),
  ABISELECT(-17408,-11276),
  ABISELECT(-17456,-11308),
  ABISELECT(112,84),
  ABISELECT(-19312,-12544),
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C1D1Ev,_ZTv0_n24_N6S966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C1D0Ev,_ZTv0_n24_N6S966C1D0Ev),
  0,
  ABISELECT(-19424,-12628),
  ABISELECT(-17520,-11360),
  ABISELECT(-17568,-11392),
  ABISELECT(-19424,-12628),
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C1D1Ev,_ZTv0_n20_N6S966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C1D0Ev,_ZTv0_n20_N6S966C1D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  ABISELECT(-20400,-13256),
  ABISELECT(-18496,-11988),
  ABISELECT(-18544,-12020),
  ABISELECT(-20400,-13256),
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C1D1Ev,_ZTv0_n20_N6S966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C1D0Ev,_ZTv0_n20_N6S966C1D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
  0,
  ABISELECT(-21968,-14304),
  ABISELECT(-20064,-13036),
  ABISELECT(-20112,-13068),
  ABISELECT(-2544,-1676),
  ABISELECT(-21968,-14304),
  (VTBL_ENTRY)&(_ZTI6S966C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C1D1Ev,_ZTv0_n24_N6S966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C1D0Ev,_ZTv0_n24_N6S966C1D0Ev),
  (VTBL_ENTRY)&_ZN7S966C132v5Ev,
};
extern VTBL_ENTRY _ZTV6S966C1[];
extern void _ZN6S966C2D1Ev();
extern void _ZN6S966C2D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C2__A__6S966C1[] = {
  ABISELECT(1904,1268),
  ABISELECT(1856,1236),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C2[0]),
  (VTBL_ENTRY)&_ZN6S966C2D1Ev,
  (VTBL_ENTRY)&_ZN6S966C2D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C36S966C2__6S966C1[] = {
  ABISELECT(1904,1268),
  ABISELECT(1856,1236),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C36S966C2__6S966C1[] = {
  ABISELECT(1856,1236),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZThn1904_N6S966C3D1Ev,_ZThn1268_N6S966C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void ABISELECT(_ZThn1904_N6S966C3D0Ev,_ZThn1268_N6S966C3D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C36S966C2__6S966C1[] = {
  0,
  0,
  ABISELECT(-1904,-1268),
  ABISELECT(-1904,-1268),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev)();
extern void ABISELECT(_ZThn1904_N6S966C2D1Ev,_ZThn1268_N6S966C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev)();
extern void ABISELECT(_ZThn1904_N6S966C2D0Ev,_ZThn1268_N6S966C2D0Ev)() __attribute__((weak));
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C2__A__6S966C1[] = {
  0,
  0,
  ABISELECT(-1904,-1268),
  ABISELECT(-1904,-1268),
  (VTBL_ENTRY)&(_ZTI6S966C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C5__A3__6S966C1[] = {
  ABISELECT(288,188),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void _ZN6S966C92v6Ev();
extern void _ZN6S966C9D1Ev();
extern void _ZN6S966C9D0Ev();
static  VTBL_ENTRY _tg__ZTV6S966C9__6S966C1[] = {
  ABISELECT(19568,12712),
  ABISELECT(18000,11664),
  ABISELECT(-496,-324),
  ABISELECT(-544,-356),
  ABISELECT(17024,11036),
  ABISELECT(16912,10952),
  ABISELECT(16368,10604),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&_ZN6S966C92v6Ev,
  (VTBL_ENTRY)&_ZN6S966C9D1Ev,
  (VTBL_ENTRY)&_ZN6S966C9D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N6S966C9D1Ev,_ZTv0_n28_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn16368_N6S966C9D1Ev,_ZThn10604_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N6S966C9D0Ev,_ZTv0_n28_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn16368_N6S966C9D0Ev,_ZThn10604_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN7S966C102v4Ev();
static  VTBL_ENTRY _tg__ZTV7S966C10__6S966C9__6S966C1[] = {
  0,
  ABISELECT(-16368,-10604),
  ABISELECT(-16864,-10928),
  ABISELECT(-16912,-10960),
  ABISELECT(656,432),
  ABISELECT(544,348),
  ABISELECT(-16368,-10604),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N6S966C9D1Ev,_ZTv0_n28_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N6S966C9D0Ev,_ZTv0_n28_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN7S966C102v4Ev,
};
extern void ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn16912_N6S966C9D1Ev,_ZThn10952_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn16912_N6S966C9D0Ev,_ZThn10952_N6S966C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S966C11__6S966C9__6S966C1[] = {
  ABISELECT(-16912,-10952),
  ABISELECT(-17408,-11276),
  ABISELECT(-17456,-11308),
  ABISELECT(112,84),
  ABISELECT(-16912,-10952),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn17024_N6S966C9D1Ev,_ZThn11036_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn17024_N6S966C9D0Ev,_ZThn11036_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__6S966C9__6S966C1[] = {
  0,
  ABISELECT(-17024,-11036),
  ABISELECT(-17520,-11360),
  ABISELECT(-17568,-11392),
  ABISELECT(-17024,-11036),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S966C9D1Ev,_ZTv0_n12_N6S966C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S966C9D0Ev,_ZTv0_n12_N6S966C9D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C9__6S966C1[] = {
  0,
  0,
  ABISELECT(496,324),
  ABISELECT(496,324),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C9D1Ev,_ZTv0_n12_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C9D0Ev,_ZTv0_n12_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn18000_N6S966C9D1Ev,_ZThn11664_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn18000_N6S966C9D0Ev,_ZThn11664_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C2__6S966C9__6S966C1[] = {
  0,
  ABISELECT(-18000,-11664),
  ABISELECT(-18496,-11988),
  ABISELECT(-18544,-12020),
  ABISELECT(-18000,-11664),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev)();
extern void ABISELECT(_ZThn19568_N6S966C9D1Ev,_ZThn12712_N6S966C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev)();
extern void ABISELECT(_ZThn19568_N6S966C9D0Ev,_ZThn12712_N6S966C9D0Ev)() __attribute__((weak));
extern void _ZN7S966C132v5Ev();
static  VTBL_ENTRY _tg__ZTV7S966C13__6S966C9__6S966C1[] = {
  0,
  ABISELECT(-19568,-12712),
  ABISELECT(-20064,-13036),
  ABISELECT(-20112,-13068),
  ABISELECT(-2544,-1676),
  ABISELECT(-19568,-12712),
  (VTBL_ENTRY)&(_ZTI6S966C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev),
  (VTBL_ENTRY)&_ZN7S966C132v5Ev,
};
extern void _ZN7S966C10D1Ev();
extern void _ZN7S966C10D0Ev();
extern void _ZN7S966C102v4Ev();
static  VTBL_ENTRY _tg__ZTV7S966C10__6S966C1[] = {
  ABISELECT(-16864,-10928),
  ABISELECT(-16912,-10960),
  ABISELECT(656,432),
  ABISELECT(544,348),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&_ZN7S966C10D1Ev,
  (VTBL_ENTRY)&_ZN7S966C10D0Ev,
  (VTBL_ENTRY)&_ZN7S966C102v4Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev)();
extern void ABISELECT(_ZThn544_N7S966C10D1Ev,_ZThn348_N7S966C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev)();
extern void ABISELECT(_ZThn544_N7S966C10D0Ev,_ZThn348_N7S966C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S966C11__7S966C10__6S966C1[] = {
  ABISELECT(-544,-348),
  ABISELECT(-17408,-11276),
  ABISELECT(-17456,-11308),
  ABISELECT(112,84),
  ABISELECT(-544,-348),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev)();
extern void ABISELECT(_ZThn656_N7S966C10D1Ev,_ZThn432_N7S966C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev)();
extern void ABISELECT(_ZThn656_N7S966C10D0Ev,_ZThn432_N7S966C10D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C10__6S966C1[] = {
  0,
  ABISELECT(-656,-432),
  ABISELECT(-17520,-11360),
  ABISELECT(-17568,-11392),
  ABISELECT(-656,-432),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S966C10D1Ev,_ZTv0_n12_N7S966C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S966C10D0Ev,_ZTv0_n12_N7S966C10D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__7S966C10__6S966C1[] = {
  0,
  0,
  ABISELECT(16864,10928),
  ABISELECT(16864,10928),
  (VTBL_ENTRY)&(_ZTI7S966C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C10D1Ev,_ZTv0_n12_N7S966C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C10D0Ev,_ZTv0_n12_N7S966C10D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN7S966C11D1Ev();
extern void _ZN7S966C11D0Ev();
static  VTBL_ENTRY _tg__ZTV7S966C11__6S966C1[] = {
  ABISELECT(-17408,-11276),
  ABISELECT(-17456,-11308),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&_ZN7S966C11D1Ev,
  (VTBL_ENTRY)&_ZN7S966C11D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev)();
extern void ABISELECT(_ZThn112_N7S966C11D1Ev,_ZThn84_N7S966C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev)();
extern void ABISELECT(_ZThn112_N7S966C11D0Ev,_ZThn84_N7S966C11D0Ev)() __attribute__((weak));
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C11__6S966C1[] = {
  0,
  ABISELECT(-112,-84),
  ABISELECT(-17520,-11360),
  ABISELECT(-17568,-11392),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__7S966C11__6S966C1[] = {
  0,
  0,
  ABISELECT(17408,11276),
  ABISELECT(17408,11276),
  (VTBL_ENTRY)&(_ZTI7S966C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C11D1Ev,_ZTv0_n12_N7S966C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C11D0Ev,_ZTv0_n12_N7S966C11D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__A1__6S966C1[] = {
  ABISELECT(-17520,-11360),
  ABISELECT(-17568,-11392),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C3__A1__6S966C1[] = {
  ABISELECT(-17568,-11392),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C3__A1__6S966C1[] = {
  0,
  0,
  ABISELECT(17520,11360),
  ABISELECT(17520,11360),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN6S966C2D1Ev();
extern void _ZN6S966C2D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C2__A1__6S966C1[] = {
  ABISELECT(-18496,-11988),
  ABISELECT(-18544,-12020),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C2[0]),
  (VTBL_ENTRY)&_ZN6S966C2D1Ev,
  (VTBL_ENTRY)&_ZN6S966C2D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void _ZN6S966C3D1Ev();
extern void _ZN6S966C3D0Ev();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C36S966C2__A2__6S966C1[] = {
  ABISELECT(-18496,-11988),
  ABISELECT(-18544,-12020),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&_ZN6S966C3D1Ev,
  (VTBL_ENTRY)&_ZN6S966C3D0Ev,
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV6S966C56S966C36S966C2__A2__6S966C1[] = {
  ABISELECT(-18544,-12020),
  0,
  (VTBL_ENTRY)&(_ZTI6S966C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C36S966C2__A2__6S966C1[] = {
  0,
  0,
  ABISELECT(18496,11988),
  ABISELECT(18496,11988),
  (VTBL_ENTRY)&(_ZTI6S966C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__6S966C2__A1__6S966C1[] = {
  0,
  0,
  ABISELECT(18496,11988),
  ABISELECT(18496,11988),
  (VTBL_ENTRY)&(_ZTI6S966C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
extern void _ZN7S966C13D1Ev();
extern void _ZN7S966C13D0Ev();
extern void _ZN7S966C132v5Ev();
static  VTBL_ENTRY _tg__ZTV7S966C13__6S966C1[] = {
  ABISELECT(-20064,-13036),
  ABISELECT(-20112,-13068),
  ABISELECT(-2544,-1676),
  0,
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&_ZN7S966C13D1Ev,
  (VTBL_ENTRY)&_ZN7S966C13D0Ev,
  (VTBL_ENTRY)&_ZN7S966C132v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S966C13D1Ev,_ZTv0_n20_N7S966C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S966C13D0Ev,_ZTv0_n20_N7S966C13D0Ev)();
extern void _ZN6S966C32v3Ev();
static  VTBL_ENTRY _tg__ZTV6S966C3__7S966C13__6S966C1[] = {
  0,
  ABISELECT(2544,1676),
  ABISELECT(-17520,-11360),
  ABISELECT(-17568,-11392),
  ABISELECT(2544,1676),
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C13D1Ev,_ZTv0_n20_N7S966C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S966C13D0Ev,_ZTv0_n20_N7S966C13D0Ev),
  (VTBL_ENTRY)&_ZN6S966C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S966C13D1Ev,_ZTv0_n12_N7S966C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S966C13D0Ev,_ZTv0_n12_N7S966C13D0Ev)();
extern void _ZN6S966C62v1Ev();
extern void _ZN6S966C62v2Ev();
static  VTBL_ENTRY _tg__ZTV6S966C6__7S966C13__6S966C1[] = {
  0,
  0,
  ABISELECT(20064,13036),
  ABISELECT(20064,13036),
  (VTBL_ENTRY)&(_ZTI7S966C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C13D1Ev,_ZTv0_n12_N7S966C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S966C13D0Ev,_ZTv0_n12_N7S966C13D0Ev),
  (VTBL_ENTRY)&_ZN6S966C62v1Ev,
  (VTBL_ENTRY)&_ZN6S966C62v2Ev,
};
static  VTT_ENTRY vtt_S966C1[] = {
  {&(_ZTV6S966C1[10]),  10,86},
  {&(_tg__ZTV6S966C2__A__6S966C1[4]),  4,7},
  {&(_tg__ZTV6S966C36S966C2__6S966C1[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C36S966C2__6S966C1[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C36S966C2__6S966C1[5]),  5,9},
  {&(_tg__ZTV6S966C6__6S966C2__A__6S966C1[5]),  5,9},
  {&(_tg__ZTV6S966C5__A3__6S966C1[3]),  3,3},
  {&(_ZTV6S966C1[21]),  21,86},
  {&(_ZTV6S966C1[36]),  36,86},
  {&(_ZTV6S966C1[47]),  47,86},
  {&(_ZTV6S966C1[56]),  56,86},
  {&(_ZTV6S966C1[64]),  64,86},
  {&(_ZTV6S966C1[73]),  73,86},
  {&(_ZTV6S966C1[83]),  83,86},
  {&(_ZTV6S966C1[16]),  16,86},
  {&(_tg__ZTV6S966C9__6S966C1[9]),  9,12},
  {&(_tg__ZTV7S966C10__6S966C9__6S966C1[8]),  8,11},
  {&(_tg__ZTV7S966C11__6S966C9__6S966C1[6]),  6,8},
  {&(_tg__ZTV6S966C3__6S966C9__6S966C1[6]),  6,9},
  {&(_tg__ZTV6S966C6__6S966C9__6S966C1[5]),  5,9},
  {&(_tg__ZTV6S966C2__6S966C9__6S966C1[6]),  6,9},
  {&(_tg__ZTV7S966C13__6S966C9__6S966C1[7]),  7,10},
  {&(_tg__ZTV7S966C10__6S966C1[6]),  6,9},
  {&(_tg__ZTV7S966C11__7S966C10__6S966C1[6]),  6,8},
  {&(_tg__ZTV6S966C3__7S966C10__6S966C1[6]),  6,9},
  {&(_tg__ZTV6S966C6__7S966C10__6S966C1[5]),  5,9},
  {&(_tg__ZTV7S966C11__6S966C1[5]),  5,7},
  {&(_tg__ZTV6S966C3__7S966C11__6S966C1[6]),  6,9},
  {&(_tg__ZTV6S966C6__7S966C11__6S966C1[5]),  5,9},
  {&(_tg__ZTV6S966C3__A1__6S966C1[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C3__A1__6S966C1[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C3__A1__6S966C1[5]),  5,9},
  {&(_tg__ZTV6S966C2__A1__6S966C1[4]),  4,7},
  {&(_tg__ZTV6S966C36S966C2__A2__6S966C1[4]),  4,7},
  {&(_tg__ZTV6S966C56S966C36S966C2__A2__6S966C1[3]),  3,3},
  {&(_tg__ZTV6S966C6__6S966C36S966C2__A2__6S966C1[5]),  5,9},
  {&(_tg__ZTV6S966C6__6S966C2__A1__6S966C1[5]),  5,9},
  {&(_tg__ZTV7S966C13__6S966C1[5]),  5,8},
  {&(_tg__ZTV6S966C3__7S966C13__6S966C1[6]),  6,9},
  {&(_tg__ZTV6S966C6__7S966C13__6S966C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI6S966C1[];
extern  VTBL_ENTRY _ZTV6S966C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S966C1[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C11D0Ev,_ZTv0_n20_N7S966C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S966C11D0Ev,_ZThn84_N7S966C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C11D1Ev,_ZTv0_n20_N7S966C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S966C11D1Ev,_ZThn84_N7S966C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C10D0Ev,_ZTv0_n20_N7S966C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S966C10D0Ev,_ZThn432_N7S966C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S966C10D1Ev,_ZTv0_n20_N7S966C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S966C10D1Ev,_ZThn432_N7S966C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S966C10D0Ev,_ZTv0_n24_N7S966C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S966C10D0Ev,_ZThn348_N7S966C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S966C10D1Ev,_ZTv0_n24_N7S966C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S966C10D1Ev,_ZThn348_N7S966C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S966C9D0Ev,_ZTv0_n20_N6S966C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18000_N6S966C9D0Ev,_ZThn11664_N6S966C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17024_N6S966C9D0Ev,_ZThn11036_N6S966C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S966C9D1Ev,_ZTv0_n20_N6S966C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18000_N6S966C9D1Ev,_ZThn11664_N6S966C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17024_N6S966C9D1Ev,_ZThn11036_N6S966C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S966C9D0Ev,_ZTv0_n24_N6S966C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19568_N6S966C9D0Ev,_ZThn12712_N6S966C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N6S966C9D0Ev,_ZThn10952_N6S966C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S966C9D1Ev,_ZTv0_n24_N6S966C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19568_N6S966C9D1Ev,_ZThn12712_N6S966C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16912_N6S966C9D1Ev,_ZThn10952_N6S966C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N6S966C9D0Ev,_ZTv0_n28_N6S966C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N6S966C9D0Ev,_ZThn10604_N6S966C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N6S966C9D1Ev,_ZTv0_n28_N6S966C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16368_N6S966C9D1Ev,_ZThn10604_N6S966C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C2D0Ev,_ZTv0_n12_N6S966C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N6S966C2D0Ev,_ZThn1268_N6S966C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C2D1Ev,_ZTv0_n12_N6S966C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N6S966C2D1Ev,_ZThn1268_N6S966C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D0Ev,_ZTv0_n12_N6S966C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N6S966C3D0Ev,_ZThn1268_N6S966C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C3D1Ev,_ZTv0_n12_N6S966C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N6S966C3D1Ev,_ZThn1268_N6S966C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S966C1D0Ev,_ZTv0_n20_N6S966C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20400_N6S966C1D0Ev,_ZThn13256_N6S966C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn19424_N6S966C1D0Ev,_ZThn12628_N6S966C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N6S966C1D1Ev,_ZTv0_n20_N6S966C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20400_N6S966C1D1Ev,_ZThn13256_N6S966C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn19424_N6S966C1D1Ev,_ZThn12628_N6S966C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S966C1D0Ev,_ZTv0_n24_N6S966C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21968_N6S966C1D0Ev,_ZThn14304_N6S966C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn19312_N6S966C1D0Ev,_ZThn12544_N6S966C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S966C1D1Ev,_ZTv0_n24_N6S966C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21968_N6S966C1D1Ev,_ZThn14304_N6S966C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn19312_N6S966C1D1Ev,_ZThn12544_N6S966C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N6S966C1D0Ev,_ZTv0_n28_N6S966C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18768_N6S966C1D0Ev,_ZThn12196_N6S966C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N6S966C1D1Ev,_ZTv0_n28_N6S966C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18768_N6S966C1D1Ev,_ZThn12196_N6S966C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N6S966C1D0Ev,_ZTv0_n44_N6S966C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N6S966C1D0Ev,_ZThn1592_N6S966C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N6S966C1D1Ev,_ZTv0_n44_N6S966C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N6S966C1D1Ev,_ZThn1592_N6S966C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C1D0Ev,_ZTv0_n12_N6S966C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N6S966C1D0Ev,_ZThn1268_N6S966C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N6S966C1D1Ev,_ZTv0_n12_N6S966C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N6S966C1D1Ev,_ZThn1268_N6S966C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S966C1 = {  "S966C1", // class name
  bases_S966C1, 19,
  &(vtc_S966C1[0]), // expected_vtbl_contents
  &(vtt_S966C1[0]), // expected_vtt_contents
  ABISELECT(36752,23880), // object size
  NSPAIRA(_ZTI6S966C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S966C1),86, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S966C1),40, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2526C4  : S20507C6 {
  int s2526c4f0;
  long double s2526c4f1;
  int s2526c4f2;
  ::S20507C6 s2526c4f3;
  ::S20507C6 s2526c4f4;
  int s2526c4f5;
  long double s2526c4f6[8];
};
//SIG(-1 S2526C4) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S2526C4()
{
  extern Class_Descriptor cd_S2526C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S2526C4, buf);
    S2526C4 &lv = *(new (buf) S2526C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S2526C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2526C4)");
    check_base_class_offset(lv, (S20507C6*), 0, "S2526C4");
    check_field_offset(lv, s2526c4f0, ABISELECT(88,64), "S2526C4.s2526c4f0");
    check_field_offset(lv, s2526c4f1, ABISELECT(96,68), "S2526C4.s2526c4f1");
    check_field_offset(lv, s2526c4f2, ABISELECT(112,80), "S2526C4.s2526c4f2");
    check_field_offset(lv, s2526c4f3, ABISELECT(120,84), "S2526C4.s2526c4f3");
    check_field_offset(lv, s2526c4f4, ABISELECT(208,148), "S2526C4.s2526c4f4");
    check_field_offset(lv, s2526c4f5, ABISELECT(296,212), "S2526C4.s2526c4f5");
    check_field_offset(lv, s2526c4f6, ABISELECT(304,216), "S2526C4.s2526c4f6");
    test_class_info(&lv, &cd_S2526C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2526C4(Test_S2526C4, "S2526C4", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S2526C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2526C4[];
Class_Descriptor cd_S2526C4 = {  "S2526C4", // class name
  bases_S2526C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI7S2526C4),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  S2526C5  : S2526C4 , virtual S20507C6 {
  long double s2526c5f0[2];
  int s2526c5f1[2];
  long double s2526c5f2[3];
  virtual void  v2(); // _ZN7S2526C52v2Ev
  ~S2526C5(); // tgen
  S2526C5(); // tgen
};
//SIG(-1 S2526C5) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S2526C5()
{
  extern Class_Descriptor cd_S2526C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S2526C5, buf);
    S2526C5 *dp, &lv = *(dp=new (buf) S2526C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S2526C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2526C5)");
    check_base_class_offset(lv, (S20507C6*)(S2526C4*), ABISELECT(16,4), "S2526C5");
    check_base_class_offset(lv, (S2526C4*), ABISELECT(16,4), "S2526C5");
    /*is_ambiguous_... S2526C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S2526C5");
    check_field_offset(lv, s2526c5f0, ABISELECT(448,316), "S2526C5.s2526c5f0");
    check_field_offset(lv, s2526c5f1, ABISELECT(480,340), "S2526C5.s2526c5f1");
    check_field_offset(lv, s2526c5f2, ABISELECT(496,348), "S2526C5.s2526c5f2");
    test_class_info(&lv, &cd_S2526C5);
    dp->~S2526C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2526C5(Test_S2526C5, "S2526C5", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN7S2526C5C1Ev();
extern void _ZN7S2526C5D1Ev();
Name_Map name_map_S2526C5[] = {
  NSPAIR(_ZN7S2526C5C1Ev),
  NSPAIR(_ZN7S2526C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C4;
extern VTBL_ENTRY _ZTI7S2526C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S2526C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2526C4,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2526C5[];
extern void _ZN7S2526C52v2Ev();
static  VTBL_ENTRY vtc_S2526C5[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S2526C5[0]),
  (VTBL_ENTRY)&_ZN7S2526C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S2526C5[];
static  VTT_ENTRY vtt_S2526C5[] = {
  {&(_ZTV7S2526C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2526C5[];
extern  VTBL_ENTRY _ZTV7S2526C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2526C5[];
Class_Descriptor cd_S2526C5 = {  "S2526C5", // class name
  bases_S2526C5, 3,
  &(vtc_S2526C5[0]), // expected_vtbl_contents
  &(vtt_S2526C5[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI7S2526C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2526C5),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2526C5),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  S2526C2  : S20507C6 , virtual S2526C4 , virtual S2526C5 {
  long double s2526c2f0;
  ~S2526C2(); // tgen
  S2526C2(); // tgen
};
//SIG(-1 S2526C2) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S2526C2()
{
  extern Class_Descriptor cd_S2526C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S2526C2, buf);
    S2526C2 *dp, &lv = *(dp=new (buf) S2526C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S2526C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2526C2)");
    /*is_ambiguous_... S2526C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S2526C2");
    /*is_ambiguous_... S2526C2::S2526C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2526C4*), ABISELECT(112,80), "S2526C2");
    /*is_ambiguous_... S2526C2::S2526C4 */ AMB_check_base_class_offset(lv, (S2526C4*), ABISELECT(112,80), "S2526C2");
    check_base_class_offset(lv, (S20507C6*)(S2526C4*)(S2526C5*), ABISELECT(560,396), "S2526C2");
    check_base_class_offset(lv, (S2526C4*)(S2526C5*), ABISELECT(560,396), "S2526C2");
    /*is_ambiguous_... S2526C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2526C5*), ABISELECT(1088,776), "S2526C2");
    check_base_class_offset(lv, (S2526C5*), ABISELECT(544,392), "S2526C2");
    check_field_offset(lv, s2526c2f0, ABISELECT(96,68), "S2526C2.s2526c2f0");
    test_class_info(&lv, &cd_S2526C2);
    dp->~S2526C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2526C2(Test_S2526C2, "S2526C2", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN7S2526C2C1Ev();
extern void _ZN7S2526C2D1Ev();
Name_Map name_map_S2526C2[] = {
  NSPAIR(_ZN7S2526C2C1Ev),
  NSPAIR(_ZN7S2526C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C4;
extern VTBL_ENTRY _ZTI7S2526C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C4;
extern VTBL_ENTRY _ZTI7S2526C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C5;
extern VTBL_ENTRY _ZTI7S2526C5[];
extern  VTBL_ENTRY _ZTV7S2526C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2526C5[];
static Base_Class bases_S2526C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S2526C4,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S2526C4,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2526C5,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S2526C2[];
extern void _ZN7S2526C52v2Ev();
static  VTBL_ENTRY vtc_S2526C2[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S2526C2[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI7S2526C2[0]),
  (VTBL_ENTRY)&_ZN7S2526C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S2526C2[];
extern void _ZN7S2526C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2526C5__7S2526C2[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S2526C5[0]),
  (VTBL_ENTRY)&_ZN7S2526C52v2Ev,
};
static  VTT_ENTRY vtt_S2526C2[] = {
  {&(_ZTV7S2526C2[5]),  5,10},
  {&(_ZTV7S2526C2[9]),  9,10},
  {&(_tg__ZTV7S2526C5__7S2526C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2526C2[];
extern  VTBL_ENTRY _ZTV7S2526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2526C2[];
Class_Descriptor cd_S2526C2 = {  "S2526C2", // class name
  bases_S2526C2, 7,
  &(vtc_S2526C2[0]), // expected_vtbl_contents
  &(vtt_S2526C2[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI7S2526C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2526C2),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2526C2),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  S2526C10  : virtual S20507C6 , virtual S2526C5 , virtual S2526C4 {
  ::S468C20_nt s2526c10f0;
  ~S2526C10(); // tgen
  S2526C10(); // tgen
};
//SIG(-1 S2526C10) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S2526C10()
{
  extern Class_Descriptor cd_S2526C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S2526C10, buf);
    S2526C10 *dp, &lv = *(dp=new (buf) S2526C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S2526C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2526C10)");
    /*is_ambiguous_... S2526C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S2526C10");
    /*is_ambiguous_... S2526C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2526C5*), ABISELECT(16,8), "S2526C10");
    check_base_class_offset(lv, (S20507C6*)(S2526C4*)(S2526C5*), ABISELECT(128,76), "S2526C10");
    check_base_class_offset(lv, (S2526C4*)(S2526C5*), ABISELECT(128,76), "S2526C10");
    check_base_class_offset(lv, (S2526C5*), ABISELECT(112,72), "S2526C10");
    /*is_ambiguous_... S2526C10::S2526C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2526C4*), ABISELECT(656,456), "S2526C10");
    /*is_ambiguous_... S2526C10::S2526C4 */ AMB_check_base_class_offset(lv, (S2526C4*), ABISELECT(656,456), "S2526C10");
    check_field_offset(lv, s2526c10f0, ABISELECT(8,4), "S2526C10.s2526c10f0");
    test_class_info(&lv, &cd_S2526C10);
    dp->~S2526C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2526C10(Test_S2526C10, "S2526C10", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S2526C10C1Ev();
extern void _ZN8S2526C10D1Ev();
Name_Map name_map_S2526C10[] = {
  NSPAIR(_ZN8S2526C10C1Ev),
  NSPAIR(_ZN8S2526C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C4;
extern VTBL_ENTRY _ZTI7S2526C4[];
extern Class_Descriptor cd_S2526C5;
extern VTBL_ENTRY _ZTI7S2526C5[];
extern  VTBL_ENTRY _ZTV7S2526C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2526C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C4;
extern VTBL_ENTRY _ZTI7S2526C4[];
static Base_Class bases_S2526C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S2526C4,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2526C5,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2526C4,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S2526C10[];
extern void _ZN7S2526C52v2Ev();
static  VTBL_ENTRY vtc_S2526C10[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2526C10[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S2526C10[0]),
  (VTBL_ENTRY)&_ZN7S2526C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S2526C10[];
extern void _ZN7S2526C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2526C5__8S2526C10[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S2526C5[0]),
  (VTBL_ENTRY)&_ZN7S2526C52v2Ev,
};
static  VTT_ENTRY vtt_S2526C10[] = {
  {&(_ZTV8S2526C10[5]),  5,10},
  {&(_ZTV8S2526C10[9]),  9,10},
  {&(_tg__ZTV7S2526C5__8S2526C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2526C10[];
extern  VTBL_ENTRY _ZTV8S2526C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2526C10[];
Class_Descriptor cd_S2526C10 = {  "S2526C10", // class name
  bases_S2526C10, 6,
  &(vtc_S2526C10[0]), // expected_vtbl_contents
  &(vtt_S2526C10[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S2526C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2526C10),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2526C10),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  S2526C1  : S2526C2 {
  long double s2526c1f0[10];
  short s2526c1f1;
  void *s2526c1f2;
  int s2526c1f3;
  void *s2526c1f4;
  ::S20628C17 s2526c1f5;
  int s2526c1f6;
  ::S2526C10 s2526c1f7;
  ::S2526C10 s2526c1f8;
  long double s2526c1f9[5];
  virtual  ~S2526C1(); // _ZN7S2526C1D2Ev
  virtual void  v1(); // _ZN7S2526C12v1Ev
  S2526C1(); // tgen
};
//SIG(1 S2526C1) C1{ BC2{ BC3{ m Fi[10] Fp[6]} VBC4{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC5{ BC4 VBC3 v2 FD[2] Fi[2] FD[3]} FD} vd v1 FD[10] Fs Fp Fi Fp FC6{ VBC3 VBC7{ BC8{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v3 FD[2] Fi[2] FD[3]} BC9{ BC3 VBC8 VBC7 FD} BC10{ VBC11{ vd m Fp FD[5] Fp FD} VBC8 VBC7 VBC9 vd FD[9] Fi FC12{ VBC3 VBC11 VBC13{ VBC3 VBC7 VBC8 FC14{}} VBC15{ BC3 VBC8 VBC11 BC7 vd FC13 FC7} FC8 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC11 FL} VBC15 vd Fi Fp Fi:9 Fc FD FC7 FC16{ VBC3 VBC8 VBC13 VBC15 BC12 vd FC11 FD} Fc Fs[7] FC14 Fi Fc Fl} Fi FC17{ VBC3 VBC5 VBC4 FC14} FC17 FD[5]}


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

static void Test_S2526C1()
{
  extern Class_Descriptor cd_S2526C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1067,2997)];
    init_test(&cd_S2526C1, buf);
    S2526C1 *dp, &lv = *(dp=new (buf) S2526C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17056,11984), "sizeof(S2526C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2526C1)");
    /*is_ambiguous_... S2526C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2526C2*), ABISELECT(8,4), "S2526C1");
    /*is_ambiguous_... S2526C1::S2526C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2526C4*), ABISELECT(15984,11224), "S2526C1");
    /*is_ambiguous_... S2526C2::S2526C4 */ AMB_check_base_class_offset(lv, (S2526C4*)(S2526C2*), ABISELECT(15984,11224), "S2526C1");
    check_base_class_offset(lv, (S20507C6*)(S2526C4*)(S2526C5*), ABISELECT(16432,11540), "S2526C1");
    check_base_class_offset(lv, (S2526C4*)(S2526C5*), ABISELECT(16432,11540), "S2526C1");
    /*is_ambiguous_... S2526C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S2526C5*), ABISELECT(16960,11920), "S2526C1");
    check_base_class_offset(lv, (S2526C5*)(S2526C2*), ABISELECT(16416,11536), "S2526C1");
    check_base_class_offset(lv, (S2526C2*), 0, "S2526C1");
    check_field_offset(lv, s2526c1f0, ABISELECT(112,80), "S2526C1.s2526c1f0");
    check_field_offset(lv, s2526c1f1, ABISELECT(272,200), "S2526C1.s2526c1f1");
    check_field_offset(lv, s2526c1f2, ABISELECT(280,204), "S2526C1.s2526c1f2");
    check_field_offset(lv, s2526c1f3, ABISELECT(288,208), "S2526C1.s2526c1f3");
    check_field_offset(lv, s2526c1f4, ABISELECT(296,212), "S2526C1.s2526c1f4");
    check_field_offset(lv, s2526c1f5, ABISELECT(304,216), "S2526C1.s2526c1f5");
    check_field_offset(lv, s2526c1f6, ABISELECT(13712,9624), "S2526C1.s2526c1f6");
    check_field_offset(lv, s2526c1f7, ABISELECT(13728,9628), "S2526C1.s2526c1f7");
    check_field_offset(lv, s2526c1f8, ABISELECT(14816,10396), "S2526C1.s2526c1f8");
    check_field_offset(lv, s2526c1f9, ABISELECT(15904,11164), "S2526C1.s2526c1f9");
    test_class_info(&lv, &cd_S2526C1);
    dp->~S2526C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2526C1(Test_S2526C1, "S2526C1", ABISELECT(17056,11984));

#else // __cplusplus

extern void _ZN7S2526C1C1Ev();
extern void _ZN7S2526C1D2Ev();
Name_Map name_map_S2526C1[] = {
  NSPAIR(_ZN7S2526C1C1Ev),
  NSPAIR(_ZN7S2526C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C4;
extern VTBL_ENTRY _ZTI7S2526C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C4;
extern VTBL_ENTRY _ZTI7S2526C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S2526C5;
extern VTBL_ENTRY _ZTI7S2526C5[];
extern  VTBL_ENTRY _ZTV7S2526C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2526C5[];
extern Class_Descriptor cd_S2526C2;
extern VTBL_ENTRY _ZTI7S2526C2[];
extern  VTBL_ENTRY _ZTV7S2526C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2526C2[];
static Base_Class bases_S2526C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(15984,11224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2526C4,    ABISELECT(15984,11224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(16432,11540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2526C4,    ABISELECT(16432,11540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(16960,11920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2526C5,    ABISELECT(16416,11536), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //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
    7, //immediately_derived
  0, 1},
  {&cd_S2526C2,    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 _ZTI7S2526C1[];
extern void _ZN7S2526C1D1Ev();
extern void _ZN7S2526C1D0Ev();
extern void _ZN7S2526C12v1Ev();
extern void _ZN7S2526C52v2Ev();
static  VTBL_ENTRY vtc_S2526C1[] = {
  ABISELECT(16960,11920),
  ABISELECT(16416,11536),
  ABISELECT(15984,11224),
  0,
  (VTBL_ENTRY)&(_ZTI7S2526C1[0]),
  (VTBL_ENTRY)&_ZN7S2526C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2526C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2526C12v1Ev,
  0,
  ABISELECT(544,384),
  ABISELECT(-16416,-11536),
  (VTBL_ENTRY)&(_ZTI7S2526C1[0]),
  (VTBL_ENTRY)&_ZN7S2526C52v2Ev,
};
extern VTBL_ENTRY _ZTV7S2526C1[];
static  VTBL_ENTRY _tg__ZTV7S2526C2__7S2526C1[] = {
  ABISELECT(16960,11920),
  ABISELECT(16416,11536),
  ABISELECT(15984,11224),
  0,
  (VTBL_ENTRY)&(_ZTI7S2526C2[0]),
};
extern void _ZN7S2526C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2526C5__7S2526C2__7S2526C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-16416,-11536),
  (VTBL_ENTRY)&(_ZTI7S2526C2[0]),
  (VTBL_ENTRY)&_ZN7S2526C52v2Ev,
};
extern void _ZN7S2526C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2526C5__7S2526C1[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S2526C5[0]),
  (VTBL_ENTRY)&_ZN7S2526C52v2Ev,
};
static  VTT_ENTRY vtt_S2526C1[] = {
  {&(_ZTV7S2526C1[5]),  5,13},
  {&(_tg__ZTV7S2526C2__7S2526C1[5]),  5,5},
  {&(_tg__ZTV7S2526C5__7S2526C2__7S2526C1[4]),  4,5},
  {&(_ZTV7S2526C1[12]),  12,13},
  {&(_tg__ZTV7S2526C5__7S2526C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2526C1[];
extern  VTBL_ENTRY _ZTV7S2526C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2526C1[];
Class_Descriptor cd_S2526C1 = {  "S2526C1", // class name
  bases_S2526C1, 8,
  &(vtc_S2526C1[0]), // expected_vtbl_contents
  &(vtt_S2526C1[0]), // expected_vtt_contents
  ABISELECT(17056,11984), // object size
  NSPAIRA(_ZTI7S2526C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2526C1),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2526C1),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21200C8  : S20507C6 {
  int s21200c8f0;
  long double s21200c8f1;
  int s21200c8f2;
  ::S20507C6 s21200c8f3;
  ::S20507C6 s21200c8f4;
  int s21200c8f5;
  long double s21200c8f6[8];
};
//SIG(-1 S21200C8) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S21200C8()
{
  extern Class_Descriptor cd_S21200C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S21200C8, buf);
    S21200C8 &lv = *(new (buf) S21200C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S21200C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C8)");
    check_base_class_offset(lv, (S20507C6*), 0, "S21200C8");
    check_field_offset(lv, s21200c8f0, ABISELECT(88,64), "S21200C8.s21200c8f0");
    check_field_offset(lv, s21200c8f1, ABISELECT(96,68), "S21200C8.s21200c8f1");
    check_field_offset(lv, s21200c8f2, ABISELECT(112,80), "S21200C8.s21200c8f2");
    check_field_offset(lv, s21200c8f3, ABISELECT(120,84), "S21200C8.s21200c8f3");
    check_field_offset(lv, s21200c8f4, ABISELECT(208,148), "S21200C8.s21200c8f4");
    check_field_offset(lv, s21200c8f5, ABISELECT(296,212), "S21200C8.s21200c8f5");
    check_field_offset(lv, s21200c8f6, ABISELECT(304,216), "S21200C8.s21200c8f6");
    test_class_info(&lv, &cd_S21200C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C8(Test_S21200C8, "S21200C8", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S21200C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21200C8[];
Class_Descriptor cd_S21200C8 = {  "S21200C8", // class name
  bases_S21200C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI8S21200C8),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  S21200C7  : S21200C8 , virtual S20507C6 {
  long double s21200c7f0[2];
  int s21200c7f1[2];
  long double s21200c7f2[3];
  virtual void  v5(); // _ZN8S21200C72v5Ev
  ~S21200C7(); // tgen
  S21200C7(); // tgen
};
//SIG(-1 S21200C7) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S21200C7()
{
  extern Class_Descriptor cd_S21200C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S21200C7, buf);
    S21200C7 *dp, &lv = *(dp=new (buf) S21200C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S21200C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C7)");
    check_base_class_offset(lv, (S20507C6*)(S21200C8*), ABISELECT(16,4), "S21200C7");
    check_base_class_offset(lv, (S21200C8*), ABISELECT(16,4), "S21200C7");
    /*is_ambiguous_... S21200C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S21200C7");
    check_field_offset(lv, s21200c7f0, ABISELECT(448,316), "S21200C7.s21200c7f0");
    check_field_offset(lv, s21200c7f1, ABISELECT(480,340), "S21200C7.s21200c7f1");
    check_field_offset(lv, s21200c7f2, ABISELECT(496,348), "S21200C7.s21200c7f2");
    test_class_info(&lv, &cd_S21200C7);
    dp->~S21200C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C7(Test_S21200C7, "S21200C7", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN8S21200C7C1Ev();
extern void _ZN8S21200C7D1Ev();
Name_Map name_map_S21200C7[] = {
  NSPAIR(_ZN8S21200C7C1Ev),
  NSPAIR(_ZN8S21200C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S21200C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21200C8,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21200C7[];
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY vtc_S21200C7[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C7[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S21200C7[];
static  VTT_ENTRY vtt_S21200C7[] = {
  {&(_ZTV8S21200C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S21200C7[];
extern  VTBL_ENTRY _ZTV8S21200C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C7[];
Class_Descriptor cd_S21200C7 = {  "S21200C7", // class name
  bases_S21200C7, 3,
  &(vtc_S21200C7[0]), // expected_vtbl_contents
  &(vtt_S21200C7[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI8S21200C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21200C7),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21200C7),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  S21200C5  : virtual S20507C6 , virtual S21200C7 , virtual S21200C8 {
  ::S468C20_nt s21200c5f0;
  ~S21200C5(); // tgen
  S21200C5(); // tgen
};
//SIG(-1 S21200C5) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S21200C5()
{
  extern Class_Descriptor cd_S21200C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S21200C5, buf);
    S21200C5 *dp, &lv = *(dp=new (buf) S21200C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S21200C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C5)");
    /*is_ambiguous_... S21200C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S21200C5");
    /*is_ambiguous_... S21200C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C7*), ABISELECT(16,8), "S21200C5");
    check_base_class_offset(lv, (S20507C6*)(S21200C8*)(S21200C7*), ABISELECT(128,76), "S21200C5");
    check_base_class_offset(lv, (S21200C8*)(S21200C7*), ABISELECT(128,76), "S21200C5");
    check_base_class_offset(lv, (S21200C7*), ABISELECT(112,72), "S21200C5");
    /*is_ambiguous_... S21200C5::S21200C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C8*), ABISELECT(656,456), "S21200C5");
    /*is_ambiguous_... S21200C5::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*), ABISELECT(656,456), "S21200C5");
    check_field_offset(lv, s21200c5f0, ABISELECT(8,4), "S21200C5.s21200c5f0");
    test_class_info(&lv, &cd_S21200C5);
    dp->~S21200C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C5(Test_S21200C5, "S21200C5", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S21200C5C1Ev();
extern void _ZN8S21200C5D1Ev();
Name_Map name_map_S21200C5[] = {
  NSPAIR(_ZN8S21200C5C1Ev),
  NSPAIR(_ZN8S21200C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S21200C7;
extern VTBL_ENTRY _ZTI8S21200C7[];
extern  VTBL_ENTRY _ZTV8S21200C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
static Base_Class bases_S21200C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S21200C8,    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
    3, //immediately_derived
  0, 0},
  {&cd_S21200C7,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C8,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S21200C5[];
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY vtc_S21200C5[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S21200C5[];
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__8S21200C5[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C7[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTT_ENTRY vtt_S21200C5[] = {
  {&(_ZTV8S21200C5[5]),  5,10},
  {&(_ZTV8S21200C5[9]),  9,10},
  {&(_tg__ZTV8S21200C7__8S21200C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S21200C5[];
extern  VTBL_ENTRY _ZTV8S21200C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C5[];
Class_Descriptor cd_S21200C5 = {  "S21200C5", // class name
  bases_S21200C5, 6,
  &(vtc_S21200C5[0]), // expected_vtbl_contents
  &(vtt_S21200C5[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S21200C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21200C5),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21200C5),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  S21200C11  : S20507C6 , virtual S21200C8 , virtual S21200C7 {
  long double s21200c11f0;
  ~S21200C11(); // tgen
  S21200C11(); // tgen
};
//SIG(-1 S21200C11) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S21200C11()
{
  extern Class_Descriptor cd_S21200C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S21200C11, buf);
    S21200C11 *dp, &lv = *(dp=new (buf) S21200C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S21200C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C11)");
    /*is_ambiguous_... S21200C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S21200C11");
    /*is_ambiguous_... S21200C11::S21200C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C8*), ABISELECT(112,80), "S21200C11");
    /*is_ambiguous_... S21200C11::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*), ABISELECT(112,80), "S21200C11");
    check_base_class_offset(lv, (S20507C6*)(S21200C8*)(S21200C7*), ABISELECT(560,396), "S21200C11");
    check_base_class_offset(lv, (S21200C8*)(S21200C7*), ABISELECT(560,396), "S21200C11");
    /*is_ambiguous_... S21200C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C7*), ABISELECT(1088,776), "S21200C11");
    check_base_class_offset(lv, (S21200C7*), ABISELECT(544,392), "S21200C11");
    check_field_offset(lv, s21200c11f0, ABISELECT(96,68), "S21200C11.s21200c11f0");
    test_class_info(&lv, &cd_S21200C11);
    dp->~S21200C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C11(Test_S21200C11, "S21200C11", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN9S21200C11C1Ev();
extern void _ZN9S21200C11D1Ev();
Name_Map name_map_S21200C11[] = {
  NSPAIR(_ZN9S21200C11C1Ev),
  NSPAIR(_ZN9S21200C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C7;
extern VTBL_ENTRY _ZTI8S21200C7[];
extern  VTBL_ENTRY _ZTV8S21200C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C7[];
static Base_Class bases_S21200C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S21200C8,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S21200C8,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C7,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S21200C11[];
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY vtc_S21200C11[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C11[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S21200C11[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern VTBL_ENTRY _ZTV9S21200C11[];
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C11[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C7[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTT_ENTRY vtt_S21200C11[] = {
  {&(_ZTV9S21200C11[5]),  5,10},
  {&(_ZTV9S21200C11[9]),  9,10},
  {&(_tg__ZTV8S21200C7__9S21200C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S21200C11[];
extern  VTBL_ENTRY _ZTV9S21200C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C11[];
Class_Descriptor cd_S21200C11 = {  "S21200C11", // class name
  bases_S21200C11, 7,
  &(vtc_S21200C11[0]), // expected_vtbl_contents
  &(vtt_S21200C11[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI9S21200C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21200C11),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21200C11),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  S21200C10  : virtual S20507C11 , virtual S21200C8 , virtual S21200C7 , virtual S21200C11 {
  long double s21200c10f0[9];
  int s21200c10f1;
  ::S21199C11 s21200c10f2;
  int s21200c10f3;
  __tsi64 s21200c10f4;
  ::S20507C11 s21200c10f5;
  __tsi64 s21200c10f6;
  virtual  ~S21200C10(); // _ZN9S21200C10D2Ev
  S21200C10(); // tgen
};
//SIG(-1 S21200C10) C1{ VBC2{ vd m Fp FD[5] Fp FD} VBC3{ BC4{ m Fi[10] Fp[6]} Fi FD Fi FC4 FC4 Fi FD[8]} VBC5{ BC3 VBC4 v1 FD[2] Fi[2] FD[3]} VBC6{ BC4 VBC3 VBC5 FD} vd FD[9] Fi FC7{ VBC4 VBC2 VBC8{ VBC4 VBC9{ BC10{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v2 FD[2] Fi[2] FD[3]} VBC10 FC11{}} VBC12{ BC4 VBC10 VBC2 BC9 vd FC8 FC9} FC10 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL}


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

static void Test_S21200C10()
{
  extern Class_Descriptor cd_S21200C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(367,1027)];
    init_test(&cd_S21200C10, buf);
    S21200C10 *dp, &lv = *(dp=new (buf) S21200C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5856,4104), "sizeof(S21200C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C10)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(4544,3180), "S21200C10");
    /*is_ambiguous_... S21200C10::S21200C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C8*), ABISELECT(4672,3264), "S21200C10");
    /*is_ambiguous_... S21200C10::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*), ABISELECT(4672,3264), "S21200C10");
    /*is_ambiguous_... S21200C11::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C11*), ABISELECT(4672,3264), "S21200C10");
    check_base_class_offset(lv, (S20507C6*)(S21200C8*)(S21200C7*), ABISELECT(5120,3580), "S21200C10");
    check_base_class_offset(lv, (S21200C8*)(S21200C7*), ABISELECT(5120,3580), "S21200C10");
    /*is_ambiguous_... S21200C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C7*), ABISELECT(5648,3960), "S21200C10");
    check_base_class_offset(lv, (S21200C7*), ABISELECT(5104,3576), "S21200C10");
    check_base_class_offset(lv, (S21200C7*)(S21200C11*), ABISELECT(5104,3576), "S21200C10");
    /*is_ambiguous_... S21200C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C11*), ABISELECT(5752,4028), "S21200C10");
    check_base_class_offset(lv, (S21200C11*), ABISELECT(5744,4024), "S21200C10");
    check_field_offset(lv, s21200c10f0, ABISELECT(16,4), "S21200C10.s21200c10f0");
    check_field_offset(lv, s21200c10f1, ABISELECT(160,112), "S21200C10.s21200c10f1");
    check_field_offset(lv, s21200c10f2, ABISELECT(176,116), "S21200C10.s21200c10f2");
    check_field_offset(lv, s21200c10f3, ABISELECT(4384,3076), "S21200C10.s21200c10f3");
    check_field_offset(lv, s21200c10f4, ABISELECT(4392,3080), "S21200C10.s21200c10f4");
    check_field_offset(lv, s21200c10f5, ABISELECT(4400,3088), "S21200C10.s21200c10f5");
    check_field_offset(lv, s21200c10f6, ABISELECT(4528,3172), "S21200C10.s21200c10f6");
    test_class_info(&lv, &cd_S21200C10);
    dp->~S21200C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C10(Test_S21200C10, "S21200C10", ABISELECT(5856,4104));

#else // __cplusplus

extern void _ZN9S21200C10C1Ev();
extern void _ZN9S21200C10D2Ev();
Name_Map name_map_S21200C10[] = {
  NSPAIR(_ZN9S21200C10C1Ev),
  NSPAIR(_ZN9S21200C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C7;
extern VTBL_ENTRY _ZTI8S21200C7[];
extern  VTBL_ENTRY _ZTV8S21200C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C11;
extern VTBL_ENTRY _ZTI9S21200C11[];
extern  VTBL_ENTRY _ZTV9S21200C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C11[];
static Base_Class bases_S21200C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(4544,3180), //bcp->offset
    9, //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_S20507C6,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21200C8,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21200C8,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(5648,3960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C7,    ABISELECT(5104,3576), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(5752,4028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C11,    ABISELECT(5744,4024), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21200C10[];
extern void _ZN9S21200C10D1Ev();
extern void _ZN9S21200C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev)();
extern void ABISELECT(_ZThn4544_N9S21200C10D1Ev,_ZThn3180_N9S21200C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev)();
extern void ABISELECT(_ZThn4544_N9S21200C10D0Ev,_ZThn3180_N9S21200C10D0Ev)() __attribute__((weak));
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY vtc_S21200C10[] = {
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&_ZN9S21200C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21200C10D0Ev,
  ABISELECT(-4544,-3180),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev),
  0,
  ABISELECT(544,384),
  ABISELECT(-5104,-3576),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-5744,-4024),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
};
extern VTBL_ENTRY _ZTV9S21200C10[];
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C10[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C7[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S21200C11__9S21200C10[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C11[0]),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C11__9S21200C10[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI9S21200C11[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTT_ENTRY vtt_S21200C10[] = {
  {&(_ZTV9S21200C10[7]),  7,24},
  {&(_ZTV9S21200C10[12]),  12,24},
  {&(_ZTV9S21200C10[18]),  18,24},
  {&(_ZTV9S21200C10[24]),  24,24},
  {&(_tg__ZTV8S21200C7__9S21200C10[3]),  3,4},
  {&(_tg__ZTV9S21200C11__9S21200C10[5]),  5,5},
  {&(_tg__ZTV8S21200C7__9S21200C11__9S21200C10[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S21200C10[];
extern  VTBL_ENTRY _ZTV9S21200C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C10[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S21200C10D0Ev,_ZThn3180_N9S21200C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S21200C10D1Ev,_ZThn3180_N9S21200C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21200C10 = {  "S21200C10", // class name
  bases_S21200C10, 9,
  &(vtc_S21200C10[0]), // expected_vtbl_contents
  &(vtt_S21200C10[0]), // expected_vtt_contents
  ABISELECT(5856,4104), // object size
  NSPAIRA(_ZTI9S21200C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21200C10),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21200C10),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21200C4  {
  int s21200c4f0;
  ::S21200C5 s21200c4f1;
  int s21200c4f2;
  void *s21200c4f3;
  ::S21200C10 s21200c4f4;
  int s21200c4f5;
  __tsi64 s21200c4f6;
  long double s21200c4f7;
  virtual void  v2(); // _ZN8S21200C42v2Ev
  virtual void  v3(); // _ZN8S21200C42v3Ev
  virtual void  v4(); // _ZN8S21200C42v4Ev
  ~S21200C4(); // tgen
  S21200C4(); // tgen
};
//SIG(-1 S21200C4) C1{ v1 v2 v3 Fi FC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ BC5{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v4 FD[2] Fi[2] FD[3]} VBC5 FC6{}} Fi Fp FC7{ VBC8{ vd m Fp FD[5] Fp FD} VBC5 VBC4 VBC9{ BC3 VBC5 VBC4 FD} vd FD[9] Fi FC10{ VBC3 VBC8 VBC11{ VBC3 VBC12{ BC13{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v5 FD[2] Fi[2] FD[3]} VBC13 FC6} VBC14{ BC3 VBC13 VBC8 BC12 vd FC11 FC12} FC13 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC8 FL} Fi FL FD}


void  S21200C4 ::v2(){vfunc_called(this, "_ZN8S21200C42v2Ev");}
void  S21200C4 ::v3(){vfunc_called(this, "_ZN8S21200C42v3Ev");}
void  S21200C4 ::v4(){vfunc_called(this, "_ZN8S21200C42v4Ev");}
S21200C4 ::~S21200C4(){ note_dtor("S21200C4", this);} // tgen
S21200C4 ::S21200C4(){ note_ctor("S21200C4", this);} // tgen

static void Test_S21200C4()
{
  extern Class_Descriptor cd_S21200C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(439,1229)];
    init_test(&cd_S21200C4, buf);
    S21200C4 *dp, &lv = *(dp=new (buf) S21200C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7008,4912), "sizeof(S21200C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C4)");
    check_field_offset(lv, s21200c4f0, ABISELECT(8,4), "S21200C4.s21200c4f0");
    check_field_offset(lv, s21200c4f1, ABISELECT(16,8), "S21200C4.s21200c4f1");
    check_field_offset(lv, s21200c4f2, ABISELECT(1104,776), "S21200C4.s21200c4f2");
    check_field_offset(lv, s21200c4f3, ABISELECT(1112,780), "S21200C4.s21200c4f3");
    check_field_offset(lv, s21200c4f4, ABISELECT(1120,784), "S21200C4.s21200c4f4");
    check_field_offset(lv, s21200c4f5, ABISELECT(6976,4888), "S21200C4.s21200c4f5");
    check_field_offset(lv, s21200c4f6, ABISELECT(6984,4892), "S21200C4.s21200c4f6");
    check_field_offset(lv, s21200c4f7, ABISELECT(6992,4900), "S21200C4.s21200c4f7");
    test_class_info(&lv, &cd_S21200C4);
    dp->~S21200C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C4(Test_S21200C4, "S21200C4", ABISELECT(7008,4912));

#else // __cplusplus

extern void _ZN8S21200C4C1Ev();
extern void _ZN8S21200C4D1Ev();
Name_Map name_map_S21200C4[] = {
  NSPAIR(_ZN8S21200C4C1Ev),
  NSPAIR(_ZN8S21200C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21200C4[];
extern void _ZN8S21200C42v2Ev();
extern void _ZN8S21200C42v3Ev();
extern void _ZN8S21200C42v4Ev();
static  VTBL_ENTRY vtc_S21200C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C4[0]),
  (VTBL_ENTRY)&_ZN8S21200C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S21200C4[];
extern  VTBL_ENTRY _ZTV8S21200C4[];
Class_Descriptor cd_S21200C4 = {  "S21200C4", // class name
  0,0,//no base classes
  &(vtc_S21200C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7008,4912), // object size
  NSPAIRA(_ZTI8S21200C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21200C4),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  S21200C3  : S21200C4 , virtual S20507C11 , virtual S21200C11 , S21200C10 , S21200C5 {
  void *s21200c3f0;
  int s21200c3f1;
  __tsi64 s21200c3f2;
  int s21200c3f3;
  ::S21199C11 s21200c3f4;
  void *s21200c3f5[10];
  int s21200c3f6;
  long double s21200c3f7[4];
  virtual  ~S21200C3(); // _ZN8S21200C3D2Ev
  virtual void  v6(); // _ZN8S21200C32v6Ev
  S21200C3(); // tgen
};
//SIG(-1 S21200C3) C1{ BC2{ v2 v3 v4 Fi FC3{ VBC4{ m Fi[10] Fp[6]} VBC5{ BC6{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v5 FD[2] Fi[2] FD[3]} VBC6 FC7{}} Fi Fp FC8{ VBC9{ vd m Fp FD[5] Fp FD} VBC6 VBC5 VBC10{ BC4 VBC6 VBC5 FD} vd FD[9] Fi FC11{ VBC4 VBC9 VBC12{ VBC4 VBC13{ BC14{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v6 FD[2] Fi[2] FD[3]} VBC14 FC7} VBC15{ BC4 VBC14 VBC9 BC13 vd FC12 FC13} FC14 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC9 FL} Fi FL FD} VBC9 VBC10 BC8 BC3 vd v1 Fp Fi FL Fi FC11 Fp[10] Fi FD[4]}


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

static void Test_S21200C3()
{
  extern Class_Descriptor cd_S21200C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1081,3025)];
    init_test(&cd_S21200C3, buf);
    S21200C3 *dp, &lv = *(dp=new (buf) S21200C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17280,12096), "sizeof(S21200C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C3)");
    check_base_class_offset(lv, (S21200C4*), 0, "S21200C3");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(15968,11172), "S21200C3");
    check_base_class_offset(lv, (S20507C11*)(S21200C10*), ABISELECT(15968,11172), "S21200C3");
    /*is_ambiguous_... S21200C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C11*), ABISELECT(16104,11260), "S21200C3");
    /*is_ambiguous_... S21200C3::S21200C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C8*), ABISELECT(16208,11336), "S21200C3");
    /*is_ambiguous_... S21200C11::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C11*), ABISELECT(16208,11336), "S21200C3");
    /*is_ambiguous_... S21200C10::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C10*), ABISELECT(16208,11336), "S21200C3");
    /*is_ambiguous_... S21200C5::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C5*), ABISELECT(16208,11336), "S21200C3");
    check_base_class_offset(lv, (S20507C6*)(S21200C8*)(S21200C7*), ABISELECT(16656,11652), "S21200C3");
    check_base_class_offset(lv, (S21200C8*)(S21200C7*), ABISELECT(16656,11652), "S21200C3");
    /*is_ambiguous_... S21200C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C7*), ABISELECT(17184,12032), "S21200C3");
    /*is_ambiguous_... S21200C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C5*), ABISELECT(17184,12032), "S21200C3");
    check_base_class_offset(lv, (S21200C7*)(S21200C11*), ABISELECT(16640,11648), "S21200C3");
    check_base_class_offset(lv, (S21200C7*)(S21200C10*), ABISELECT(16640,11648), "S21200C3");
    check_base_class_offset(lv, (S21200C7*)(S21200C5*), ABISELECT(16640,11648), "S21200C3");
    check_base_class_offset(lv, (S21200C11*), ABISELECT(16096,11256), "S21200C3");
    check_base_class_offset(lv, (S21200C11*)(S21200C10*), ABISELECT(16096,11256), "S21200C3");
    check_base_class_offset(lv, (S21200C10*), ABISELECT(7008,4912), "S21200C3");
    check_base_class_offset(lv, (S21200C5*), ABISELECT(11544,8092), "S21200C3");
    check_field_offset(lv, s21200c3f0, ABISELECT(11560,8100), "S21200C3.s21200c3f0");
    check_field_offset(lv, s21200c3f1, ABISELECT(11568,8104), "S21200C3.s21200c3f1");
    check_field_offset(lv, s21200c3f2, ABISELECT(11576,8108), "S21200C3.s21200c3f2");
    check_field_offset(lv, s21200c3f3, ABISELECT(11584,8116), "S21200C3.s21200c3f3");
    check_field_offset(lv, s21200c3f4, ABISELECT(11600,8120), "S21200C3.s21200c3f4");
    check_field_offset(lv, s21200c3f5, ABISELECT(15808,11080), "S21200C3.s21200c3f5");
    check_field_offset(lv, s21200c3f6, ABISELECT(15888,11120), "S21200C3.s21200c3f6");
    check_field_offset(lv, s21200c3f7, ABISELECT(15904,11124), "S21200C3.s21200c3f7");
    test_class_info(&lv, &cd_S21200C3);
    dp->~S21200C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C3(Test_S21200C3, "S21200C3", ABISELECT(17280,12096));

#else // __cplusplus

extern void _ZN8S21200C3C1Ev();
extern void _ZN8S21200C3D2Ev();
Name_Map name_map_S21200C3[] = {
  NSPAIR(_ZN8S21200C3C1Ev),
  NSPAIR(_ZN8S21200C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21200C4;
extern VTBL_ENTRY _ZTI8S21200C4[];
extern  VTBL_ENTRY _ZTV8S21200C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C7;
extern VTBL_ENTRY _ZTI8S21200C7[];
extern  VTBL_ENTRY _ZTV8S21200C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C7[];
extern Class_Descriptor cd_S21200C11;
extern VTBL_ENTRY _ZTI9S21200C11[];
extern  VTBL_ENTRY _ZTV9S21200C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C11[];
extern Class_Descriptor cd_S21200C10;
extern VTBL_ENTRY _ZTI9S21200C10[];
extern  VTBL_ENTRY _ZTV9S21200C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C10[];
extern Class_Descriptor cd_S21200C5;
extern VTBL_ENTRY _ZTI8S21200C5[];
extern  VTBL_ENTRY _ZTV8S21200C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C5[];
static Base_Class bases_S21200C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21200C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C11,    ABISELECT(15968,11172), //bcp->offset
    27, //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_S20507C6,    ABISELECT(16104,11260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(16208,11336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C8,    ABISELECT(16208,11336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(16656,11652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C8,    ABISELECT(16656,11652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(17184,12032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21200C7,    ABISELECT(16640,11648), //bcp->offset
    37, //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
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21200C11,    ABISELECT(16096,11256), //bcp->offset
    32, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21200C10,    ABISELECT(7008,4912), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21200C5,    ABISELECT(11544,8092), //bcp->offset
    22, //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21200C3[];
extern void _ZN8S21200C42v2Ev();
extern void _ZN8S21200C42v3Ev();
extern void _ZN8S21200C42v4Ev();
extern void _ZN8S21200C3D1Ev();
extern void _ZN8S21200C3D0Ev();
extern void _ZN8S21200C32v6Ev();
extern void ABISELECT(_ZThn7008_N8S21200C3D1Ev,_ZThn4912_N8S21200C3D1Ev)();
extern void ABISELECT(_ZThn7008_N8S21200C3D0Ev,_ZThn4912_N8S21200C3D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21200C3D1Ev,_ZTv0_n12_N8S21200C3D1Ev)();
extern void ABISELECT(_ZThn15968_N8S21200C3D1Ev,_ZThn11172_N8S21200C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21200C3D0Ev,_ZTv0_n12_N8S21200C3D0Ev)();
extern void ABISELECT(_ZThn15968_N8S21200C3D0Ev,_ZThn11172_N8S21200C3D0Ev)() __attribute__((weak));
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY vtc_S21200C3[] = {
  ABISELECT(17184,12032),
  ABISELECT(16640,11648),
  ABISELECT(16208,11336),
  ABISELECT(16096,11256),
  ABISELECT(15968,11172),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  (VTBL_ENTRY)&_ZN8S21200C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21200C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21200C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21200C32v6Ev,
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  ABISELECT(-7008,-4912),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S21200C3D1Ev,_ZThn4912_N8S21200C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S21200C3D0Ev,_ZThn4912_N8S21200C3D0Ev),
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  ABISELECT(-11544,-8092),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  ABISELECT(-15968,-11172),
  ABISELECT(-15968,-11172),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21200C3D1Ev,_ZTv0_n12_N8S21200C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21200C3D0Ev,_ZTv0_n12_N8S21200C3D0Ev),
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-16096,-11256),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-16640,-11648),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S21200C3[];
extern void _ZN9S21200C10D1Ev();
extern void _ZN9S21200C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21200C10__8S21200C3[] = {
  ABISELECT(9088,6344),
  ABISELECT(10176,7120),
  ABISELECT(9632,6736),
  ABISELECT(9200,6424),
  ABISELECT(8960,6260),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&_ZN9S21200C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21200C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev)();
extern void ABISELECT(_ZThn8960_N9S21200C10D1Ev,_ZThn6260_N9S21200C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev)();
extern void ABISELECT(_ZThn8960_N9S21200C10D0Ev,_ZThn6260_N9S21200C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21200C10__8S21200C3[] = {
  ABISELECT(-8960,-6260),
  ABISELECT(-8960,-6260),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C10__8S21200C3[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-9632,-6736),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S21200C11__9S21200C10__8S21200C3[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-9088,-6344),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21200C5__8S21200C3[] = {
  ABISELECT(4664,3244),
  ABISELECT(5096,3556),
  ABISELECT(5640,3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__8S21200C5__8S21200C3[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-5096,-3556),
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S21200C11__8S21200C3[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C11[0]),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C11__8S21200C3[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S21200C11[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__8S21200C3[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C7[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTT_ENTRY vtt_S21200C3[] = {
  {&(_ZTV8S21200C3[7]),  7,42},
  {&(_tg__ZTV9S21200C10__8S21200C3[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S21200C10__8S21200C3[3]),  3,5},
  {&(_tg__ZTV8S21200C7__9S21200C10__8S21200C3[4]),  4,5},
  {&(_tg__ZTV9S21200C11__9S21200C10__8S21200C3[5]),  5,5},
  {&(_tg__ZTV8S21200C5__8S21200C3[5]),  5,5},
  {&(_tg__ZTV8S21200C7__8S21200C5__8S21200C3[4]),  4,5},
  {&(_ZTV8S21200C3[30]),  30,42},
  {&(_ZTV8S21200C3[37]),  37,42},
  {&(_ZTV8S21200C3[41]),  41,42},
  {&(_ZTV8S21200C3[20]),  20,42},
  {&(_ZTV8S21200C3[27]),  27,42},
  {&(_tg__ZTV9S21200C11__8S21200C3[5]),  5,5},
  {&(_tg__ZTV8S21200C7__9S21200C11__8S21200C3[4]),  4,5},
  {&(_tg__ZTV8S21200C7__8S21200C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S21200C3[];
extern  VTBL_ENTRY _ZTV8S21200C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C3[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8960_N9S21200C10D0Ev,_ZThn6260_N9S21200C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8960_N9S21200C10D1Ev,_ZThn6260_N9S21200C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21200C3D0Ev,_ZTv0_n12_N8S21200C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15968_N8S21200C3D0Ev,_ZThn11172_N8S21200C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21200C3D1Ev,_ZTv0_n12_N8S21200C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15968_N8S21200C3D1Ev,_ZThn11172_N8S21200C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21200C3 = {  "S21200C3", // class name
  bases_S21200C3, 12,
  &(vtc_S21200C3[0]), // expected_vtbl_contents
  &(vtt_S21200C3[0]), // expected_vtt_contents
  ABISELECT(17280,12096), // object size
  NSPAIRA(_ZTI8S21200C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21200C3),42, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21200C3),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21200C14  : S21200C5 {
  long double s21200c14f0;
  __tsi64 s21200c14f1[2];
  long double s21200c14f2;
  int s21200c14f3[9];
  virtual void  v7(); // _ZN9S21200C142v7Ev
  ~S21200C14(); // tgen
  S21200C14(); // tgen
};
//SIG(-1 S21200C14) C1{ BC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ BC5{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v2 FD[2] Fi[2] FD[3]} VBC5 FC6{}} v1 FD FL[2] FD Fi[9]}


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

static void Test_S21200C14()
{
  extern Class_Descriptor cd_S21200C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(74,212)];
    init_test(&cd_S21200C14, buf);
    S21200C14 *dp, &lv = *(dp=new (buf) S21200C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1168,844), "sizeof(S21200C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C14)");
    /*is_ambiguous_... S21200C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C5*), ABISELECT(104,84), "S21200C14");
    /*is_ambiguous_... S21200C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C7*), ABISELECT(104,84), "S21200C14");
    check_base_class_offset(lv, (S20507C6*)(S21200C8*)(S21200C7*), ABISELECT(208,152), "S21200C14");
    check_base_class_offset(lv, (S21200C8*)(S21200C7*), ABISELECT(208,152), "S21200C14");
    check_base_class_offset(lv, (S21200C7*)(S21200C5*), ABISELECT(192,148), "S21200C14");
    /*is_ambiguous_... S21200C14::S21200C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C8*), ABISELECT(736,532), "S21200C14");
    /*is_ambiguous_... S21200C5::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C5*), ABISELECT(736,532), "S21200C14");
    check_base_class_offset(lv, (S21200C5*), 0, "S21200C14");
    check_field_offset(lv, s21200c14f0, ABISELECT(16,8), "S21200C14.s21200c14f0");
    check_field_offset(lv, s21200c14f1, ABISELECT(32,20), "S21200C14.s21200c14f1");
    check_field_offset(lv, s21200c14f2, ABISELECT(48,36), "S21200C14.s21200c14f2");
    check_field_offset(lv, s21200c14f3, ABISELECT(64,48), "S21200C14.s21200c14f3");
    test_class_info(&lv, &cd_S21200C14);
    dp->~S21200C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C14(Test_S21200C14, "S21200C14", ABISELECT(1168,844));

#else // __cplusplus

extern void _ZN9S21200C14C1Ev();
extern void _ZN9S21200C14D1Ev();
Name_Map name_map_S21200C14[] = {
  NSPAIR(_ZN9S21200C14C1Ev),
  NSPAIR(_ZN9S21200C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S21200C7;
extern VTBL_ENTRY _ZTI8S21200C7[];
extern  VTBL_ENTRY _ZTV8S21200C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S21200C5;
extern VTBL_ENTRY _ZTI8S21200C5[];
extern  VTBL_ENTRY _ZTV8S21200C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C5[];
static Base_Class bases_S21200C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(104,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
    3, //immediately_derived
  0, 1},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S21200C8,    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
    3, //immediately_derived
  0, 0},
  {&cd_S21200C7,    ABISELECT(192,148), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(736,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C8,    ABISELECT(736,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C5,    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 _ZTI9S21200C14[];
extern void _ZN9S21200C142v7Ev();
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY vtc_S21200C14[] = {
  ABISELECT(736,532),
  ABISELECT(192,148),
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C14[0]),
  (VTBL_ENTRY)&_ZN9S21200C142v7Ev,
  0,
  ABISELECT(-88,-64),
  ABISELECT(-192,-148),
  (VTBL_ENTRY)&(_ZTI9S21200C14[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern VTBL_ENTRY _ZTV9S21200C14[];
static  VTBL_ENTRY _tg__ZTV8S21200C5__9S21200C14[] = {
  ABISELECT(736,532),
  ABISELECT(192,148),
  ABISELECT(104,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__8S21200C5__9S21200C14[] = {
  0,
  ABISELECT(-88,-64),
  ABISELECT(-192,-148),
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C14[] = {
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C7[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTT_ENTRY vtt_S21200C14[] = {
  {&(_ZTV9S21200C14[5]),  5,11},
  {&(_tg__ZTV8S21200C5__9S21200C14[5]),  5,5},
  {&(_tg__ZTV8S21200C7__8S21200C5__9S21200C14[4]),  4,5},
  {&(_ZTV9S21200C14[10]),  10,11},
  {&(_tg__ZTV8S21200C7__9S21200C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S21200C14[];
extern  VTBL_ENTRY _ZTV9S21200C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C14[];
Class_Descriptor cd_S21200C14 = {  "S21200C14", // class name
  bases_S21200C14, 7,
  &(vtc_S21200C14[0]), // expected_vtbl_contents
  &(vtt_S21200C14[0]), // expected_vtt_contents
  ABISELECT(1168,844), // object size
  NSPAIRA(_ZTI9S21200C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21200C14),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21200C14),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21200C1  : virtual S20507C11 , virtual S21200C3 , S21200C10 , S21200C14 , S21200C4 {
  __tsi64 s21200c1f0[2];
  long double s21200c1f1;
  int s21200c1f2;
  virtual void  v1(); // _ZN8S21200C12v1Ev
  ~S21200C1(); // tgen
  S21200C1(); // tgen
};
//SIG(1 S21200C1) C1{ VBC2{ vd m Fp FD[5] Fp FD} VBC3{ BC4{ v2 v3 v4 Fi FC5{ VBC6{ m Fi[10] Fp[6]} VBC7{ BC8{ BC6 Fi FD Fi FC6 FC6 Fi FD[8]} VBC6 v5 FD[2] Fi[2] FD[3]} VBC8 FC9{}} Fi Fp FC10{ VBC2 VBC8 VBC7 VBC11{ BC6 VBC8 VBC7 FD} vd FD[9] Fi FC12{ VBC6 VBC2 VBC13{ VBC6 VBC14{ BC15{ BC6 Fi FD Fi FC6 FC6 Fi FD[8]} VBC6 v8 FD[2] Fi[2] FD[3]} VBC15 FC9} VBC16{ BC6 VBC15 VBC2 BC14 vd FC13 FC14} FC15 FC6 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL} Fi FL FD} VBC2 VBC11 BC10 BC5 vd v6 Fp Fi FL Fi FC12 Fp[10] Fi FD[4]} BC10 BC17{ BC5 v7 FD FL[2] FD Fi[9]} BC4 v1 FL[2] FD Fi}


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

static void Test_S21200C1()
{
  extern Class_Descriptor cd_S21200C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1813,5077)];
    init_test(&cd_S21200C1, buf);
    S21200C1 *dp, &lv = *(dp=new (buf) S21200C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(28992,20304), "sizeof(S21200C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21200C1)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(11712,8208), "S21200C1");
    check_base_class_offset(lv, (S20507C11*)(S21200C3*), ABISELECT(11712,8208), "S21200C1");
    check_base_class_offset(lv, (S20507C11*)(S21200C10*)(S21200C3*), ABISELECT(11712,8208), "S21200C1");
    /*is_ambiguous_... S21200C1::S21200C10 */ AMB_check_base_class_offset(lv, (S20507C11*)(S21200C10*), ABISELECT(11712,8208), "S21200C1");
    check_base_class_offset(lv, (S21200C4*)(S21200C3*), ABISELECT(11840,8292), "S21200C1");
    /*is_ambiguous_... S21200C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C11*), ABISELECT(27816,19468), "S21200C1");
    /*is_ambiguous_... S21200C1::S21200C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C8*), ABISELECT(27920,19544), "S21200C1");
    /*is_ambiguous_... S21200C11::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C11*), ABISELECT(27920,19544), "S21200C1");
    /*is_ambiguous_... S21200C10::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C10*)(S21200C3*), ABISELECT(27920,19544), "S21200C1");
    /*is_ambiguous_... S21200C5::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C5*)(S21200C3*), ABISELECT(27920,19544), "S21200C1");
    /*is_ambiguous_... S21200C1::S21200C10 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C10*), ABISELECT(27920,19544), "S21200C1");
    /*is_ambiguous_... S21200C5::S21200C8 */ AMB_check_base_class_offset(lv, (S21200C8*)(S21200C5*)(S21200C14*), ABISELECT(27920,19544), "S21200C1");
    check_base_class_offset(lv, (S20507C6*)(S21200C8*)(S21200C7*), ABISELECT(28368,19860), "S21200C1");
    check_base_class_offset(lv, (S21200C8*)(S21200C7*), ABISELECT(28368,19860), "S21200C1");
    /*is_ambiguous_... S21200C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C7*), ABISELECT(28896,20240), "S21200C1");
    /*is_ambiguous_... S21200C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C5*)(S21200C3*), ABISELECT(28896,20240), "S21200C1");
    /*is_ambiguous_... S21200C5::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S21200C5*)(S21200C14*), ABISELECT(28896,20240), "S21200C1");
    check_base_class_offset(lv, (S21200C7*)(S21200C11*), ABISELECT(28352,19856), "S21200C1");
    check_base_class_offset(lv, (S21200C7*)(S21200C10*)(S21200C3*), ABISELECT(28352,19856), "S21200C1");
    check_base_class_offset(lv, (S21200C7*)(S21200C5*)(S21200C3*), ABISELECT(28352,19856), "S21200C1");
    /*is_ambiguous_... S21200C1::S21200C10 */ AMB_check_base_class_offset(lv, (S21200C7*)(S21200C10*), ABISELECT(28352,19856), "S21200C1");
    check_base_class_offset(lv, (S21200C7*)(S21200C5*)(S21200C14*), ABISELECT(28352,19856), "S21200C1");
    check_base_class_offset(lv, (S21200C11*)(S21200C3*), ABISELECT(27808,19464), "S21200C1");
    check_base_class_offset(lv, (S21200C11*)(S21200C10*)(S21200C3*), ABISELECT(27808,19464), "S21200C1");
    /*is_ambiguous_... S21200C1::S21200C10 */ AMB_check_base_class_offset(lv, (S21200C11*)(S21200C10*), ABISELECT(27808,19464), "S21200C1");
    check_base_class_offset(lv, (S21200C10*)(S21200C3*), ABISELECT(18848,13204), "S21200C1");
    check_base_class_offset(lv, (S21200C5*)(S21200C3*), ABISELECT(23384,16384), "S21200C1");
    check_base_class_offset(lv, (S21200C3*), ABISELECT(11840,8292), "S21200C1");
    /*is_ambiguous_... S21200C1::S21200C10 */ AMB_check_base_class_offset(lv, (S21200C10*), 0, "S21200C1");
    check_base_class_offset(lv, (S21200C5*)(S21200C14*), ABISELECT(4544,3180), "S21200C1");
    check_base_class_offset(lv, (S21200C14*), ABISELECT(4544,3180), "S21200C1");
    /*is_ambiguous_... S21200C1::S21200C4 */ AMB_check_base_class_offset(lv, (S21200C4*), ABISELECT(4656,3264), "S21200C1");
    check_field_offset(lv, s21200c1f0, ABISELECT(11664,8176), "S21200C1.s21200c1f0");
    check_field_offset(lv, s21200c1f1, ABISELECT(11680,8192), "S21200C1.s21200c1f1");
    check_field_offset(lv, s21200c1f2, ABISELECT(11696,8204), "S21200C1.s21200c1f2");
    test_class_info(&lv, &cd_S21200C1);
    dp->~S21200C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21200C1(Test_S21200C1, "S21200C1", ABISELECT(28992,20304));

#else // __cplusplus

extern void _ZN8S21200C1C1Ev();
extern void _ZN8S21200C1D1Ev();
Name_Map name_map_S21200C1[] = {
  NSPAIR(_ZN8S21200C1C1Ev),
  NSPAIR(_ZN8S21200C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S21200C4;
extern VTBL_ENTRY _ZTI8S21200C4[];
extern  VTBL_ENTRY _ZTV8S21200C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C8;
extern VTBL_ENTRY _ZTI8S21200C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S21200C7;
extern VTBL_ENTRY _ZTI8S21200C7[];
extern  VTBL_ENTRY _ZTV8S21200C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C7[];
extern Class_Descriptor cd_S21200C11;
extern VTBL_ENTRY _ZTI9S21200C11[];
extern  VTBL_ENTRY _ZTV9S21200C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C11[];
extern Class_Descriptor cd_S21200C10;
extern VTBL_ENTRY _ZTI9S21200C10[];
extern  VTBL_ENTRY _ZTV9S21200C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C10[];
extern Class_Descriptor cd_S21200C5;
extern VTBL_ENTRY _ZTI8S21200C5[];
extern  VTBL_ENTRY _ZTV8S21200C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C5[];
extern Class_Descriptor cd_S21200C3;
extern VTBL_ENTRY _ZTI8S21200C3[];
extern  VTBL_ENTRY _ZTV8S21200C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C3[];
extern Class_Descriptor cd_S21200C10;
extern VTBL_ENTRY _ZTI9S21200C10[];
extern  VTBL_ENTRY _ZTV9S21200C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C10[];
extern Class_Descriptor cd_S21200C5;
extern VTBL_ENTRY _ZTI8S21200C5[];
extern  VTBL_ENTRY _ZTV8S21200C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C5[];
extern Class_Descriptor cd_S21200C14;
extern VTBL_ENTRY _ZTI9S21200C14[];
extern  VTBL_ENTRY _ZTV9S21200C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21200C14[];
extern Class_Descriptor cd_S21200C4;
extern VTBL_ENTRY _ZTI8S21200C4[];
extern  VTBL_ENTRY _ZTV8S21200C4[];
static Base_Class bases_S21200C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(11712,8208), //bcp->offset
    22, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S21200C4,    ABISELECT(11840,8292), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C6,    ABISELECT(27816,19468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(27920,19544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C8,    ABISELECT(27920,19544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(28368,19860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21200C8,    ABISELECT(28368,19860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(28896,20240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21200C7,    ABISELECT(28352,19856), //bcp->offset
    64, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21200C11,    ABISELECT(27808,19464), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S21200C10,    ABISELECT(18848,13204), //bcp->offset
    45, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21200C5,    ABISELECT(23384,16384), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21200C3,    ABISELECT(11840,8292), //bcp->offset
    27, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21200C10,    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_S21200C5,    ABISELECT(4544,3180), //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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21200C14,    ABISELECT(4544,3180), //bcp->offset
    11, //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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21200C4,    ABISELECT(4656,3264), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21200C1[];
extern void _ZN8S21200C1D1Ev();
extern void _ZN8S21200C1D0Ev();
extern void _ZN8S21200C12v1Ev();
extern void _ZN9S21200C142v7Ev();
extern void _ZN8S21200C42v2Ev();
extern void _ZN8S21200C42v3Ev();
extern void _ZN8S21200C42v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S21200C1D1Ev,_ZTv0_n12_N8S21200C1D1Ev)();
extern void ABISELECT(_ZThn11712_N8S21200C1D1Ev,_ZThn8208_N8S21200C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21200C1D0Ev,_ZTv0_n12_N8S21200C1D0Ev)();
extern void ABISELECT(_ZThn11712_N8S21200C1D0Ev,_ZThn8208_N8S21200C1D0Ev)() __attribute__((weak));
extern void _ZN8S21200C42v2Ev();
extern void _ZN8S21200C42v3Ev();
extern void _ZN8S21200C42v4Ev();
extern void ABISELECT(_ZTv0_n88_N8S21200C1D1Ev,_ZTv0_n44_N8S21200C1D1Ev)();
extern void ABISELECT(_ZThn11840_N8S21200C1D1Ev,_ZThn8292_N8S21200C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S21200C1D0Ev,_ZTv0_n44_N8S21200C1D0Ev)();
extern void ABISELECT(_ZThn11840_N8S21200C1D0Ev,_ZThn8292_N8S21200C1D0Ev)() __attribute__((weak));
extern void _ZN8S21200C32v6Ev();
extern void ABISELECT(_ZTvn7008_n88_N8S21200C1D1Ev,_ZTvn4912_n44_N8S21200C1D1Ev)();
extern void ABISELECT(_ZTvn7008_n88_N8S21200C1D0Ev,_ZTvn4912_n44_N8S21200C1D0Ev)();
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY vtc_S21200C1[] = {
  ABISELECT(11840,8292),
  ABISELECT(27808,19464),
  ABISELECT(28896,20240),
  ABISELECT(28352,19856),
  ABISELECT(27920,19544),
  ABISELECT(11712,8208),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  (VTBL_ENTRY)&_ZN8S21200C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21200C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21200C12v1Ev,
  ABISELECT(23376,16364),
  ABISELECT(23808,16676),
  ABISELECT(24352,17060),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  (VTBL_ENTRY)&_ZN9S21200C142v7Ev,
  ABISELECT(-4656,-3264),
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  (VTBL_ENTRY)&_ZN8S21200C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v4Ev,
  ABISELECT(-11712,-8208),
  ABISELECT(-11712,-8208),
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21200C1D1Ev,_ZTv0_n12_N8S21200C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21200C1D0Ev,_ZTv0_n12_N8S21200C1D0Ev),
  0,
  ABISELECT(-11840,-8292),
  0,
  0,
  0,
  ABISELECT(17056,11948),
  ABISELECT(16512,11564),
  ABISELECT(16080,11252),
  ABISELECT(15968,11172),
  ABISELECT(-128,-84),
  ABISELECT(-11840,-8292),
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  (VTBL_ENTRY)&_ZN8S21200C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S21200C1D1Ev,_ZTv0_n44_N8S21200C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S21200C1D0Ev,_ZTv0_n44_N8S21200C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21200C32v6Ev,
  ABISELECT(8960,6260),
  ABISELECT(10048,7036),
  ABISELECT(9504,6652),
  ABISELECT(9072,6340),
  ABISELECT(-7136,-4996),
  ABISELECT(-18848,-13204),
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn7008_n88_N8S21200C1D1Ev,_ZTvn4912_n44_N8S21200C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn7008_n88_N8S21200C1D0Ev,_ZTvn4912_n44_N8S21200C1D0Ev),
  ABISELECT(4536,3160),
  ABISELECT(4968,3472),
  ABISELECT(5512,3856),
  ABISELECT(-23384,-16384),
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-27808,-19464),
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-28352,-19856),
  (VTBL_ENTRY)&(_ZTI8S21200C1[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S21200C1[];
extern void _ZN9S21200C10D1Ev();
extern void _ZN9S21200C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21200C10__A1__8S21200C1[] = {
  ABISELECT(27808,19464),
  ABISELECT(28896,20240),
  ABISELECT(28352,19856),
  ABISELECT(27920,19544),
  ABISELECT(11712,8208),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&_ZN9S21200C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21200C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev)();
extern void ABISELECT(_ZThn11712_N9S21200C10D1Ev,_ZThn8208_N9S21200C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev)();
extern void ABISELECT(_ZThn11712_N9S21200C10D0Ev,_ZThn8208_N9S21200C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21200C10__A1__8S21200C1[] = {
  ABISELECT(-11712,-8208),
  ABISELECT(-11712,-8208),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C10__A1__8S21200C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-28352,-19856),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S21200C11__9S21200C10__A1__8S21200C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-27808,-19464),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
};
extern void _ZN9S21200C142v7Ev();
static  VTBL_ENTRY _tg__ZTV9S21200C14__8S21200C1[] = {
  ABISELECT(23376,16364),
  ABISELECT(23808,16676),
  ABISELECT(24352,17060),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C14[0]),
  (VTBL_ENTRY)&_ZN9S21200C142v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21200C59S21200C14__A1__8S21200C1[] = {
  ABISELECT(23376,16364),
  ABISELECT(23808,16676),
  ABISELECT(24352,17060),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__8S21200C59S21200C14__A1__8S21200C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-23808,-16676),
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C14__8S21200C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-23808,-16676),
  (VTBL_ENTRY)&(_ZTI9S21200C14[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern void _ZN8S21200C42v2Ev();
extern void _ZN8S21200C42v3Ev();
extern void _ZN8S21200C42v4Ev();
extern void _ZN8S21200C3D1Ev();
extern void _ZN8S21200C3D0Ev();
extern void _ZN8S21200C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C3__8S21200C1[] = {
  ABISELECT(17056,11948),
  ABISELECT(16512,11564),
  ABISELECT(16080,11252),
  ABISELECT(15968,11172),
  ABISELECT(-128,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  (VTBL_ENTRY)&_ZN8S21200C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21200C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21200C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21200C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21200C32v6Ev,
};
extern void _ZN9S21200C10D1Ev();
extern void _ZN9S21200C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21200C108S21200C3__8S21200C1[] = {
  ABISELECT(8960,6260),
  ABISELECT(10048,7036),
  ABISELECT(9504,6652),
  ABISELECT(9072,6340),
  ABISELECT(-7136,-4996),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&_ZN9S21200C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21200C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S21200C108S21200C3__8S21200C1[] = {
  ABISELECT(7136,4996),
  ABISELECT(7136,4996),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C108S21200C3__8S21200C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-9504,-6652),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S21200C11__9S21200C108S21200C3__8S21200C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-8960,-6260),
  (VTBL_ENTRY)&(_ZTI9S21200C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21200C58S21200C3__8S21200C1[] = {
  ABISELECT(4536,3160),
  ABISELECT(4968,3472),
  ABISELECT(5512,3856),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__8S21200C58S21200C3__8S21200C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-4968,-3472),
  (VTBL_ENTRY)&(_ZTI8S21200C5[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21200C3D1Ev,_ZTv0_n12_N8S21200C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21200C3D0Ev,_ZTv0_n12_N8S21200C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S21200C3__8S21200C1[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21200C3D1Ev,_ZTv0_n12_N8S21200C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21200C3D0Ev,_ZTv0_n12_N8S21200C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S21200C11__8S21200C3__8S21200C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-15968,-11172),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__8S21200C3__8S21200C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-16512,-11564),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern void ABISELECT(_ZThn7008_N8S21200C3D1Ev,_ZThn4912_N8S21200C3D1Ev)();
extern void ABISELECT(_ZThn7008_N8S21200C3D0Ev,_ZThn4912_N8S21200C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21200C10__8S21200C3__8S21200C1[] = {
  ABISELECT(8960,6260),
  ABISELECT(10048,7036),
  ABISELECT(9504,6652),
  ABISELECT(9072,6340),
  ABISELECT(-7136,-4996),
  ABISELECT(-7008,-4912),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S21200C3D1Ev,_ZThn4912_N8S21200C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7008_N8S21200C3D0Ev,_ZThn4912_N8S21200C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21200C5__8S21200C3__8S21200C1[] = {
  ABISELECT(4536,3160),
  ABISELECT(4968,3472),
  ABISELECT(5512,3856),
  ABISELECT(-11544,-8092),
  (VTBL_ENTRY)&(_ZTI8S21200C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21200C11__8S21200C1[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S21200C11[0]),
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__9S21200C11__8S21200C1[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S21200C11[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
extern void _ZN8S21200C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21200C7__8S21200C1[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S21200C7[0]),
  (VTBL_ENTRY)&_ZN8S21200C72v5Ev,
};
static  VTT_ENTRY vtt_S21200C1[] = {
  {&(_ZTV8S21200C1[8]),  8,69},
  {&(_tg__ZTV9S21200C10__A1__8S21200C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S21200C10__A1__8S21200C1[3]),  3,5},
  {&(_tg__ZTV8S21200C7__9S21200C10__A1__8S21200C1[4]),  4,5},
  {&(_tg__ZTV9S21200C11__9S21200C10__A1__8S21200C1[5]),  5,5},
  {&(_tg__ZTV9S21200C14__8S21200C1[5]),  5,6},
  {&(_tg__ZTV8S21200C59S21200C14__A1__8S21200C1[5]),  5,5},
  {&(_tg__ZTV8S21200C7__8S21200C59S21200C14__A1__8S21200C1[4]),  4,5},
  {&(_tg__ZTV8S21200C7__9S21200C14__8S21200C1[4]),  4,5},
  {&(_ZTV8S21200C1[25]),  25,69},
  {&(_ZTV8S21200C1[39]),  39,69},
  {&(_ZTV8S21200C1[64]),  64,69},
  {&(_ZTV8S21200C1[68]),  68,69},
  {&(_ZTV8S21200C1[52]),  52,69},
  {&(_ZTV8S21200C1[59]),  59,69},
  {&(_ZTV8S21200C1[16]),  16,69},
  {&(_tg__ZTV8S21200C3__8S21200C1[7]),  7,13},
  {&(_tg__ZTV9S21200C108S21200C3__8S21200C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__9S21200C108S21200C3__8S21200C1[3]),  3,5},
  {&(_tg__ZTV8S21200C7__9S21200C108S21200C3__8S21200C1[4]),  4,5},
  {&(_tg__ZTV9S21200C11__9S21200C108S21200C3__8S21200C1[5]),  5,5},
  {&(_tg__ZTV8S21200C58S21200C3__8S21200C1[5]),  5,5},
  {&(_tg__ZTV8S21200C7__8S21200C58S21200C3__8S21200C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__8S21200C3__8S21200C1[3]),  3,5},
  {&(_tg__ZTV9S21200C11__8S21200C3__8S21200C1[5]),  5,5},
  {&(_tg__ZTV8S21200C7__8S21200C3__8S21200C1[4]),  4,5},
  {&(_tg__ZTV9S21200C10__8S21200C3__8S21200C1[7]),  7,9},
  {&(_tg__ZTV8S21200C5__8S21200C3__8S21200C1[5]),  5,5},
  {&(_tg__ZTV9S21200C11__8S21200C1[5]),  5,5},
  {&(_tg__ZTV8S21200C7__9S21200C11__8S21200C1[4]),  4,5},
  {&(_tg__ZTV8S21200C7__8S21200C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S21200C1[];
extern  VTBL_ENTRY _ZTV8S21200C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21200C1[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21200C10D0Ev,_ZTv0_n12_N9S21200C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11712_N9S21200C10D0Ev,_ZThn8208_N9S21200C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21200C10D1Ev,_ZTv0_n12_N9S21200C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11712_N9S21200C10D1Ev,_ZThn8208_N9S21200C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S21200C1D0Ev,_ZTv0_n44_N8S21200C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11840_N8S21200C1D0Ev,_ZThn8292_N8S21200C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S21200C1D1Ev,_ZTv0_n44_N8S21200C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11840_N8S21200C1D1Ev,_ZThn8292_N8S21200C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21200C1D0Ev,_ZTv0_n12_N8S21200C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11712_N8S21200C1D0Ev,_ZThn8208_N8S21200C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21200C1D1Ev,_ZTv0_n12_N8S21200C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11712_N8S21200C1D1Ev,_ZThn8208_N8S21200C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21200C1 = {  "S21200C1", // class name
  bases_S21200C1, 17,
  &(vtc_S21200C1[0]), // expected_vtbl_contents
  &(vtt_S21200C1[0]), // expected_vtt_contents
  ABISELECT(28992,20304), // object size
  NSPAIRA(_ZTI8S21200C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21200C1),69, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21200C1),31, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19625C6  : S20507C6 {
  int s19625c6f0;
  long double s19625c6f1;
  int s19625c6f2;
  ::S20507C6 s19625c6f3;
  ::S20507C6 s19625c6f4;
  int s19625c6f5;
  long double s19625c6f6[8];
};
//SIG(-1 S19625C6) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S19625C6()
{
  extern Class_Descriptor cd_S19625C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S19625C6, buf);
    S19625C6 &lv = *(new (buf) S19625C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S19625C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C6)");
    check_base_class_offset(lv, (S20507C6*), 0, "S19625C6");
    check_field_offset(lv, s19625c6f0, ABISELECT(88,64), "S19625C6.s19625c6f0");
    check_field_offset(lv, s19625c6f1, ABISELECT(96,68), "S19625C6.s19625c6f1");
    check_field_offset(lv, s19625c6f2, ABISELECT(112,80), "S19625C6.s19625c6f2");
    check_field_offset(lv, s19625c6f3, ABISELECT(120,84), "S19625C6.s19625c6f3");
    check_field_offset(lv, s19625c6f4, ABISELECT(208,148), "S19625C6.s19625c6f4");
    check_field_offset(lv, s19625c6f5, ABISELECT(296,212), "S19625C6.s19625c6f5");
    check_field_offset(lv, s19625c6f6, ABISELECT(304,216), "S19625C6.s19625c6f6");
    test_class_info(&lv, &cd_S19625C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C6(Test_S19625C6, "S19625C6", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S19625C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19625C6[];
Class_Descriptor cd_S19625C6 = {  "S19625C6", // class name
  bases_S19625C6, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI8S19625C6),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  S19625C8  : S19625C6 , virtual S20507C6 {
  long double s19625c8f0[2];
  int s19625c8f1[2];
  long double s19625c8f2[3];
  virtual void  v2(); // _ZN8S19625C82v2Ev
  ~S19625C8(); // tgen
  S19625C8(); // tgen
};
//SIG(-1 S19625C8) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S19625C8()
{
  extern Class_Descriptor cd_S19625C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S19625C8, buf);
    S19625C8 *dp, &lv = *(dp=new (buf) S19625C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S19625C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C8)");
    check_base_class_offset(lv, (S20507C6*)(S19625C6*), ABISELECT(16,4), "S19625C8");
    check_base_class_offset(lv, (S19625C6*), ABISELECT(16,4), "S19625C8");
    /*is_ambiguous_... S19625C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S19625C8");
    check_field_offset(lv, s19625c8f0, ABISELECT(448,316), "S19625C8.s19625c8f0");
    check_field_offset(lv, s19625c8f1, ABISELECT(480,340), "S19625C8.s19625c8f1");
    check_field_offset(lv, s19625c8f2, ABISELECT(496,348), "S19625C8.s19625c8f2");
    test_class_info(&lv, &cd_S19625C8);
    dp->~S19625C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C8(Test_S19625C8, "S19625C8", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN8S19625C8C1Ev();
extern void _ZN8S19625C8D1Ev();
Name_Map name_map_S19625C8[] = {
  NSPAIR(_ZN8S19625C8C1Ev),
  NSPAIR(_ZN8S19625C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S19625C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19625C6,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19625C8[];
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY vtc_S19625C8[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S19625C8[];
static  VTT_ENTRY vtt_S19625C8[] = {
  {&(_ZTV8S19625C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
Class_Descriptor cd_S19625C8 = {  "S19625C8", // class name
  bases_S19625C8, 3,
  &(vtc_S19625C8[0]), // expected_vtbl_contents
  &(vtt_S19625C8[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI8S19625C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19625C8),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19625C8),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  S19625C7  : virtual S20507C6 , virtual S19625C8 , virtual S19625C6 {
  ::S468C20_nt s19625c7f0;
  ~S19625C7(); // tgen
  S19625C7(); // tgen
};
//SIG(-1 S19625C7) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S19625C7()
{
  extern Class_Descriptor cd_S19625C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S19625C7, buf);
    S19625C7 *dp, &lv = *(dp=new (buf) S19625C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S19625C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C7)");
    /*is_ambiguous_... S19625C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S19625C7");
    /*is_ambiguous_... S19625C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*), ABISELECT(16,8), "S19625C7");
    check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*), ABISELECT(128,76), "S19625C7");
    check_base_class_offset(lv, (S19625C6*)(S19625C8*), ABISELECT(128,76), "S19625C7");
    check_base_class_offset(lv, (S19625C8*), ABISELECT(112,72), "S19625C7");
    /*is_ambiguous_... S19625C7::S19625C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*), ABISELECT(656,456), "S19625C7");
    /*is_ambiguous_... S19625C7::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*), ABISELECT(656,456), "S19625C7");
    check_field_offset(lv, s19625c7f0, ABISELECT(8,4), "S19625C7.s19625c7f0");
    test_class_info(&lv, &cd_S19625C7);
    dp->~S19625C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C7(Test_S19625C7, "S19625C7", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S19625C7C1Ev();
extern void _ZN8S19625C7D1Ev();
Name_Map name_map_S19625C7[] = {
  NSPAIR(_ZN8S19625C7C1Ev),
  NSPAIR(_ZN8S19625C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
static Base_Class bases_S19625C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19625C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S19625C8,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19625C7[];
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY vtc_S19625C7[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S19625C7[];
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C7[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
static  VTT_ENTRY vtt_S19625C7[] = {
  {&(_ZTV8S19625C7[5]),  5,10},
  {&(_ZTV8S19625C7[9]),  9,10},
  {&(_tg__ZTV8S19625C8__8S19625C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19625C7[];
extern  VTBL_ENTRY _ZTV8S19625C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C7[];
Class_Descriptor cd_S19625C7 = {  "S19625C7", // class name
  bases_S19625C7, 6,
  &(vtc_S19625C7[0]), // expected_vtbl_contents
  &(vtt_S19625C7[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S19625C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19625C7),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19625C7),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  S19625C10  : S20507C6 , virtual S19625C6 , virtual S20507C11 , S19625C8 {
  ::S19625C7 s19625c10f0;
  ::S19625C8 s19625c10f1;
  virtual  ~S19625C10(); // _ZN9S19625C10D2Ev
  S19625C10(); // tgen
};
//SIG(-1 S19625C10) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ vd m Fp FD[5] Fp FD} BC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} vd FC6{ VBC2 VBC5 VBC3 FC7{}} FC5}


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

static void Test_S19625C10()
{
  extern Class_Descriptor cd_S19625C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(190,532)];
    init_test(&cd_S19625C10, buf);
    S19625C10 *dp, &lv = *(dp=new (buf) S19625C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3024,2124), "sizeof(S19625C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C10)");
    /*is_ambiguous_... S19625C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S19625C10");
    /*is_ambiguous_... S19625C10::S19625C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*), ABISELECT(2368,1664), "S19625C10");
    /*is_ambiguous_... S19625C10::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*), ABISELECT(2368,1664), "S19625C10");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2800,1976), "S19625C10");
    check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*), ABISELECT(16,4), "S19625C10");
    check_base_class_offset(lv, (S19625C6*)(S19625C8*), ABISELECT(16,4), "S19625C10");
    /*is_ambiguous_... S19625C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*), ABISELECT(2928,2060), "S19625C10");
    check_base_class_offset(lv, (S19625C8*), 0, "S19625C10");
    check_field_offset(lv, s19625c10f0, ABISELECT(640,448), "S19625C10.s19625c10f0");
    check_field_offset(lv, s19625c10f1, ABISELECT(1728,1216), "S19625C10.s19625c10f1");
    test_class_info(&lv, &cd_S19625C10);
    dp->~S19625C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C10(Test_S19625C10, "S19625C10", ABISELECT(3024,2124));

#else // __cplusplus

extern void _ZN9S19625C10C1Ev();
extern void _ZN9S19625C10D2Ev();
Name_Map name_map_S19625C10[] = {
  NSPAIR(_ZN9S19625C10C1Ev),
  NSPAIR(_ZN9S19625C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
static Base_Class bases_S19625C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19625C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C11,    ABISELECT(2800,1976), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    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_S19625C6,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(2928,2060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    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 _ZTI9S19625C10[];
extern void _ZN8S19625C82v2Ev();
extern void _ZN9S19625C10D1Ev();
extern void _ZN9S19625C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev)();
extern void ABISELECT(_ZThn2800_N9S19625C10D1Ev,_ZThn1976_N9S19625C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev)();
extern void ABISELECT(_ZThn2800_N9S19625C10D0Ev,_ZThn1976_N9S19625C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19625C10[] = {
  ABISELECT(2800,1976),
  ABISELECT(2368,1664),
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D0Ev,
  ABISELECT(-2800,-1976),
  ABISELECT(-2800,-1976),
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19625C10[];
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C10[] = {
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
static  VTT_ENTRY vtt_S19625C10[] = {
  {&(_ZTV9S19625C10[5]),  5,13},
  {&(_tg__ZTV8S19625C8__9S19625C10[3]),  3,4},
  {&(_ZTV9S19625C10[11]),  11,13},
};
extern VTBL_ENTRY _ZTI9S19625C10[];
extern  VTBL_ENTRY _ZTV9S19625C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C10[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S19625C10D0Ev,_ZThn1976_N9S19625C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S19625C10D1Ev,_ZThn1976_N9S19625C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19625C10 = {  "S19625C10", // class name
  bases_S19625C10, 8,
  &(vtc_S19625C10[0]), // expected_vtbl_contents
  &(vtt_S19625C10[0]), // expected_vtt_contents
  ABISELECT(3024,2124), // object size
  NSPAIRA(_ZTI9S19625C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19625C10),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19625C10),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19625C11  : virtual S20507C6 , virtual S20507C11 , virtual S19625C7 , virtual S19625C10 {
  ::S19625C6 s19625c11f0;
  ::S20507C6 s19625c11f1;
  short s19625c11f2;
  void *s19625c11f3[2];
  __tsi64 s19625c11f4;
  long double s19625c11f5[2];
  __tsi64 s19625c11f6;
  int s19625c11f7[2];
  char s19625c11f8;
  ~S19625C11(); // tgen
  S19625C11(); // tgen
};
//SIG(-1 S19625C11) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ vd m Fp FD[5] Fp FD} VBC4{ VBC2 VBC5{ BC6{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC6 FC7{}} VBC8{ BC2 VBC6 VBC3 BC5 vd FC4 FC5} FC6 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc}


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

static void Test_S19625C11()
{
  extern Class_Descriptor cd_S19625C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,741)];
    init_test(&cd_S19625C11, buf);
    S19625C11 *dp, &lv = *(dp=new (buf) S19625C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,2960), "sizeof(S19625C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C11)");
    /*is_ambiguous_... S19625C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(632,444), "S19625C11");
    /*is_ambiguous_... S19625C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C7*), ABISELECT(632,444), "S19625C11");
    /*is_ambiguous_... S19625C11::S19625C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*), ABISELECT(632,444), "S19625C11");
    /*is_ambiguous_... S19625C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*)(S19625C10*), ABISELECT(632,444), "S19625C11");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(720,508), "S19625C11");
    check_base_class_offset(lv, (S20507C11*)(S19625C10*), ABISELECT(720,508), "S19625C11");
    /*is_ambiguous_... S19625C11::S19625C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*), ABISELECT(880,604), "S19625C11");
    /*is_ambiguous_... S19625C11::S19625C8 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C8*), ABISELECT(880,604), "S19625C11");
    check_base_class_offset(lv, (S19625C8*)(S19625C7*), ABISELECT(864,600), "S19625C11");
    /*is_ambiguous_... S19625C11::S19625C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*), ABISELECT(1408,984), "S19625C11");
    /*is_ambiguous_... S19625C7::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C7*), ABISELECT(1408,984), "S19625C11");
    /*is_ambiguous_... S19625C10::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C10*), ABISELECT(1408,984), "S19625C11");
    check_base_class_offset(lv, (S19625C7*), ABISELECT(848,592), "S19625C11");
    /*is_ambiguous_... S19625C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C10*), ABISELECT(2384,1680), "S19625C11");
    check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*)(S19625C10*), ABISELECT(1856,1300), "S19625C11");
    check_base_class_offset(lv, (S19625C6*)(S19625C8*)(S19625C10*), ABISELECT(1856,1300), "S19625C11");
    check_base_class_offset(lv, (S19625C8*)(S19625C10*), ABISELECT(1840,1296), "S19625C11");
    check_base_class_offset(lv, (S19625C10*), ABISELECT(1840,1296), "S19625C11");
    check_field_offset(lv, s19625c11f0, ABISELECT(16,4), "S19625C11.s19625c11f0");
    check_field_offset(lv, s19625c11f1, ABISELECT(448,316), "S19625C11.s19625c11f1");
    check_field_offset(lv, s19625c11f2, ABISELECT(536,380), "S19625C11.s19625c11f2");
    check_field_offset(lv, s19625c11f3, ABISELECT(544,384), "S19625C11.s19625c11f3");
    check_field_offset(lv, s19625c11f4, ABISELECT(560,392), "S19625C11.s19625c11f4");
    check_field_offset(lv, s19625c11f5, ABISELECT(576,400), "S19625C11.s19625c11f5");
    check_field_offset(lv, s19625c11f6, ABISELECT(608,424), "S19625C11.s19625c11f6");
    check_field_offset(lv, s19625c11f7, ABISELECT(616,432), "S19625C11.s19625c11f7");
    check_field_offset(lv, s19625c11f8, ABISELECT(624,440), "S19625C11.s19625c11f8");
    test_class_info(&lv, &cd_S19625C11);
    dp->~S19625C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C11(Test_S19625C11, "S19625C11", ABISELECT(4208,2960));

#else // __cplusplus

extern void _ZN9S19625C11C1Ev();
extern void _ZN9S19625C11D1Ev();
Name_Map name_map_S19625C11[] = {
  NSPAIR(_ZN9S19625C11C1Ev),
  NSPAIR(_ZN9S19625C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C7;
extern VTBL_ENTRY _ZTI8S19625C7[];
extern  VTBL_ENTRY _ZTV8S19625C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S19625C10;
extern VTBL_ENTRY _ZTI9S19625C10[];
extern  VTBL_ENTRY _ZTV9S19625C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C10[];
static Base_Class bases_S19625C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(632,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
  1, 1},
  {&cd_S20507C11,    ABISELECT(720,508), //bcp->offset
    10, //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_S20507C6,    ABISELECT(880,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
    3, //immediately_derived
  0, 0},
  {&cd_S19625C6,    ABISELECT(880,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
    4, //immediately_derived
  0, 0},
  {&cd_S19625C8,    ABISELECT(864,600), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(1408,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C7,    ABISELECT(848,592), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2384,1680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(1856,1300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    ABISELECT(1840,1296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19625C10,    ABISELECT(1840,1296), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19625C11[];
extern void _ZN9S19625C11D1Ev();
extern void _ZN9S19625C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev)();
extern void ABISELECT(_ZThn720_N9S19625C11D1Ev,_ZThn508_N9S19625C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev)();
extern void ABISELECT(_ZThn720_N9S19625C11D0Ev,_ZThn508_N9S19625C11D0Ev)() __attribute__((weak));
extern void _ZN8S19625C82v2Ev();
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev)();
extern void ABISELECT(_ZThn1840_N9S19625C11D1Ev,_ZThn1296_N9S19625C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev)();
extern void ABISELECT(_ZThn1840_N9S19625C11D0Ev,_ZThn1296_N9S19625C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19625C11[] = {
  ABISELECT(1840,1296),
  ABISELECT(1408,984),
  ABISELECT(864,600),
  ABISELECT(848,592),
  ABISELECT(720,508),
  ABISELECT(632,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN9S19625C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C11D0Ev,
  ABISELECT(-720,-508),
  ABISELECT(-720,-508),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev),
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  ABISELECT(-848,-592),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  0,
  ABISELECT(-232,-156),
  ABISELECT(-864,-600),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  ABISELECT(-1840,-1296),
  0,
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  ABISELECT(-1840,-1296),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19625C11[];
static  VTBL_ENTRY _tg__ZTV8S19625C7__9S19625C11[] = {
  ABISELECT(560,392),
  ABISELECT(16,8),
  ABISELECT(-216,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C7__9S19625C11[] = {
  0,
  ABISELECT(-232,-156),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C11[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void _ZN9S19625C10D1Ev();
extern void _ZN9S19625C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C10__9S19625C11[] = {
  ABISELECT(-1120,-788),
  ABISELECT(-432,-312),
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D0Ev,
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C89S19625C10__A1__9S19625C11[] = {
  ABISELECT(-1208,-852),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C10__9S19625C11[] = {
  ABISELECT(1120,788),
  ABISELECT(1120,788),
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev),
};
static  VTT_ENTRY vtt_S19625C11[] = {
  {&(_ZTV9S19625C11[8]),  8,35},
  {&(_ZTV9S19625C11[13]),  13,35},
  {&(_ZTV9S19625C11[20]),  20,35},
  {&(_ZTV9S19625C11[24]),  24,35},
  {&(_ZTV9S19625C11[32]),  32,35},
  {&(_tg__ZTV8S19625C7__9S19625C11[5]),  5,5},
  {&(_tg__ZTV8S19625C8__8S19625C7__9S19625C11[4]),  4,5},
  {&(_tg__ZTV8S19625C8__9S19625C11[3]),  3,4},
  {&(_tg__ZTV9S19625C10__9S19625C11[5]),  5,8},
  {&(_tg__ZTV8S19625C89S19625C10__A1__9S19625C11[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19625C10__9S19625C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19625C11[];
extern  VTBL_ENTRY _ZTV9S19625C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C11[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N9S19625C11D0Ev,_ZThn1296_N9S19625C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N9S19625C11D1Ev,_ZThn1296_N9S19625C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19625C11D0Ev,_ZThn508_N9S19625C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19625C11D1Ev,_ZThn508_N9S19625C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19625C11 = {  "S19625C11", // class name
  bases_S19625C11, 13,
  &(vtc_S19625C11[0]), // expected_vtbl_contents
  &(vtt_S19625C11[0]), // expected_vtt_contents
  ABISELECT(4208,2960), // object size
  NSPAIRA(_ZTI9S19625C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19625C11),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19625C11),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19625C4  : virtual S20507C6 , virtual S19625C6 , virtual S19625C7 , virtual S19625C10 , S19625C11 {
  ::S20507C11 s19625c4f0;
  long double s19625c4f1;
  virtual  ~S19625C4(); // _ZN8S19625C4D2Ev
  S19625C4(); // tgen
};
//SIG(-1 S19625C4) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ VBC2 VBC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} VBC3 FC6{}} VBC7{ BC2 VBC3 VBC8{ vd m Fp FD[5] Fp FD} BC5 vd FC4 FC5} BC9{ VBC2 VBC8 VBC4 VBC7 FC3 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC8 FD}


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

static void Test_S19625C4()
{
  extern Class_Descriptor cd_S19625C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(274,765)];
    init_test(&cd_S19625C4, buf);
    S19625C4 *dp, &lv = *(dp=new (buf) S19625C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4368,3056), "sizeof(S19625C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C4)");
    /*is_ambiguous_... S19625C4::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(784,540), "S19625C4");
    /*is_ambiguous_... S19625C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C7*), ABISELECT(784,540), "S19625C4");
    /*is_ambiguous_... S19625C4::S19625C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*), ABISELECT(784,540), "S19625C4");
    /*is_ambiguous_... S19625C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*)(S19625C10*), ABISELECT(784,540), "S19625C4");
    /*is_ambiguous_... S19625C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C11*), ABISELECT(784,540), "S19625C4");
    /*is_ambiguous_... S19625C4::S19625C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*), ABISELECT(880,604), "S19625C4");
    /*is_ambiguous_... S19625C4::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*), ABISELECT(880,604), "S19625C4");
    /*is_ambiguous_... S19625C7::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C7*), ABISELECT(880,604), "S19625C4");
    /*is_ambiguous_... S19625C10::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C10*), ABISELECT(880,604), "S19625C4");
    /*is_ambiguous_... S19625C4::S19625C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*), ABISELECT(1344,928), "S19625C4");
    /*is_ambiguous_... S19625C4::S19625C8 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C8*), ABISELECT(1344,928), "S19625C4");
    check_base_class_offset(lv, (S19625C8*)(S19625C7*), ABISELECT(1328,924), "S19625C4");
    check_base_class_offset(lv, (S19625C7*), ABISELECT(1312,916), "S19625C4");
    check_base_class_offset(lv, (S19625C7*)(S19625C11*), ABISELECT(1312,916), "S19625C4");
    /*is_ambiguous_... S19625C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C10*), ABISELECT(2416,1692), "S19625C4");
    check_base_class_offset(lv, (S20507C11*)(S19625C10*), ABISELECT(4240,2972), "S19625C4");
    check_base_class_offset(lv, (S20507C11*)(S19625C11*), ABISELECT(4240,2972), "S19625C4");
    check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*)(S19625C10*), ABISELECT(1888,1312), "S19625C4");
    check_base_class_offset(lv, (S19625C6*)(S19625C8*)(S19625C10*), ABISELECT(1888,1312), "S19625C4");
    check_base_class_offset(lv, (S19625C8*)(S19625C10*), ABISELECT(1872,1308), "S19625C4");
    check_base_class_offset(lv, (S19625C10*), ABISELECT(1872,1308), "S19625C4");
    check_base_class_offset(lv, (S19625C10*)(S19625C11*), ABISELECT(1872,1308), "S19625C4");
    check_base_class_offset(lv, (S19625C11*), 0, "S19625C4");
    check_field_offset(lv, s19625c4f0, ABISELECT(640,444), "S19625C4.s19625c4f0");
    check_field_offset(lv, s19625c4f1, ABISELECT(768,528), "S19625C4.s19625c4f1");
    test_class_info(&lv, &cd_S19625C4);
    dp->~S19625C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C4(Test_S19625C4, "S19625C4", ABISELECT(4368,3056));

#else // __cplusplus

extern void _ZN8S19625C4C1Ev();
extern void _ZN8S19625C4D2Ev();
Name_Map name_map_S19625C4[] = {
  NSPAIR(_ZN8S19625C4C1Ev),
  NSPAIR(_ZN8S19625C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S19625C7;
extern VTBL_ENTRY _ZTI8S19625C7[];
extern  VTBL_ENTRY _ZTV8S19625C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S19625C10;
extern VTBL_ENTRY _ZTI9S19625C10[];
extern  VTBL_ENTRY _ZTV9S19625C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C10[];
extern Class_Descriptor cd_S19625C11;
extern VTBL_ENTRY _ZTI9S19625C11[];
extern  VTBL_ENTRY _ZTV9S19625C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C11[];
static Base_Class bases_S19625C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(784,540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(880,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
    2, //immediately_derived
  0, 0},
  {&cd_S19625C6,    ABISELECT(880,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(1344,928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    ABISELECT(1328,924), //bcp->offset
    15, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19625C7,    ABISELECT(1312,916), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(2416,1692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4240,2972), //bcp->offset
    30, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(1888,1312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    ABISELECT(1872,1308), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19625C10,    ABISELECT(1872,1308), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19625C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19625C4[];
extern void _ZN8S19625C4D1Ev();
extern void _ZN8S19625C4D0Ev();
extern void _ZN8S19625C82v2Ev();
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev)();
extern void ABISELECT(_ZThn1872_N8S19625C4D1Ev,_ZThn1308_N8S19625C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev)();
extern void ABISELECT(_ZThn1872_N8S19625C4D0Ev,_ZThn1308_N8S19625C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev)();
extern void ABISELECT(_ZThn4240_N8S19625C4D1Ev,_ZThn2972_N8S19625C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev)();
extern void ABISELECT(_ZThn4240_N8S19625C4D0Ev,_ZThn2972_N8S19625C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19625C4[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19625C4D0Ev,
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev),
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19625C4[];
extern void _ZN9S19625C11D1Ev();
extern void _ZN9S19625C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C11__8S19625C4[] = {
  ABISELECT(1872,1308),
  ABISELECT(880,604),
  ABISELECT(1328,924),
  ABISELECT(1312,916),
  ABISELECT(4240,2972),
  ABISELECT(784,540),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN9S19625C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev)();
extern void ABISELECT(_ZThn4240_N9S19625C11D1Ev,_ZThn2972_N9S19625C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev)();
extern void ABISELECT(_ZThn4240_N9S19625C11D0Ev,_ZThn2972_N9S19625C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C11__8S19625C4[] = {
  ABISELECT(-4240,-2972),
  ABISELECT(-4240,-2972),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__9S19625C11__8S19625C4[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1312,-916),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C11__8S19625C4[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1328,-924),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev)();
extern void ABISELECT(_ZThn1872_N9S19625C11D1Ev,_ZThn1308_N9S19625C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev)();
extern void ABISELECT(_ZThn1872_N9S19625C11D0Ev,_ZThn1308_N9S19625C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19625C10__9S19625C11__8S19625C4[] = {
  ABISELECT(-1872,-1308),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-1872,-1308),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__8S19625C4[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C7__8S19625C4[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C4[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void _ZN9S19625C10D1Ev();
extern void _ZN9S19625C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C10__8S19625C4[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D0Ev,
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C89S19625C10__A1__8S19625C4[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19625C10D1Ev,_ZThn1664_N9S19625C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19625C10D0Ev,_ZThn1664_N9S19625C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C10__8S19625C4[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev),
};
static  VTT_ENTRY vtt_S19625C4[] = {
  {&(_ZTV8S19625C4[8]),  8,35},
  {&(_tg__ZTV9S19625C11__8S19625C4[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19625C11__8S19625C4[3]),  3,5},
  {&(_tg__ZTV8S19625C7__9S19625C11__8S19625C4[5]),  5,5},
  {&(_tg__ZTV8S19625C8__9S19625C11__8S19625C4[4]),  4,5},
  {&(_tg__ZTV9S19625C10__9S19625C11__8S19625C4[7]),  7,10},
  {&(_ZTV8S19625C4[15]),  15,35},
  {&(_ZTV8S19625C4[19]),  19,35},
  {&(_ZTV8S19625C4[27]),  27,35},
  {&(_ZTV8S19625C4[33]),  33,35},
  {&(_tg__ZTV8S19625C7__8S19625C4[5]),  5,5},
  {&(_tg__ZTV8S19625C8__8S19625C7__8S19625C4[4]),  4,5},
  {&(_tg__ZTV8S19625C8__8S19625C4[3]),  3,4},
  {&(_tg__ZTV9S19625C10__8S19625C4[5]),  5,8},
  {&(_tg__ZTV8S19625C89S19625C10__A1__8S19625C4[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19625C10__8S19625C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19625C4[];
extern  VTBL_ENTRY _ZTV8S19625C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C4[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19625C10D0Ev,_ZThn1664_N9S19625C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19625C10D1Ev,_ZThn1664_N9S19625C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S19625C11D0Ev,_ZThn1308_N9S19625C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N9S19625C11D1Ev,_ZThn1308_N9S19625C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S19625C11D0Ev,_ZThn2972_N9S19625C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S19625C11D1Ev,_ZThn2972_N9S19625C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S19625C4D0Ev,_ZThn2972_N8S19625C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S19625C4D1Ev,_ZThn2972_N8S19625C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S19625C4D0Ev,_ZThn1308_N8S19625C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S19625C4D1Ev,_ZThn1308_N8S19625C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19625C4 = {  "S19625C4", // class name
  bases_S19625C4, 14,
  &(vtc_S19625C4[0]), // expected_vtbl_contents
  &(vtt_S19625C4[0]), // expected_vtt_contents
  ABISELECT(4368,3056), // object size
  NSPAIRA(_ZTI8S19625C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19625C4),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19625C4),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19625C12  {
  int s19625c12f0;
  ::S19625C7 s19625c12f1;
  int s19625c12f2;
  void *s19625c12f3;
  ::S21200C10 s19625c12f4;
  int s19625c12f5;
  __tsi64 s19625c12f6;
  long double s19625c12f7;
  virtual void  v3(); // _ZN9S19625C122v3Ev
  virtual void  v4(); // _ZN9S19625C122v4Ev
  virtual void  v5(); // _ZN9S19625C122v5Ev
  ~S19625C12(); // tgen
  S19625C12(); // tgen
};
//SIG(-1 S19625C12) C1{ v1 v2 v3 Fi FC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ BC5{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v4 FD[2] Fi[2] FD[3]} VBC5 FC6{}} Fi Fp FC7{ VBC8{ vd m Fp FD[5] Fp FD} VBC9{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC10{ BC9 VBC3 v5 FD[2] Fi[2] FD[3]} VBC11{ BC3 VBC9 VBC10 FD} vd FD[9] Fi FC12{ VBC3 VBC8 VBC13{ VBC3 VBC14{ BC15{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v6 FD[2] Fi[2] FD[3]} VBC15 FC6} VBC16{ BC3 VBC15 VBC8 BC14 vd FC13 FC14} FC15 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC8 FL} Fi FL FD}


void  S19625C12 ::v3(){vfunc_called(this, "_ZN9S19625C122v3Ev");}
void  S19625C12 ::v4(){vfunc_called(this, "_ZN9S19625C122v4Ev");}
void  S19625C12 ::v5(){vfunc_called(this, "_ZN9S19625C122v5Ev");}
S19625C12 ::~S19625C12(){ note_dtor("S19625C12", this);} // tgen
S19625C12 ::S19625C12(){ note_ctor("S19625C12", this);} // tgen

static void Test_S19625C12()
{
  extern Class_Descriptor cd_S19625C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(439,1229)];
    init_test(&cd_S19625C12, buf);
    S19625C12 *dp, &lv = *(dp=new (buf) S19625C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7008,4912), "sizeof(S19625C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C12)");
    check_field_offset(lv, s19625c12f0, ABISELECT(8,4), "S19625C12.s19625c12f0");
    check_field_offset(lv, s19625c12f1, ABISELECT(16,8), "S19625C12.s19625c12f1");
    check_field_offset(lv, s19625c12f2, ABISELECT(1104,776), "S19625C12.s19625c12f2");
    check_field_offset(lv, s19625c12f3, ABISELECT(1112,780), "S19625C12.s19625c12f3");
    check_field_offset(lv, s19625c12f4, ABISELECT(1120,784), "S19625C12.s19625c12f4");
    check_field_offset(lv, s19625c12f5, ABISELECT(6976,4888), "S19625C12.s19625c12f5");
    check_field_offset(lv, s19625c12f6, ABISELECT(6984,4892), "S19625C12.s19625c12f6");
    check_field_offset(lv, s19625c12f7, ABISELECT(6992,4900), "S19625C12.s19625c12f7");
    test_class_info(&lv, &cd_S19625C12);
    dp->~S19625C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C12(Test_S19625C12, "S19625C12", ABISELECT(7008,4912));

#else // __cplusplus

extern void _ZN9S19625C12C1Ev();
extern void _ZN9S19625C12D1Ev();
Name_Map name_map_S19625C12[] = {
  NSPAIR(_ZN9S19625C12C1Ev),
  NSPAIR(_ZN9S19625C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19625C12[];
extern void _ZN9S19625C122v3Ev();
extern void _ZN9S19625C122v4Ev();
extern void _ZN9S19625C122v5Ev();
static  VTBL_ENTRY vtc_S19625C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C12[0]),
  (VTBL_ENTRY)&_ZN9S19625C122v3Ev,
  (VTBL_ENTRY)&_ZN9S19625C122v4Ev,
  (VTBL_ENTRY)&_ZN9S19625C122v5Ev,
};
extern VTBL_ENTRY _ZTI9S19625C12[];
extern  VTBL_ENTRY _ZTV9S19625C12[];
Class_Descriptor cd_S19625C12 = {  "S19625C12", // class name
  0,0,//no base classes
  &(vtc_S19625C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7008,4912), // object size
  NSPAIRA(_ZTI9S19625C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19625C12),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  S19625C2  : S20507C11 , S19625C4 , virtual S19625C11 , virtual S19625C12 {
  void *s19625c2f0[5];
  long double s19625c2f1[5];
  int s19625c2f2;
  long double s19625c2f3;
  virtual void  v6(); // _ZN8S19625C22v6Ev
  virtual void  v7(); // _ZN8S19625C22v7Ev
  ~S19625C2(); // tgen
  S19625C2(); // tgen
};
//SIG(-1 S19625C2) C1{ BC2{ vd m Fp FD[5] Fp FD} BC3{ VBC4{ m Fi[10] Fp[6]} VBC5{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC6{ VBC4 VBC7{ BC5 VBC4 v3 FD[2] Fi[2] FD[3]} VBC5 FC8{}} VBC9{ BC4 VBC5 VBC2 BC7 vd FC6 FC7} BC10{ VBC4 VBC2 VBC6 VBC9 FC5 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC2 FD} VBC10 VBC11{ v4 v5 v6 Fi FC6 Fi Fp FC12{ VBC2 VBC13{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC14{ BC13 VBC4 v7 FD[2] Fi[2] FD[3]} VBC15{ BC4 VBC13 VBC14 FD} vd FD[9] Fi FC16{ VBC4 VBC2 VBC17{ VBC4 VBC18{ BC19{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v8 FD[2] Fi[2] FD[3]} VBC19 FC8} VBC20{ BC4 VBC19 VBC2 BC18 vd FC17 FC18} FC19 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL} Fi FL FD} v1 v2 Fp[5] FD[5] Fi FD}


void  S19625C2 ::v6(){vfunc_called(this, "_ZN8S19625C22v6Ev");}
void  S19625C2 ::v7(){vfunc_called(this, "_ZN8S19625C22v7Ev");}
S19625C2 ::~S19625C2(){ note_dtor("S19625C2", this);} // tgen
S19625C2 ::S19625C2(){ note_ctor("S19625C2", this);} // tgen

static void Test_S19625C2()
{
  extern Class_Descriptor cd_S19625C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(770,2149)];
    init_test(&cd_S19625C2, buf);
    S19625C2 *dp, &lv = *(dp=new (buf) S19625C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12304,8592), "sizeof(S19625C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C2)");
    /*is_ambiguous_... S19625C2::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*), 0, "S19625C2");
    /*is_ambiguous_... S19625C4::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C4*), ABISELECT(1072,720), "S19625C2");
    /*is_ambiguous_... S19625C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C7*), ABISELECT(1072,720), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*), ABISELECT(1072,720), "S19625C2");
    /*is_ambiguous_... S19625C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*)(S19625C10*), ABISELECT(1072,720), "S19625C2");
    /*is_ambiguous_... S19625C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C11*)(S19625C4*), ABISELECT(1072,720), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C11*), ABISELECT(1072,720), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*), ABISELECT(1168,784), "S19625C2");
    /*is_ambiguous_... S19625C4::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C4*), ABISELECT(1168,784), "S19625C2");
    /*is_ambiguous_... S19625C7::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C7*), ABISELECT(1168,784), "S19625C2");
    /*is_ambiguous_... S19625C10::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C10*), ABISELECT(1168,784), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*), ABISELECT(1632,1108), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C8 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C8*), ABISELECT(1632,1108), "S19625C2");
    check_base_class_offset(lv, (S19625C8*)(S19625C7*), ABISELECT(1616,1104), "S19625C2");
    check_base_class_offset(lv, (S19625C7*)(S19625C4*), ABISELECT(1600,1096), "S19625C2");
    check_base_class_offset(lv, (S19625C7*)(S19625C11*)(S19625C4*), ABISELECT(1600,1096), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C11 */ AMB_check_base_class_offset(lv, (S19625C7*)(S19625C11*), ABISELECT(1600,1096), "S19625C2");
    /*is_ambiguous_... S19625C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C10*), ABISELECT(2704,1872), "S19625C2");
    check_base_class_offset(lv, (S20507C11*)(S19625C10*), ABISELECT(4528,3152), "S19625C2");
    check_base_class_offset(lv, (S20507C11*)(S19625C11*)(S19625C4*), ABISELECT(4528,3152), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19625C11*), ABISELECT(4528,3152), "S19625C2");
    check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*)(S19625C10*), ABISELECT(2176,1492), "S19625C2");
    check_base_class_offset(lv, (S19625C6*)(S19625C8*)(S19625C10*), ABISELECT(2176,1492), "S19625C2");
    check_base_class_offset(lv, (S19625C8*)(S19625C10*), ABISELECT(2160,1488), "S19625C2");
    check_base_class_offset(lv, (S19625C10*)(S19625C4*), ABISELECT(2160,1488), "S19625C2");
    check_base_class_offset(lv, (S19625C10*)(S19625C11*)(S19625C4*), ABISELECT(2160,1488), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C11 */ AMB_check_base_class_offset(lv, (S19625C10*)(S19625C11*), ABISELECT(2160,1488), "S19625C2");
    check_base_class_offset(lv, (S19625C11*)(S19625C4*), ABISELECT(128,84), "S19625C2");
    check_base_class_offset(lv, (S19625C4*), ABISELECT(128,84), "S19625C2");
    /*is_ambiguous_... S19625C2::S19625C11 */ AMB_check_base_class_offset(lv, (S19625C11*), ABISELECT(4656,3236), "S19625C2");
    check_base_class_offset(lv, (S19625C12*), ABISELECT(5296,3680), "S19625C2");
    check_field_offset(lv, s19625c2f0, ABISELECT(912,624), "S19625C2.s19625c2f0");
    check_field_offset(lv, s19625c2f1, ABISELECT(960,644), "S19625C2.s19625c2f1");
    check_field_offset(lv, s19625c2f2, ABISELECT(1040,704), "S19625C2.s19625c2f2");
    check_field_offset(lv, s19625c2f3, ABISELECT(1056,708), "S19625C2.s19625c2f3");
    test_class_info(&lv, &cd_S19625C2);
    dp->~S19625C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C2(Test_S19625C2, "S19625C2", ABISELECT(12304,8592));

#else // __cplusplus

extern void _ZN8S19625C2C1Ev();
extern void _ZN8S19625C2D1Ev();
Name_Map name_map_S19625C2[] = {
  NSPAIR(_ZN8S19625C2C1Ev),
  NSPAIR(_ZN8S19625C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S19625C7;
extern VTBL_ENTRY _ZTI8S19625C7[];
extern  VTBL_ENTRY _ZTV8S19625C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S19625C10;
extern VTBL_ENTRY _ZTI9S19625C10[];
extern  VTBL_ENTRY _ZTV9S19625C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C10[];
extern Class_Descriptor cd_S19625C11;
extern VTBL_ENTRY _ZTI9S19625C11[];
extern  VTBL_ENTRY _ZTV9S19625C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C11[];
extern Class_Descriptor cd_S19625C4;
extern VTBL_ENTRY _ZTI8S19625C4[];
extern  VTBL_ENTRY _ZTV8S19625C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C4[];
extern Class_Descriptor cd_S19625C11;
extern VTBL_ENTRY _ZTI9S19625C11[];
extern  VTBL_ENTRY _ZTV9S19625C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C11[];
extern Class_Descriptor cd_S19625C12;
extern VTBL_ENTRY _ZTI9S19625C12[];
extern  VTBL_ENTRY _ZTV9S19625C12[];
static Base_Class bases_S19625C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20507C6,    ABISELECT(1072,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(1168,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
    3, //immediately_derived
  0, 0},
  {&cd_S19625C6,    ABISELECT(1168,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
    7, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(1632,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    ABISELECT(1616,1104), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19625C7,    ABISELECT(1600,1096), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2704,1872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(4528,3152), //bcp->offset
    44, //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
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(2176,1492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    ABISELECT(2160,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19625C10,    ABISELECT(2160,1488), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19625C11,    ABISELECT(128,84), //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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19625C4,    ABISELECT(128,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19625C11,    ABISELECT(4656,3236), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19625C12,    ABISELECT(5296,3680), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19625C2[];
extern void _ZN8S19625C2D1Ev();
extern void _ZN8S19625C2D0Ev();
extern void _ZN8S19625C22v6Ev();
extern void _ZN8S19625C22v7Ev();
extern void ABISELECT(_ZThn128_N8S19625C2D1Ev,_ZThn84_N8S19625C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S19625C2D0Ev,_ZThn84_N8S19625C2D0Ev)();
extern void _ZN8S19625C82v2Ev();
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19625C2D1Ev,_ZTv0_n28_N8S19625C2D1Ev)();
extern void ABISELECT(_ZThn2160_N8S19625C2D1Ev,_ZThn1488_N8S19625C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19625C2D0Ev,_ZTv0_n28_N8S19625C2D0Ev)();
extern void ABISELECT(_ZThn2160_N8S19625C2D0Ev,_ZThn1488_N8S19625C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C2D1Ev,_ZTv0_n12_N8S19625C2D1Ev)();
extern void ABISELECT(_ZThn4528_N8S19625C2D1Ev,_ZThn3152_N8S19625C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C2D0Ev,_ZTv0_n12_N8S19625C2D0Ev)();
extern void ABISELECT(_ZThn4528_N8S19625C2D0Ev,_ZThn3152_N8S19625C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19625C2D1Ev,_ZTv0_n36_N8S19625C2D1Ev)();
extern void ABISELECT(_ZThn4656_N8S19625C2D1Ev,_ZThn3236_N8S19625C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19625C2D0Ev,_ZTv0_n36_N8S19625C2D0Ev)();
extern void ABISELECT(_ZThn4656_N8S19625C2D0Ev,_ZThn3236_N8S19625C2D0Ev)() __attribute__((weak));
extern void _ZN9S19625C122v3Ev();
extern void _ZN9S19625C122v4Ev();
extern void _ZN9S19625C122v5Ev();
static  VTBL_ENTRY vtc_S19625C2[] = {
  ABISELECT(5296,3680),
  ABISELECT(4656,3236),
  ABISELECT(4528,3152),
  ABISELECT(2160,1488),
  ABISELECT(1616,1104),
  ABISELECT(1600,1096),
  ABISELECT(1168,784),
  ABISELECT(1072,720),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&_ZN8S19625C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19625C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19625C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19625C22v7Ev,
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19625C2D1Ev,_ZThn84_N8S19625C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19625C2D0Ev,_ZThn84_N8S19625C2D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1600,-1096),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1616,-1104),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  ABISELECT(-2160,-1488),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2160,-1488),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C2D1Ev,_ZTv0_n28_N8S19625C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C2D0Ev,_ZTv0_n28_N8S19625C2D0Ev),
  ABISELECT(-4528,-3152),
  ABISELECT(-4528,-3152),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C2D1Ev,_ZTv0_n12_N8S19625C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C2D0Ev,_ZTv0_n12_N8S19625C2D0Ev),
  ABISELECT(-4656,-3236),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  ABISELECT(-4656,-3236),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19625C2D1Ev,_ZTv0_n36_N8S19625C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19625C2D0Ev,_ZTv0_n36_N8S19625C2D0Ev),
  0,
  0,
  0,
  ABISELECT(-5296,-3680),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&_ZN9S19625C122v3Ev,
  (VTBL_ENTRY)&_ZN9S19625C122v4Ev,
  (VTBL_ENTRY)&_ZN9S19625C122v5Ev,
};
extern VTBL_ENTRY _ZTV8S19625C2[];
extern void _ZN8S19625C4D1Ev();
extern void _ZN8S19625C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C4__8S19625C2[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19625C4D0Ev,
};
extern void _ZN9S19625C11D1Ev();
extern void _ZN9S19625C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C118S19625C4__8S19625C2[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN9S19625C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev)();
extern void ABISELECT(_ZThn4400_N9S19625C11D1Ev,_ZThn3068_N9S19625C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev)();
extern void ABISELECT(_ZThn4400_N9S19625C11D0Ev,_ZThn3068_N9S19625C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C118S19625C4__8S19625C2[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__9S19625C118S19625C4__8S19625C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C118S19625C4__8S19625C2[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev)();
extern void ABISELECT(_ZThn2032_N9S19625C11D1Ev,_ZThn1404_N9S19625C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev)();
extern void ABISELECT(_ZThn2032_N9S19625C11D0Ev,_ZThn1404_N9S19625C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19625C10__9S19625C118S19625C4__8S19625C2[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__8S19625C4__8S19625C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C4__8S19625C2[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev)();
extern void ABISELECT(_ZThn2032_N8S19625C4D1Ev,_ZThn1404_N8S19625C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev)();
extern void ABISELECT(_ZThn2032_N8S19625C4D0Ev,_ZThn1404_N8S19625C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19625C10__8S19625C4__8S19625C2[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev)();
extern void ABISELECT(_ZThn4400_N8S19625C4D1Ev,_ZThn3068_N8S19625C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev)();
extern void ABISELECT(_ZThn4400_N8S19625C4D0Ev,_ZThn3068_N8S19625C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S19625C4__8S19625C2[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__8S19625C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C7__8S19625C2[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C2[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void _ZN9S19625C10D1Ev();
extern void _ZN9S19625C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C10__8S19625C2[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D0Ev,
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C89S19625C10__A1__8S19625C2[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19625C10D1Ev,_ZThn1664_N9S19625C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19625C10D0Ev,_ZThn1664_N9S19625C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C10__8S19625C2[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev),
};
extern void _ZN9S19625C11D1Ev();
extern void _ZN9S19625C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C11__A1__8S19625C2[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN9S19625C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C11__A1__8S19625C2[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__9S19625C11__A1__8S19625C2[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C11__A1__8S19625C2[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19625C10__9S19625C11__A1__8S19625C2[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev),
};
static  VTT_ENTRY vtt_S19625C2[] = {
  {&(_ZTV8S19625C2[10]),  10,68},
  {&(_tg__ZTV8S19625C4__8S19625C2[8]),  8,10},
  {&(_tg__ZTV9S19625C118S19625C4__8S19625C2[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19625C118S19625C4__8S19625C2[3]),  3,5},
  {&(_tg__ZTV8S19625C7__9S19625C118S19625C4__8S19625C2[5]),  5,5},
  {&(_tg__ZTV8S19625C8__9S19625C118S19625C4__8S19625C2[4]),  4,5},
  {&(_tg__ZTV9S19625C10__9S19625C118S19625C4__8S19625C2[7]),  7,10},
  {&(_tg__ZTV8S19625C7__8S19625C4__8S19625C2[5]),  5,5},
  {&(_tg__ZTV8S19625C8__8S19625C4__8S19625C2[4]),  4,5},
  {&(_tg__ZTV9S19625C10__8S19625C4__8S19625C2[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S19625C4__8S19625C2[3]),  3,5},
  {&(_ZTV8S19625C2[22]),  22,68},
  {&(_ZTV8S19625C2[29]),  29,68},
  {&(_ZTV8S19625C2[33]),  33,68},
  {&(_ZTV8S19625C2[41]),  41,68},
  {&(_ZTV8S19625C2[47]),  47,68},
  {&(_ZTV8S19625C2[58]),  58,68},
  {&(_ZTV8S19625C2[65]),  65,68},
  {&(_tg__ZTV8S19625C7__8S19625C2[5]),  5,5},
  {&(_tg__ZTV8S19625C8__8S19625C7__8S19625C2[4]),  4,5},
  {&(_tg__ZTV8S19625C8__8S19625C2[3]),  3,4},
  {&(_tg__ZTV9S19625C10__8S19625C2[5]),  5,8},
  {&(_tg__ZTV8S19625C89S19625C10__A1__8S19625C2[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19625C10__8S19625C2[3]),  3,5},
  {&(_tg__ZTV9S19625C11__A1__8S19625C2[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19625C11__A1__8S19625C2[3]),  3,5},
  {&(_tg__ZTV8S19625C7__9S19625C11__A1__8S19625C2[5]),  5,5},
  {&(_tg__ZTV8S19625C8__9S19625C11__A1__8S19625C2[4]),  4,5},
  {&(_tg__ZTV9S19625C10__9S19625C11__A1__8S19625C2[7]),  7,10},
};
extern VTBL_ENTRY _ZTI8S19625C2[];
extern  VTBL_ENTRY _ZTV8S19625C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C2[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19625C10D0Ev,_ZThn1664_N9S19625C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19625C10D1Ev,_ZThn1664_N9S19625C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S19625C4D0Ev,_ZThn3068_N8S19625C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S19625C4D1Ev,_ZThn3068_N8S19625C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S19625C4D0Ev,_ZThn1404_N8S19625C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S19625C4D1Ev,_ZThn1404_N8S19625C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S19625C11D0Ev,_ZThn1404_N9S19625C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S19625C11D1Ev,_ZThn1404_N9S19625C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S19625C11D0Ev,_ZThn3068_N9S19625C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S19625C11D1Ev,_ZThn3068_N9S19625C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19625C2D0Ev,_ZTv0_n36_N8S19625C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19625C2D0Ev,_ZThn3236_N8S19625C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19625C2D1Ev,_ZTv0_n36_N8S19625C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19625C2D1Ev,_ZThn3236_N8S19625C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C2D0Ev,_ZTv0_n12_N8S19625C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N8S19625C2D0Ev,_ZThn3152_N8S19625C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C2D1Ev,_ZTv0_n12_N8S19625C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N8S19625C2D1Ev,_ZThn3152_N8S19625C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C2D0Ev,_ZTv0_n28_N8S19625C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S19625C2D0Ev,_ZThn1488_N8S19625C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C2D1Ev,_ZTv0_n28_N8S19625C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S19625C2D1Ev,_ZThn1488_N8S19625C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19625C2 = {  "S19625C2", // class name
  bases_S19625C2, 18,
  &(vtc_S19625C2[0]), // expected_vtbl_contents
  &(vtt_S19625C2[0]), // expected_vtt_contents
  ABISELECT(12304,8592), // object size
  NSPAIRA(_ZTI8S19625C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19625C2),68, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19625C2),29, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19625C14  : S20507C6 , virtual S19625C6 , virtual S19625C8 {
  long double s19625c14f0;
  ~S19625C14(); // tgen
  S19625C14(); // tgen
};
//SIG(-1 S19625C14) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S19625C14()
{
  extern Class_Descriptor cd_S19625C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S19625C14, buf);
    S19625C14 *dp, &lv = *(dp=new (buf) S19625C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S19625C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C14)");
    /*is_ambiguous_... S19625C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S19625C14");
    /*is_ambiguous_... S19625C14::S19625C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*), ABISELECT(112,80), "S19625C14");
    /*is_ambiguous_... S19625C14::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*), ABISELECT(112,80), "S19625C14");
    check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*), ABISELECT(560,396), "S19625C14");
    check_base_class_offset(lv, (S19625C6*)(S19625C8*), ABISELECT(560,396), "S19625C14");
    /*is_ambiguous_... S19625C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*), ABISELECT(1088,776), "S19625C14");
    check_base_class_offset(lv, (S19625C8*), ABISELECT(544,392), "S19625C14");
    check_field_offset(lv, s19625c14f0, ABISELECT(96,68), "S19625C14.s19625c14f0");
    test_class_info(&lv, &cd_S19625C14);
    dp->~S19625C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C14(Test_S19625C14, "S19625C14", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN9S19625C14C1Ev();
extern void _ZN9S19625C14D1Ev();
Name_Map name_map_S19625C14[] = {
  NSPAIR(_ZN9S19625C14C1Ev),
  NSPAIR(_ZN9S19625C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
static Base_Class bases_S19625C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19625C6,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S19625C6,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S19625C14[];
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY vtc_S19625C14[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C14[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI9S19625C14[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern VTBL_ENTRY _ZTV9S19625C14[];
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C14[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
static  VTT_ENTRY vtt_S19625C14[] = {
  {&(_ZTV9S19625C14[5]),  5,10},
  {&(_ZTV9S19625C14[9]),  9,10},
  {&(_tg__ZTV8S19625C8__9S19625C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19625C14[];
extern  VTBL_ENTRY _ZTV9S19625C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C14[];
Class_Descriptor cd_S19625C14 = {  "S19625C14", // class name
  bases_S19625C14, 7,
  &(vtc_S19625C14[0]), // expected_vtbl_contents
  &(vtt_S19625C14[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI9S19625C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19625C14),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19625C14),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  S19625C1  : virtual S19625C2 , S19625C14 {
  int s19625c1f0;
  void *s19625c1f1;
  ::S468C20_nt s19625c1f2;
  __tsi64 s19625c1f3;
  ::S19625C2 s19625c1f4;
  void *s19625c1f5;
  long s19625c1f6;
  void *s19625c1f7;
  virtual  ~S19625C1(); // _ZN8S19625C1D2Ev
  virtual void  v1(); // _ZN8S19625C12v1Ev
  S19625C1(); // tgen
};
//SIG(1 S19625C1) C1{ VBC2{ BC3{ vd m Fp FD[5] Fp FD} BC4{ VBC5{ m Fi[10] Fp[6]} VBC6{ BC5 Fi FD Fi FC5 FC5 Fi FD[8]} VBC7{ VBC5 VBC8{ BC6 VBC5 v2 FD[2] Fi[2] FD[3]} VBC6 FC9{}} VBC10{ BC5 VBC6 VBC3 BC8 vd FC7 FC8} BC11{ VBC5 VBC3 VBC7 VBC10 FC6 FC5 Fs Fp[2] FL FD[2] FL Fi[2] Fc} vd FC3 FD} VBC11 VBC12{ v3 v4 v5 Fi FC7 Fi Fp FC13{ VBC3 VBC14{ BC5 Fi FD Fi FC5 FC5 Fi FD[8]} VBC15{ BC14 VBC5 v8 FD[2] Fi[2] FD[3]} VBC16{ BC5 VBC14 VBC15 FD} vd FD[9] Fi FC17{ VBC5 VBC3 VBC18{ VBC5 VBC19{ BC20{ BC5 Fi FD Fi FC5 FC5 Fi FD[8]} VBC5 v9 FD[2] Fi[2] FD[3]} VBC20 FC9} VBC21{ BC5 VBC20 VBC3 BC19 vd FC18 FC19} FC20 FC5 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC3 FL} Fi FL FD} v6 v7 Fp[5] FD[5] Fi FD} BC22{ BC5 VBC6 VBC8 FD} vd v1 Fi Fp FC9 FL FC2 Fp Fl Fp}


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

static void Test_S19625C1()
{
  extern Class_Descriptor cd_S19625C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1550,4325)];
    init_test(&cd_S19625C1, buf);
    S19625C1 *dp, &lv = *(dp=new (buf) S19625C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24784,17296), "sizeof(S19625C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19625C1)");
    /*is_ambiguous_... S19625C2::S20507C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19625C2*), ABISELECT(12480,8704), "S19625C1");
    /*is_ambiguous_... S19625C4::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C4*)(S19625C2*), ABISELECT(13552,9424), "S19625C1");
    /*is_ambiguous_... S19625C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C7*), ABISELECT(13552,9424), "S19625C1");
    /*is_ambiguous_... S19625C1::S19625C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*), ABISELECT(13552,9424), "S19625C1");
    /*is_ambiguous_... S19625C8::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C8*)(S19625C10*), ABISELECT(13552,9424), "S19625C1");
    /*is_ambiguous_... S19625C11::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C11*)(S19625C4*)(S19625C2*), ABISELECT(13552,9424), "S19625C1");
    /*is_ambiguous_... S19625C1::S19625C11 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C11*), ABISELECT(13552,9424), "S19625C1");
    /*is_ambiguous_... S19625C1::S19625C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*), ABISELECT(13648,9488), "S19625C1");
    /*is_ambiguous_... S19625C4::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C4*)(S19625C2*), ABISELECT(13648,9488), "S19625C1");
    /*is_ambiguous_... S19625C7::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C7*), ABISELECT(13648,9488), "S19625C1");
    /*is_ambiguous_... S19625C10::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C10*), ABISELECT(13648,9488), "S19625C1");
    /*is_ambiguous_... S19625C14::S19625C6 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C14*), ABISELECT(13648,9488), "S19625C1");
    /*is_ambiguous_... S19625C1::S19625C8 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*), ABISELECT(14112,9812), "S19625C1");
    /*is_ambiguous_... S19625C1::S19625C8 */ AMB_check_base_class_offset(lv, (S19625C6*)(S19625C8*), ABISELECT(14112,9812), "S19625C1");
    check_base_class_offset(lv, (S19625C8*)(S19625C7*), ABISELECT(14096,9808), "S19625C1");
    check_base_class_offset(lv, (S19625C8*)(S19625C14*), ABISELECT(14096,9808), "S19625C1");
    check_base_class_offset(lv, (S19625C7*)(S19625C4*)(S19625C2*), ABISELECT(14080,9800), "S19625C1");
    check_base_class_offset(lv, (S19625C7*)(S19625C11*)(S19625C4*)(S19625C2*), ABISELECT(14080,9800), "S19625C1");
    /*is_ambiguous_... S19625C1::S19625C11 */ AMB_check_base_class_offset(lv, (S19625C7*)(S19625C11*), ABISELECT(14080,9800), "S19625C1");
    /*is_ambiguous_... S19625C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C10*), ABISELECT(15184,10576), "S19625C1");
    check_base_class_offset(lv, (S20507C11*)(S19625C10*), ABISELECT(17008,11856), "S19625C1");
    check_base_class_offset(lv, (S20507C11*)(S19625C11*)(S19625C4*)(S19625C2*), ABISELECT(17008,11856), "S19625C1");
    /*is_ambiguous_... S19625C1::S19625C11 */ AMB_check_base_class_offset(lv, (S20507C11*)(S19625C11*), ABISELECT(17008,11856), "S19625C1");
    check_base_class_offset(lv, (S20507C6*)(S19625C6*)(S19625C8*)(S19625C10*), ABISELECT(14656,10196), "S19625C1");
    check_base_class_offset(lv, (S19625C6*)(S19625C8*)(S19625C10*), ABISELECT(14656,10196), "S19625C1");
    check_base_class_offset(lv, (S19625C8*)(S19625C10*), ABISELECT(14640,10192), "S19625C1");
    check_base_class_offset(lv, (S19625C10*)(S19625C4*)(S19625C2*), ABISELECT(14640,10192), "S19625C1");
    check_base_class_offset(lv, (S19625C10*)(S19625C11*)(S19625C4*)(S19625C2*), ABISELECT(14640,10192), "S19625C1");
    /*is_ambiguous_... S19625C1::S19625C11 */ AMB_check_base_class_offset(lv, (S19625C10*)(S19625C11*), ABISELECT(14640,10192), "S19625C1");
    check_base_class_offset(lv, (S19625C11*)(S19625C4*)(S19625C2*), ABISELECT(12608,8788), "S19625C1");
    check_base_class_offset(lv, (S19625C4*)(S19625C2*), ABISELECT(12608,8788), "S19625C1");
    /*is_ambiguous_... S19625C2::S19625C11 */ AMB_check_base_class_offset(lv, (S19625C11*)(S19625C2*), ABISELECT(17136,11940), "S19625C1");
    check_base_class_offset(lv, (S19625C12*)(S19625C2*), ABISELECT(17776,12384), "S19625C1");
    check_base_class_offset(lv, (S19625C2*), ABISELECT(12480,8704), "S19625C1");
    /*is_ambiguous_... S19625C14::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S19625C14*), ABISELECT(8,4), "S19625C1");
    check_base_class_offset(lv, (S19625C14*), 0, "S19625C1");
    check_field_offset(lv, s19625c1f0, ABISELECT(112,80), "S19625C1.s19625c1f0");
    check_field_offset(lv, s19625c1f1, ABISELECT(120,84), "S19625C1.s19625c1f1");
    check_field_offset(lv, s19625c1f2, ABISELECT(128,88), "S19625C1.s19625c1f2");
    check_field_offset(lv, s19625c1f3, ABISELECT(136,92), "S19625C1.s19625c1f3");
    check_field_offset(lv, s19625c1f4, ABISELECT(144,100), "S19625C1.s19625c1f4");
    check_field_offset(lv, s19625c1f5, ABISELECT(12448,8692), "S19625C1.s19625c1f5");
    check_field_offset(lv, s19625c1f6, ABISELECT(12456,8696), "S19625C1.s19625c1f6");
    check_field_offset(lv, s19625c1f7, ABISELECT(12464,8700), "S19625C1.s19625c1f7");
    test_class_info(&lv, &cd_S19625C1);
    dp->~S19625C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19625C1(Test_S19625C1, "S19625C1", ABISELECT(24784,17296));

#else // __cplusplus

extern void _ZN8S19625C1C1Ev();
extern void _ZN8S19625C1D2Ev();
Name_Map name_map_S19625C1[] = {
  NSPAIR(_ZN8S19625C1C1Ev),
  NSPAIR(_ZN8S19625C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S19625C7;
extern VTBL_ENTRY _ZTI8S19625C7[];
extern  VTBL_ENTRY _ZTV8S19625C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C7[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C6;
extern VTBL_ENTRY _ZTI8S19625C6[];
extern Class_Descriptor cd_S19625C8;
extern VTBL_ENTRY _ZTI8S19625C8[];
extern  VTBL_ENTRY _ZTV8S19625C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C8[];
extern Class_Descriptor cd_S19625C10;
extern VTBL_ENTRY _ZTI9S19625C10[];
extern  VTBL_ENTRY _ZTV9S19625C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C10[];
extern Class_Descriptor cd_S19625C11;
extern VTBL_ENTRY _ZTI9S19625C11[];
extern  VTBL_ENTRY _ZTV9S19625C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C11[];
extern Class_Descriptor cd_S19625C4;
extern VTBL_ENTRY _ZTI8S19625C4[];
extern  VTBL_ENTRY _ZTV8S19625C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C4[];
extern Class_Descriptor cd_S19625C11;
extern VTBL_ENTRY _ZTI9S19625C11[];
extern  VTBL_ENTRY _ZTV9S19625C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C11[];
extern Class_Descriptor cd_S19625C12;
extern VTBL_ENTRY _ZTI9S19625C12[];
extern  VTBL_ENTRY _ZTV9S19625C12[];
extern Class_Descriptor cd_S19625C2;
extern VTBL_ENTRY _ZTI8S19625C2[];
extern  VTBL_ENTRY _ZTV8S19625C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C2[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S19625C14;
extern VTBL_ENTRY _ZTI9S19625C14[];
extern  VTBL_ENTRY _ZTV9S19625C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19625C14[];
static Base_Class bases_S19625C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(12480,8704), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(13552,9424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(13648,9488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(13648,9488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(14112,9812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(14112,9812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    ABISELECT(14096,9808), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19625C7,    ABISELECT(14080,9800), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(15184,10576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C11,    ABISELECT(17008,11856), //bcp->offset
    61, //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
    13, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(14656,10196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C6,    ABISELECT(14656,10196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C8,    ABISELECT(14640,10192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19625C10,    ABISELECT(14640,10192), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19625C11,    ABISELECT(12608,8788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19625C4,    ABISELECT(12608,8788), //bcp->offset
    31, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19625C11,    ABISELECT(17136,11940), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19625C12,    ABISELECT(17776,12384), //bcp->offset
    77, //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
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19625C2,    ABISELECT(12480,8704), //bcp->offset
    14, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19625C14,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19625C1[];
extern void _ZN8S19625C1D1Ev();
extern void _ZN8S19625C1D0Ev();
extern void _ZN8S19625C12v1Ev();
extern void ABISELECT(_ZTv0_n88_N8S19625C1D1Ev,_ZTv0_n44_N8S19625C1D1Ev)();
extern void ABISELECT(_ZThn12480_N8S19625C1D1Ev,_ZThn8704_N8S19625C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19625C1D0Ev,_ZTv0_n44_N8S19625C1D0Ev)();
extern void ABISELECT(_ZThn12480_N8S19625C1D0Ev,_ZThn8704_N8S19625C1D0Ev)() __attribute__((weak));
extern void _ZN8S19625C22v6Ev();
extern void _ZN8S19625C22v7Ev();
extern void ABISELECT(_ZTvn128_n88_N8S19625C1D1Ev,_ZTvn84_n44_N8S19625C1D1Ev)();
extern void ABISELECT(_ZTvn128_n88_N8S19625C1D0Ev,_ZTvn84_n44_N8S19625C1D0Ev)();
extern void _ZN8S19625C82v2Ev();
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19625C1D1Ev,_ZTv0_n28_N8S19625C1D1Ev)();
extern void ABISELECT(_ZThn14640_N8S19625C1D1Ev,_ZThn10192_N8S19625C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19625C1D0Ev,_ZTv0_n28_N8S19625C1D0Ev)();
extern void ABISELECT(_ZThn14640_N8S19625C1D0Ev,_ZThn10192_N8S19625C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C1D1Ev,_ZTv0_n12_N8S19625C1D1Ev)();
extern void ABISELECT(_ZThn17008_N8S19625C1D1Ev,_ZThn11856_N8S19625C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C1D0Ev,_ZTv0_n12_N8S19625C1D0Ev)();
extern void ABISELECT(_ZThn17008_N8S19625C1D0Ev,_ZThn11856_N8S19625C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19625C1D1Ev,_ZTv0_n36_N8S19625C1D1Ev)();
extern void ABISELECT(_ZThn17136_N8S19625C1D1Ev,_ZThn11940_N8S19625C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19625C1D0Ev,_ZTv0_n36_N8S19625C1D0Ev)();
extern void ABISELECT(_ZThn17136_N8S19625C1D0Ev,_ZThn11940_N8S19625C1D0Ev)() __attribute__((weak));
extern void _ZN9S19625C122v3Ev();
extern void _ZN9S19625C122v4Ev();
extern void _ZN9S19625C122v5Ev();
static  VTBL_ENTRY vtc_S19625C1[] = {
  ABISELECT(17776,12384),
  ABISELECT(17136,11940),
  ABISELECT(17008,11856),
  ABISELECT(14640,10192),
  ABISELECT(14080,9800),
  ABISELECT(12480,8704),
  ABISELECT(13552,9424),
  ABISELECT(14096,9808),
  ABISELECT(13648,9488),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  (VTBL_ENTRY)&_ZN8S19625C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19625C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19625C12v1Ev,
  0,
  0,
  ABISELECT(-12480,-8704),
  ABISELECT(5296,3680),
  ABISELECT(4656,3236),
  ABISELECT(4528,3152),
  ABISELECT(2160,1488),
  ABISELECT(1616,1104),
  ABISELECT(1600,1096),
  ABISELECT(1168,784),
  ABISELECT(1072,720),
  ABISELECT(-12480,-8704),
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19625C1D1Ev,_ZTv0_n44_N8S19625C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19625C1D0Ev,_ZTv0_n44_N8S19625C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19625C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19625C22v7Ev,
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  ABISELECT(-12608,-8788),
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn128_n88_N8S19625C1D1Ev,_ZTvn84_n44_N8S19625C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn128_n88_N8S19625C1D0Ev,_ZTvn84_n44_N8S19625C1D0Ev),
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-14080,-9800),
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  0,
  ABISELECT(-544,-384),
  ABISELECT(-14096,-9808),
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  ABISELECT(-14640,-10192),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-14640,-10192),
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C1D1Ev,_ZTv0_n28_N8S19625C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C1D0Ev,_ZTv0_n28_N8S19625C1D0Ev),
  ABISELECT(-17008,-11856),
  ABISELECT(-17008,-11856),
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C1D1Ev,_ZTv0_n12_N8S19625C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C1D0Ev,_ZTv0_n12_N8S19625C1D0Ev),
  ABISELECT(-17136,-11940),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  ABISELECT(-17136,-11940),
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19625C1D1Ev,_ZTv0_n36_N8S19625C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19625C1D0Ev,_ZTv0_n36_N8S19625C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-17776,-12384),
  (VTBL_ENTRY)&(_ZTI8S19625C1[0]),
  (VTBL_ENTRY)&_ZN9S19625C122v3Ev,
  (VTBL_ENTRY)&_ZN9S19625C122v4Ev,
  (VTBL_ENTRY)&_ZN9S19625C122v5Ev,
};
extern VTBL_ENTRY _ZTV8S19625C1[];
static  VTBL_ENTRY _tg__ZTV9S19625C14__8S19625C1[] = {
  ABISELECT(13552,9424),
  ABISELECT(14096,9808),
  ABISELECT(13648,9488),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C14[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C14__8S19625C1[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-14096,-9808),
  (VTBL_ENTRY)&(_ZTI9S19625C14[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C2D1Ev();
extern void _ZN8S19625C2D0Ev();
extern void _ZN8S19625C22v6Ev();
extern void _ZN8S19625C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C2__8S19625C1[] = {
  ABISELECT(5296,3680),
  ABISELECT(4656,3236),
  ABISELECT(4528,3152),
  ABISELECT(2160,1488),
  ABISELECT(1616,1104),
  ABISELECT(1600,1096),
  ABISELECT(1168,784),
  ABISELECT(1072,720),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&_ZN8S19625C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19625C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19625C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19625C22v7Ev,
};
extern void _ZN8S19625C4D1Ev();
extern void _ZN8S19625C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C48S19625C2__8S19625C1[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19625C4D0Ev,
};
extern void _ZN9S19625C11D1Ev();
extern void _ZN9S19625C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C118S19625C48S19625C2__8S19625C1[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN9S19625C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev)();
extern void ABISELECT(_ZThn4400_N9S19625C11D1Ev,_ZThn3068_N9S19625C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev)();
extern void ABISELECT(_ZThn4400_N9S19625C11D0Ev,_ZThn3068_N9S19625C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C118S19625C48S19625C2__8S19625C1[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__9S19625C118S19625C48S19625C2__8S19625C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C118S19625C48S19625C2__8S19625C1[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev)();
extern void ABISELECT(_ZThn2032_N9S19625C11D1Ev,_ZThn1404_N9S19625C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev)();
extern void ABISELECT(_ZThn2032_N9S19625C11D0Ev,_ZThn1404_N9S19625C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19625C10__9S19625C118S19625C48S19625C2__8S19625C1[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__8S19625C48S19625C2__8S19625C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1472,-1012),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C48S19625C2__8S19625C1[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1488,-1020),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev)();
extern void ABISELECT(_ZThn2032_N8S19625C4D1Ev,_ZThn1404_N8S19625C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev)();
extern void ABISELECT(_ZThn2032_N8S19625C4D0Ev,_ZThn1404_N8S19625C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19625C10__8S19625C48S19625C2__8S19625C1[] = {
  ABISELECT(-2032,-1404),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2032,-1404),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev)();
extern void ABISELECT(_ZThn4400_N8S19625C4D1Ev,_ZThn3068_N8S19625C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev)();
extern void ABISELECT(_ZThn4400_N8S19625C4D0Ev,_ZThn3068_N8S19625C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S19625C48S19625C2__8S19625C1[] = {
  ABISELECT(-4400,-3068),
  ABISELECT(-4400,-3068),
  (VTBL_ENTRY)&(_ZTI8S19625C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev),
};
extern void ABISELECT(_ZThn128_N8S19625C2D1Ev,_ZThn84_N8S19625C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S19625C2D0Ev,_ZThn84_N8S19625C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19625C4__8S19625C2__8S19625C1[] = {
  ABISELECT(2032,1404),
  ABISELECT(1040,700),
  ABISELECT(1488,1020),
  ABISELECT(1472,1012),
  ABISELECT(4400,3068),
  ABISELECT(944,636),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19625C2D1Ev,_ZThn84_N8S19625C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19625C2D0Ev,_ZThn84_N8S19625C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__8S19625C2__8S19625C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(-1600,-1096),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C2__8S19625C1[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-1616,-1104),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S19625C2D1Ev,_ZTv0_n28_N8S19625C2D1Ev)();
extern void ABISELECT(_ZThn2160_N8S19625C2D1Ev,_ZThn1488_N8S19625C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19625C2D0Ev,_ZTv0_n28_N8S19625C2D0Ev)();
extern void ABISELECT(_ZThn2160_N8S19625C2D0Ev,_ZThn1488_N8S19625C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19625C10__8S19625C2__8S19625C1[] = {
  ABISELECT(-2160,-1488),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(-2160,-1488),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C2D1Ev,_ZTv0_n28_N8S19625C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19625C2D0Ev,_ZTv0_n28_N8S19625C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19625C2D1Ev,_ZTv0_n12_N8S19625C2D1Ev)();
extern void ABISELECT(_ZThn4528_N8S19625C2D1Ev,_ZThn3152_N8S19625C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19625C2D0Ev,_ZTv0_n12_N8S19625C2D0Ev)();
extern void ABISELECT(_ZThn4528_N8S19625C2D0Ev,_ZThn3152_N8S19625C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__A1__8S19625C2__8S19625C1[] = {
  ABISELECT(-4528,-3152),
  ABISELECT(-4528,-3152),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C2D1Ev,_ZTv0_n12_N8S19625C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19625C2D0Ev,_ZTv0_n12_N8S19625C2D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S19625C2D1Ev,_ZTv0_n36_N8S19625C2D1Ev)();
extern void ABISELECT(_ZThn4656_N8S19625C2D1Ev,_ZThn3236_N8S19625C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19625C2D0Ev,_ZTv0_n36_N8S19625C2D0Ev)();
extern void ABISELECT(_ZThn4656_N8S19625C2D0Ev,_ZThn3236_N8S19625C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19625C11__A1__8S19625C2__8S19625C1[] = {
  ABISELECT(-4656,-3236),
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  ABISELECT(-4656,-3236),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19625C2D1Ev,_ZTv0_n36_N8S19625C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19625C2D0Ev,_ZTv0_n36_N8S19625C2D0Ev),
};
extern void _ZN9S19625C122v3Ev();
extern void _ZN9S19625C122v4Ev();
extern void _ZN9S19625C122v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C12__8S19625C2__8S19625C1[] = {
  0,
  0,
  0,
  ABISELECT(-5296,-3680),
  (VTBL_ENTRY)&(_ZTI8S19625C2[0]),
  (VTBL_ENTRY)&_ZN9S19625C122v3Ev,
  (VTBL_ENTRY)&_ZN9S19625C122v4Ev,
  (VTBL_ENTRY)&_ZN9S19625C122v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__8S19625C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C7__8S19625C1[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19625C7[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__8S19625C1[] = {
  ABISELECT(-544,-384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void _ZN9S19625C10D1Ev();
extern void _ZN9S19625C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C10__8S19625C1[] = {
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C10D0Ev,
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C89S19625C10__A1__8S19625C1[] = {
  ABISELECT(-1088,-768),
  0,
  (VTBL_ENTRY)&(_ZTI8S19625C8[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19625C10D1Ev,_ZThn1664_N9S19625C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19625C10D0Ev,_ZThn1664_N9S19625C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C10__8S19625C1[] = {
  ABISELECT(-2368,-1664),
  ABISELECT(-2368,-1664),
  (VTBL_ENTRY)&(_ZTI9S19625C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev),
};
extern void _ZN9S19625C11D1Ev();
extern void _ZN9S19625C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19625C11__A1__8S19625C1[] = {
  ABISELECT(-2496,-1748),
  ABISELECT(-3488,-2452),
  ABISELECT(-3040,-2132),
  ABISELECT(-3056,-2140),
  ABISELECT(-128,-84),
  ABISELECT(-3584,-2516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN9S19625C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19625C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__9S19625C11__A1__8S19625C1[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19625C7__9S19625C11__A1__8S19625C1[] = {
  ABISELECT(-432,-312),
  ABISELECT(16,8),
  ABISELECT(-528,-376),
  ABISELECT(3056,2140),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
};
extern void _ZN8S19625C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19625C8__9S19625C11__A1__8S19625C1[] = {
  0,
  ABISELECT(-544,-384),
  ABISELECT(3040,2132),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
};
extern void _ZN8S19625C82v2Ev();
extern void ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19625C10__9S19625C11__A1__8S19625C1[] = {
  ABISELECT(2496,1748),
  0,
  ABISELECT(2368,1664),
  ABISELECT(-992,-704),
  ABISELECT(-1088,-768),
  ABISELECT(2496,1748),
  (VTBL_ENTRY)&(_ZTI9S19625C11[0]),
  (VTBL_ENTRY)&_ZN8S19625C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev),
};
static  VTT_ENTRY vtt_S19625C1[] = {
  {&(_ZTV8S19625C1[11]),  11,85},
  {&(_tg__ZTV9S19625C14__8S19625C1[5]),  5,5},
  {&(_tg__ZTV8S19625C8__9S19625C14__8S19625C1[4]),  4,5},
  {&(_ZTV8S19625C1[27]),  27,85},
  {&(_ZTV8S19625C1[39]),  39,85},
  {&(_ZTV8S19625C1[46]),  46,85},
  {&(_ZTV8S19625C1[50]),  50,85},
  {&(_ZTV8S19625C1[58]),  58,85},
  {&(_ZTV8S19625C1[64]),  64,85},
  {&(_ZTV8S19625C1[75]),  75,85},
  {&(_ZTV8S19625C1[82]),  82,85},
  {&(_tg__ZTV8S19625C2__8S19625C1[10]),  10,14},
  {&(_tg__ZTV8S19625C48S19625C2__8S19625C1[8]),  8,10},
  {&(_tg__ZTV9S19625C118S19625C48S19625C2__8S19625C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19625C118S19625C48S19625C2__8S19625C1[3]),  3,5},
  {&(_tg__ZTV8S19625C7__9S19625C118S19625C48S19625C2__8S19625C1[5]),  5,5},
  {&(_tg__ZTV8S19625C8__9S19625C118S19625C48S19625C2__8S19625C1[4]),  4,5},
  {&(_tg__ZTV9S19625C10__9S19625C118S19625C48S19625C2__8S19625C1[7]),  7,10},
  {&(_tg__ZTV8S19625C7__8S19625C48S19625C2__8S19625C1[5]),  5,5},
  {&(_tg__ZTV8S19625C8__8S19625C48S19625C2__8S19625C1[4]),  4,5},
  {&(_tg__ZTV9S19625C10__8S19625C48S19625C2__8S19625C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__8S19625C48S19625C2__8S19625C1[3]),  3,5},
  {&(_tg__ZTV8S19625C4__8S19625C2__8S19625C1[8]),  8,10},
  {&(_tg__ZTV8S19625C7__8S19625C2__8S19625C1[5]),  5,5},
  {&(_tg__ZTV8S19625C8__8S19625C2__8S19625C1[4]),  4,5},
  {&(_tg__ZTV9S19625C10__8S19625C2__8S19625C1[7]),  7,10},
  {&(_tg__ZTV9S20507C11__A1__8S19625C2__8S19625C1[3]),  3,5},
  {&(_tg__ZTV9S19625C11__A1__8S19625C2__8S19625C1[9]),  9,11},
  {&(_tg__ZTV9S19625C12__8S19625C2__8S19625C1[5]),  5,8},
  {&(_tg__ZTV8S19625C7__8S19625C1[5]),  5,5},
  {&(_tg__ZTV8S19625C8__8S19625C7__8S19625C1[4]),  4,5},
  {&(_tg__ZTV8S19625C8__8S19625C1[3]),  3,4},
  {&(_tg__ZTV9S19625C10__8S19625C1[5]),  5,8},
  {&(_tg__ZTV8S19625C89S19625C10__A1__8S19625C1[3]),  3,4},
  {&(_tg__ZTV9S20507C11__9S19625C10__8S19625C1[3]),  3,5},
  {&(_tg__ZTV9S19625C11__A1__8S19625C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__9S19625C11__A1__8S19625C1[3]),  3,5},
  {&(_tg__ZTV8S19625C7__9S19625C11__A1__8S19625C1[5]),  5,5},
  {&(_tg__ZTV8S19625C8__9S19625C11__A1__8S19625C1[4]),  4,5},
  {&(_tg__ZTV9S19625C10__9S19625C11__A1__8S19625C1[7]),  7,10},
};
extern VTBL_ENTRY _ZTI8S19625C1[];
extern  VTBL_ENTRY _ZTV8S19625C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19625C1[];
static VTBL_ENTRY alt_thunk_names110[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C10D0Ev,_ZTv0_n12_N9S19625C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19625C10D0Ev,_ZThn1664_N9S19625C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C10D1Ev,_ZTv0_n12_N9S19625C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19625C10D1Ev,_ZThn1664_N9S19625C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19625C2D0Ev,_ZTv0_n36_N8S19625C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19625C2D0Ev,_ZThn3236_N8S19625C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19625C2D1Ev,_ZTv0_n36_N8S19625C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19625C2D1Ev,_ZThn3236_N8S19625C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C2D0Ev,_ZTv0_n12_N8S19625C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N8S19625C2D0Ev,_ZThn3152_N8S19625C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C2D1Ev,_ZTv0_n12_N8S19625C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4528_N8S19625C2D1Ev,_ZThn3152_N8S19625C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C2D0Ev,_ZTv0_n28_N8S19625C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S19625C2D0Ev,_ZThn1488_N8S19625C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C2D1Ev,_ZTv0_n28_N8S19625C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S19625C2D1Ev,_ZThn1488_N8S19625C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C4D0Ev,_ZTv0_n12_N8S19625C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S19625C4D0Ev,_ZThn3068_N8S19625C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C4D1Ev,_ZTv0_n12_N8S19625C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N8S19625C4D1Ev,_ZThn3068_N8S19625C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C4D0Ev,_ZTv0_n28_N8S19625C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S19625C4D0Ev,_ZThn1404_N8S19625C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C4D1Ev,_ZTv0_n28_N8S19625C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S19625C4D1Ev,_ZThn1404_N8S19625C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19625C11D0Ev,_ZTv0_n28_N9S19625C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S19625C11D0Ev,_ZThn1404_N9S19625C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19625C11D1Ev,_ZTv0_n28_N9S19625C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N9S19625C11D1Ev,_ZThn1404_N9S19625C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C11D0Ev,_ZTv0_n12_N9S19625C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S19625C11D0Ev,_ZThn3068_N9S19625C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19625C11D1Ev,_ZTv0_n12_N9S19625C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4400_N9S19625C11D1Ev,_ZThn3068_N9S19625C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19625C1D0Ev,_ZTv0_n36_N8S19625C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17136_N8S19625C1D0Ev,_ZThn11940_N8S19625C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19625C1D1Ev,_ZTv0_n36_N8S19625C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17136_N8S19625C1D1Ev,_ZThn11940_N8S19625C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C1D0Ev,_ZTv0_n12_N8S19625C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17008_N8S19625C1D0Ev,_ZThn11856_N8S19625C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19625C1D1Ev,_ZTv0_n12_N8S19625C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17008_N8S19625C1D1Ev,_ZThn11856_N8S19625C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C1D0Ev,_ZTv0_n28_N8S19625C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14640_N8S19625C1D0Ev,_ZThn10192_N8S19625C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19625C1D1Ev,_ZTv0_n28_N8S19625C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14640_N8S19625C1D1Ev,_ZThn10192_N8S19625C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19625C1D0Ev,_ZTv0_n44_N8S19625C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12480_N8S19625C1D0Ev,_ZThn8704_N8S19625C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19625C1D1Ev,_ZTv0_n44_N8S19625C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12480_N8S19625C1D1Ev,_ZThn8704_N8S19625C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19625C1 = {  "S19625C1", // class name
  bases_S19625C1, 21,
  &(vtc_S19625C1[0]), // expected_vtbl_contents
  &(vtt_S19625C1[0]), // expected_vtt_contents
  ABISELECT(24784,17296), // object size
  NSPAIRA(_ZTI8S19625C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19625C1),85, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19625C1),40, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names110,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7404C5  : S20507C6 {
  int s7404c5f0;
  long double s7404c5f1;
  int s7404c5f2;
  ::S20507C6 s7404c5f3;
  ::S20507C6 s7404c5f4;
  int s7404c5f5;
  long double s7404c5f6[8];
};
//SIG(-1 S7404C5) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S7404C5()
{
  extern Class_Descriptor cd_S7404C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S7404C5, buf);
    S7404C5 &lv = *(new (buf) S7404C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S7404C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C5)");
    check_base_class_offset(lv, (S20507C6*), 0, "S7404C5");
    check_field_offset(lv, s7404c5f0, ABISELECT(88,64), "S7404C5.s7404c5f0");
    check_field_offset(lv, s7404c5f1, ABISELECT(96,68), "S7404C5.s7404c5f1");
    check_field_offset(lv, s7404c5f2, ABISELECT(112,80), "S7404C5.s7404c5f2");
    check_field_offset(lv, s7404c5f3, ABISELECT(120,84), "S7404C5.s7404c5f3");
    check_field_offset(lv, s7404c5f4, ABISELECT(208,148), "S7404C5.s7404c5f4");
    check_field_offset(lv, s7404c5f5, ABISELECT(296,212), "S7404C5.s7404c5f5");
    check_field_offset(lv, s7404c5f6, ABISELECT(304,216), "S7404C5.s7404c5f6");
    test_class_info(&lv, &cd_S7404C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C5(Test_S7404C5, "S7404C5", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S7404C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7404C5[];
Class_Descriptor cd_S7404C5 = {  "S7404C5", // class name
  bases_S7404C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI7S7404C5),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  S7404C6  : S7404C5 , virtual S20507C6 {
  long double s7404c6f0[2];
  int s7404c6f1[2];
  long double s7404c6f2[3];
  virtual void  v4(); // _ZN7S7404C62v4Ev
  ~S7404C6(); // tgen
  S7404C6(); // tgen
};
//SIG(-1 S7404C6) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S7404C6()
{
  extern Class_Descriptor cd_S7404C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S7404C6, buf);
    S7404C6 *dp, &lv = *(dp=new (buf) S7404C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S7404C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C6)");
    check_base_class_offset(lv, (S20507C6*)(S7404C5*), ABISELECT(16,4), "S7404C6");
    check_base_class_offset(lv, (S7404C5*), ABISELECT(16,4), "S7404C6");
    /*is_ambiguous_... S7404C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S7404C6");
    check_field_offset(lv, s7404c6f0, ABISELECT(448,316), "S7404C6.s7404c6f0");
    check_field_offset(lv, s7404c6f1, ABISELECT(480,340), "S7404C6.s7404c6f1");
    check_field_offset(lv, s7404c6f2, ABISELECT(496,348), "S7404C6.s7404c6f2");
    test_class_info(&lv, &cd_S7404C6);
    dp->~S7404C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C6(Test_S7404C6, "S7404C6", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN7S7404C6C1Ev();
extern void _ZN7S7404C6D1Ev();
Name_Map name_map_S7404C6[] = {
  NSPAIR(_ZN7S7404C6C1Ev),
  NSPAIR(_ZN7S7404C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S7404C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7404C5,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7404C6[];
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY vtc_S7404C6[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C6[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern VTBL_ENTRY _ZTV7S7404C6[];
static  VTT_ENTRY vtt_S7404C6[] = {
  {&(_ZTV7S7404C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7404C6[];
extern  VTBL_ENTRY _ZTV7S7404C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C6[];
Class_Descriptor cd_S7404C6 = {  "S7404C6", // class name
  bases_S7404C6, 3,
  &(vtc_S7404C6[0]), // expected_vtbl_contents
  &(vtt_S7404C6[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI7S7404C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7404C6),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7404C6),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  S7404C4  : S20507C6 , virtual S7404C5 , virtual S7404C6 {
  long double s7404c4f0;
  ~S7404C4(); // tgen
  S7404C4(); // tgen
};
//SIG(-1 S7404C4) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} FD}


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

static void Test_S7404C4()
{
  extern Class_Descriptor cd_S7404C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,211)];
    init_test(&cd_S7404C4, buf);
    S7404C4 *dp, &lv = *(dp=new (buf) S7404C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,840), "sizeof(S7404C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C4)");
    /*is_ambiguous_... S7404C4::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(8,4), "S7404C4");
    /*is_ambiguous_... S7404C4::S7404C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C5*), ABISELECT(112,80), "S7404C4");
    /*is_ambiguous_... S7404C4::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*), ABISELECT(112,80), "S7404C4");
    check_base_class_offset(lv, (S20507C6*)(S7404C5*)(S7404C6*), ABISELECT(560,396), "S7404C4");
    check_base_class_offset(lv, (S7404C5*)(S7404C6*), ABISELECT(560,396), "S7404C4");
    /*is_ambiguous_... S7404C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C6*), ABISELECT(1088,776), "S7404C4");
    check_base_class_offset(lv, (S7404C6*), ABISELECT(544,392), "S7404C4");
    check_field_offset(lv, s7404c4f0, ABISELECT(96,68), "S7404C4.s7404c4f0");
    test_class_info(&lv, &cd_S7404C4);
    dp->~S7404C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C4(Test_S7404C4, "S7404C4", ABISELECT(1184,840));

#else // __cplusplus

extern void _ZN7S7404C4C1Ev();
extern void _ZN7S7404C4D1Ev();
Name_Map name_map_S7404C4[] = {
  NSPAIR(_ZN7S7404C4C1Ev),
  NSPAIR(_ZN7S7404C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C6;
extern VTBL_ENTRY _ZTI7S7404C6[];
extern  VTBL_ENTRY _ZTV7S7404C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C6[];
static Base_Class bases_S7404C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7404C5,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(560,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
    4, //immediately_derived
  0, 0},
  {&cd_S7404C5,    ABISELECT(560,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
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(1088,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C6,    ABISELECT(544,392), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S7404C4[];
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY vtc_S7404C4[] = {
  ABISELECT(1088,776),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
  0,
  ABISELECT(544,384),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern VTBL_ENTRY _ZTV7S7404C4[];
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C4[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C6[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTT_ENTRY vtt_S7404C4[] = {
  {&(_ZTV7S7404C4[5]),  5,10},
  {&(_ZTV7S7404C4[9]),  9,10},
  {&(_tg__ZTV7S7404C6__7S7404C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7404C4[];
extern  VTBL_ENTRY _ZTV7S7404C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C4[];
Class_Descriptor cd_S7404C4 = {  "S7404C4", // class name
  bases_S7404C4, 7,
  &(vtc_S7404C4[0]), // expected_vtbl_contents
  &(vtt_S7404C4[0]), // expected_vtt_contents
  ABISELECT(1184,840), // object size
  NSPAIRA(_ZTI7S7404C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7404C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7404C4),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  S7404C7  : virtual S20507C11 , virtual S7404C5 , virtual S7404C6 , virtual S7404C4 {
  long double s7404c7f0[9];
  int s7404c7f1;
  ::S21199C11 s7404c7f2;
  int s7404c7f3;
  __tsi64 s7404c7f4;
  ::S20507C11 s7404c7f5;
  __tsi64 s7404c7f6;
  virtual  ~S7404C7(); // _ZN7S7404C7D2Ev
  S7404C7(); // tgen
};
//SIG(-1 S7404C7) C1{ VBC2{ vd m Fp FD[5] Fp FD} VBC3{ BC4{ m Fi[10] Fp[6]} Fi FD Fi FC4 FC4 Fi FD[8]} VBC5{ BC3 VBC4 v1 FD[2] Fi[2] FD[3]} VBC6{ BC4 VBC3 VBC5 FD} vd FD[9] Fi FC7{ VBC4 VBC2 VBC8{ VBC4 VBC9{ BC10{ BC4 Fi FD Fi FC4 FC4 Fi FD[8]} VBC4 v2 FD[2] Fi[2] FD[3]} VBC10 FC11{}} VBC12{ BC4 VBC10 VBC2 BC9 vd FC8 FC9} FC10 FC4 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC2 FL}


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

static void Test_S7404C7()
{
  extern Class_Descriptor cd_S7404C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(367,1027)];
    init_test(&cd_S7404C7, buf);
    S7404C7 *dp, &lv = *(dp=new (buf) S7404C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5856,4104), "sizeof(S7404C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C7)");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(4544,3180), "S7404C7");
    /*is_ambiguous_... S7404C7::S7404C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C5*), ABISELECT(4672,3264), "S7404C7");
    /*is_ambiguous_... S7404C7::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*), ABISELECT(4672,3264), "S7404C7");
    /*is_ambiguous_... S7404C4::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C4*), ABISELECT(4672,3264), "S7404C7");
    check_base_class_offset(lv, (S20507C6*)(S7404C5*)(S7404C6*), ABISELECT(5120,3580), "S7404C7");
    check_base_class_offset(lv, (S7404C5*)(S7404C6*), ABISELECT(5120,3580), "S7404C7");
    /*is_ambiguous_... S7404C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C6*), ABISELECT(5648,3960), "S7404C7");
    check_base_class_offset(lv, (S7404C6*), ABISELECT(5104,3576), "S7404C7");
    check_base_class_offset(lv, (S7404C6*)(S7404C4*), ABISELECT(5104,3576), "S7404C7");
    /*is_ambiguous_... S7404C4::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C4*), ABISELECT(5752,4028), "S7404C7");
    check_base_class_offset(lv, (S7404C4*), ABISELECT(5744,4024), "S7404C7");
    check_field_offset(lv, s7404c7f0, ABISELECT(16,4), "S7404C7.s7404c7f0");
    check_field_offset(lv, s7404c7f1, ABISELECT(160,112), "S7404C7.s7404c7f1");
    check_field_offset(lv, s7404c7f2, ABISELECT(176,116), "S7404C7.s7404c7f2");
    check_field_offset(lv, s7404c7f3, ABISELECT(4384,3076), "S7404C7.s7404c7f3");
    check_field_offset(lv, s7404c7f4, ABISELECT(4392,3080), "S7404C7.s7404c7f4");
    check_field_offset(lv, s7404c7f5, ABISELECT(4400,3088), "S7404C7.s7404c7f5");
    check_field_offset(lv, s7404c7f6, ABISELECT(4528,3172), "S7404C7.s7404c7f6");
    test_class_info(&lv, &cd_S7404C7);
    dp->~S7404C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C7(Test_S7404C7, "S7404C7", ABISELECT(5856,4104));

#else // __cplusplus

extern void _ZN7S7404C7C1Ev();
extern void _ZN7S7404C7D2Ev();
Name_Map name_map_S7404C7[] = {
  NSPAIR(_ZN7S7404C7C1Ev),
  NSPAIR(_ZN7S7404C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C6;
extern VTBL_ENTRY _ZTI7S7404C6[];
extern  VTBL_ENTRY _ZTV7S7404C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C4;
extern VTBL_ENTRY _ZTI7S7404C4[];
extern  VTBL_ENTRY _ZTV7S7404C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C4[];
static Base_Class bases_S7404C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(4544,3180), //bcp->offset
    9, //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_S20507C6,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7404C5,    ABISELECT(4672,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7404C5,    ABISELECT(5120,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(5648,3960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C6,    ABISELECT(5104,3576), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    ABISELECT(5752,4028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C4,    ABISELECT(5744,4024), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7404C7[];
extern void _ZN7S7404C7D1Ev();
extern void _ZN7S7404C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev)();
extern void ABISELECT(_ZThn4544_N7S7404C7D1Ev,_ZThn3180_N7S7404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev)();
extern void ABISELECT(_ZThn4544_N7S7404C7D0Ev,_ZThn3180_N7S7404C7D0Ev)() __attribute__((weak));
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY vtc_S7404C7[] = {
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C7D0Ev,
  ABISELECT(-4544,-3180),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev),
  0,
  ABISELECT(544,384),
  ABISELECT(-5104,-3576),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-5744,-4024),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
};
extern VTBL_ENTRY _ZTV7S7404C7[];
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C7[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C6[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C7[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C4__7S7404C7[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTT_ENTRY vtt_S7404C7[] = {
  {&(_ZTV7S7404C7[7]),  7,24},
  {&(_ZTV7S7404C7[12]),  12,24},
  {&(_ZTV7S7404C7[18]),  18,24},
  {&(_ZTV7S7404C7[24]),  24,24},
  {&(_tg__ZTV7S7404C6__7S7404C7[3]),  3,4},
  {&(_tg__ZTV7S7404C4__7S7404C7[5]),  5,5},
  {&(_tg__ZTV7S7404C6__7S7404C4__7S7404C7[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7404C7[];
extern  VTBL_ENTRY _ZTV7S7404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C7[];
static VTBL_ENTRY alt_thunk_names111[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S7404C7D0Ev,_ZThn3180_N7S7404C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S7404C7D1Ev,_ZThn3180_N7S7404C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7404C7 = {  "S7404C7", // class name
  bases_S7404C7, 9,
  &(vtc_S7404C7[0]), // expected_vtbl_contents
  &(vtt_S7404C7[0]), // expected_vtt_contents
  ABISELECT(5856,4104), // object size
  NSPAIRA(_ZTI7S7404C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7404C7),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7404C7),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names111,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7404C10  : virtual S20507C6 , virtual S7404C6 , virtual S7404C5 {
  ::S468C20_nt s7404c10f0;
  ~S7404C10(); // tgen
  S7404C10(); // tgen
};
//SIG(-1 S7404C10) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S7404C10()
{
  extern Class_Descriptor cd_S7404C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S7404C10, buf);
    S7404C10 *dp, &lv = *(dp=new (buf) S7404C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S7404C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C10)");
    /*is_ambiguous_... S7404C10::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S7404C10");
    /*is_ambiguous_... S7404C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C6*), ABISELECT(16,8), "S7404C10");
    check_base_class_offset(lv, (S20507C6*)(S7404C5*)(S7404C6*), ABISELECT(128,76), "S7404C10");
    check_base_class_offset(lv, (S7404C5*)(S7404C6*), ABISELECT(128,76), "S7404C10");
    check_base_class_offset(lv, (S7404C6*), ABISELECT(112,72), "S7404C10");
    /*is_ambiguous_... S7404C10::S7404C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C5*), ABISELECT(656,456), "S7404C10");
    /*is_ambiguous_... S7404C10::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*), ABISELECT(656,456), "S7404C10");
    check_field_offset(lv, s7404c10f0, ABISELECT(8,4), "S7404C10.s7404c10f0");
    test_class_info(&lv, &cd_S7404C10);
    dp->~S7404C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C10(Test_S7404C10, "S7404C10", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S7404C10C1Ev();
extern void _ZN8S7404C10D1Ev();
Name_Map name_map_S7404C10[] = {
  NSPAIR(_ZN8S7404C10C1Ev),
  NSPAIR(_ZN8S7404C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S7404C6;
extern VTBL_ENTRY _ZTI7S7404C6[];
extern  VTBL_ENTRY _ZTV7S7404C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
static Base_Class bases_S7404C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7404C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7404C6,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C5,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S7404C10[];
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY vtc_S7404C10[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7404C10[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S7404C10[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern VTBL_ENTRY _ZTV8S7404C10[];
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__8S7404C10[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C6[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTT_ENTRY vtt_S7404C10[] = {
  {&(_ZTV8S7404C10[5]),  5,10},
  {&(_ZTV8S7404C10[9]),  9,10},
  {&(_tg__ZTV7S7404C6__8S7404C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7404C10[];
extern  VTBL_ENTRY _ZTV8S7404C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7404C10[];
Class_Descriptor cd_S7404C10 = {  "S7404C10", // class name
  bases_S7404C10, 6,
  &(vtc_S7404C10[0]), // expected_vtbl_contents
  &(vtt_S7404C10[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S7404C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7404C10),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7404C10),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  S7404C12  : S20507C6 , virtual S7404C5 , virtual S20507C11 , S7404C6 {
  ::S7404C10 s7404c12f0;
  ::S7404C6 s7404c12f1;
  virtual  ~S7404C12(); // _ZN8S7404C12D2Ev
  S7404C12(); // tgen
};
//SIG(-1 S7404C12) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ vd m Fp FD[5] Fp FD} BC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} vd FC6{ VBC2 VBC5 VBC3 FC7{}} FC5}


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

static void Test_S7404C12()
{
  extern Class_Descriptor cd_S7404C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(190,532)];
    init_test(&cd_S7404C12, buf);
    S7404C12 *dp, &lv = *(dp=new (buf) S7404C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3024,2124), "sizeof(S7404C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C12)");
    /*is_ambiguous_... S7404C12::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S7404C12");
    /*is_ambiguous_... S7404C12::S7404C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C5*), ABISELECT(2368,1664), "S7404C12");
    /*is_ambiguous_... S7404C12::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*), ABISELECT(2368,1664), "S7404C12");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2800,1976), "S7404C12");
    check_base_class_offset(lv, (S20507C6*)(S7404C5*)(S7404C6*), ABISELECT(16,4), "S7404C12");
    check_base_class_offset(lv, (S7404C5*)(S7404C6*), ABISELECT(16,4), "S7404C12");
    /*is_ambiguous_... S7404C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C6*), ABISELECT(2928,2060), "S7404C12");
    check_base_class_offset(lv, (S7404C6*), 0, "S7404C12");
    check_field_offset(lv, s7404c12f0, ABISELECT(640,448), "S7404C12.s7404c12f0");
    check_field_offset(lv, s7404c12f1, ABISELECT(1728,1216), "S7404C12.s7404c12f1");
    test_class_info(&lv, &cd_S7404C12);
    dp->~S7404C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C12(Test_S7404C12, "S7404C12", ABISELECT(3024,2124));

#else // __cplusplus

extern void _ZN8S7404C12C1Ev();
extern void _ZN8S7404C12D2Ev();
Name_Map name_map_S7404C12[] = {
  NSPAIR(_ZN8S7404C12C1Ev),
  NSPAIR(_ZN8S7404C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C6;
extern VTBL_ENTRY _ZTI7S7404C6[];
extern  VTBL_ENTRY _ZTV7S7404C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C6[];
static Base_Class bases_S7404C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7404C5,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C11,    ABISELECT(2800,1976), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    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_S7404C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(2928,2060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C6,    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 _ZTI8S7404C12[];
extern void _ZN7S7404C62v4Ev();
extern void _ZN8S7404C12D1Ev();
extern void _ZN8S7404C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7404C12D1Ev,_ZTv0_n12_N8S7404C12D1Ev)();
extern void ABISELECT(_ZThn2800_N8S7404C12D1Ev,_ZThn1976_N8S7404C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7404C12D0Ev,_ZTv0_n12_N8S7404C12D0Ev)();
extern void ABISELECT(_ZThn2800_N8S7404C12D0Ev,_ZThn1976_N8S7404C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7404C12[] = {
  ABISELECT(2800,1976),
  ABISELECT(2368,1664),
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S7404C12[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
  (VTBL_ENTRY)&_ZN8S7404C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7404C12D0Ev,
  ABISELECT(-2800,-1976),
  ABISELECT(-2800,-1976),
  (VTBL_ENTRY)&(_ZTI8S7404C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7404C12D1Ev,_ZTv0_n12_N8S7404C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7404C12D0Ev,_ZTv0_n12_N8S7404C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7404C12[];
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__8S7404C12[] = {
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C6[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTT_ENTRY vtt_S7404C12[] = {
  {&(_ZTV8S7404C12[5]),  5,13},
  {&(_tg__ZTV7S7404C6__8S7404C12[3]),  3,4},
  {&(_ZTV8S7404C12[11]),  11,13},
};
extern VTBL_ENTRY _ZTI8S7404C12[];
extern  VTBL_ENTRY _ZTV8S7404C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7404C12[];
static VTBL_ENTRY alt_thunk_names112[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7404C12D0Ev,_ZTv0_n12_N8S7404C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N8S7404C12D0Ev,_ZThn1976_N8S7404C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7404C12D1Ev,_ZTv0_n12_N8S7404C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N8S7404C12D1Ev,_ZThn1976_N8S7404C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7404C12 = {  "S7404C12", // class name
  bases_S7404C12, 8,
  &(vtc_S7404C12[0]), // expected_vtbl_contents
  &(vtt_S7404C12[0]), // expected_vtt_contents
  ABISELECT(3024,2124), // object size
  NSPAIRA(_ZTI8S7404C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7404C12),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7404C12),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names112,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7404C2  : virtual S20507C6 , virtual S7404C4 , S7404C7 {
  void *s7404c2f0;
  ::S7404C12 s7404c2f1;
  virtual  ~S7404C2(); // _ZN7S7404C2D2Ev
  S7404C2(); // tgen
};
//SIG(-1 S7404C2) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC2 VBC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC5{ BC4 VBC2 v1 FD[2] Fi[2] FD[3]} FD} BC6{ VBC7{ vd m Fp FD[5] Fp FD} VBC4 VBC5 VBC3 vd FD[9] Fi FC8{ VBC2 VBC7 VBC9{ VBC2 VBC10{ BC11{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v2 FD[2] Fi[2] FD[3]} VBC11 FC12{}} VBC13{ BC2 VBC11 VBC7 BC10 vd FC9 FC10} FC11 FC2 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC7 FL} vd Fp FC14{ BC2 VBC4 VBC7 BC5 vd FC15{ VBC2 VBC5 VBC4 FC12} FC5}}


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

static void Test_S7404C2()
{
  extern Class_Descriptor cd_S7404C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(556,1559)];
    init_test(&cd_S7404C2, buf);
    S7404C2 *dp, &lv = *(dp=new (buf) S7404C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8880,6232), "sizeof(S7404C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C2)");
    /*is_ambiguous_... S7404C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(7568,5308), "S7404C2");
    /*is_ambiguous_... S7404C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C6*), ABISELECT(7568,5308), "S7404C2");
    /*is_ambiguous_... S7404C4::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C4*), ABISELECT(7672,5376), "S7404C2");
    /*is_ambiguous_... S7404C2::S7404C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C5*), ABISELECT(7776,5452), "S7404C2");
    /*is_ambiguous_... S7404C4::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C4*), ABISELECT(7776,5452), "S7404C2");
    /*is_ambiguous_... S7404C7::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C7*), ABISELECT(7776,5452), "S7404C2");
    check_base_class_offset(lv, (S20507C6*)(S7404C5*)(S7404C6*), ABISELECT(8224,5768), "S7404C2");
    check_base_class_offset(lv, (S7404C5*)(S7404C6*), ABISELECT(8224,5768), "S7404C2");
    check_base_class_offset(lv, (S7404C6*)(S7404C4*), ABISELECT(8208,5764), "S7404C2");
    check_base_class_offset(lv, (S7404C6*)(S7404C7*), ABISELECT(8208,5764), "S7404C2");
    check_base_class_offset(lv, (S7404C4*), ABISELECT(7664,5372), "S7404C2");
    check_base_class_offset(lv, (S7404C4*)(S7404C7*), ABISELECT(7664,5372), "S7404C2");
    check_base_class_offset(lv, (S20507C11*)(S7404C7*), ABISELECT(8752,6148), "S7404C2");
    check_base_class_offset(lv, (S7404C7*), 0, "S7404C2");
    check_field_offset(lv, s7404c2f0, ABISELECT(4536,3180), "S7404C2.s7404c2f0");
    check_field_offset(lv, s7404c2f1, ABISELECT(4544,3184), "S7404C2.s7404c2f1");
    test_class_info(&lv, &cd_S7404C2);
    dp->~S7404C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C2(Test_S7404C2, "S7404C2", ABISELECT(8880,6232));

#else // __cplusplus

extern void _ZN7S7404C2C1Ev();
extern void _ZN7S7404C2D2Ev();
Name_Map name_map_S7404C2[] = {
  NSPAIR(_ZN7S7404C2C1Ev),
  NSPAIR(_ZN7S7404C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S7404C6;
extern VTBL_ENTRY _ZTI7S7404C6[];
extern  VTBL_ENTRY _ZTV7S7404C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C6[];
extern Class_Descriptor cd_S7404C4;
extern VTBL_ENTRY _ZTI7S7404C4[];
extern  VTBL_ENTRY _ZTV7S7404C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S7404C7;
extern VTBL_ENTRY _ZTI7S7404C7[];
extern  VTBL_ENTRY _ZTV7S7404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C7[];
static Base_Class bases_S7404C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(7568,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    ABISELECT(7672,5376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C5,    ABISELECT(7776,5452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C5,    ABISELECT(8224,5768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C6,    ABISELECT(8208,5764), //bcp->offset
    14, //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
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7404C4,    ABISELECT(7664,5372), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C11,    ABISELECT(8752,6148), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7404C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7404C2[];
extern void _ZN7S7404C2D1Ev();
extern void _ZN7S7404C2D0Ev();
extern void _ZN7S7404C62v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev)();
extern void ABISELECT(_ZThn8752_N7S7404C2D1Ev,_ZThn6148_N7S7404C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev)();
extern void ABISELECT(_ZThn8752_N7S7404C2D0Ev,_ZThn6148_N7S7404C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7404C2[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&_ZN7S7404C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C2D0Ev,
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7404C2[];
extern void _ZN7S7404C7D1Ev();
extern void _ZN7S7404C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C7__7S7404C2[] = {
  ABISELECT(7664,5372),
  ABISELECT(7568,5308),
  ABISELECT(8208,5764),
  ABISELECT(7776,5452),
  ABISELECT(8752,6148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev)();
extern void ABISELECT(_ZThn8752_N7S7404C7D1Ev,_ZThn6148_N7S7404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev)();
extern void ABISELECT(_ZThn8752_N7S7404C7D0Ev,_ZThn6148_N7S7404C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C7__7S7404C2[] = {
  ABISELECT(-8752,-6148),
  ABISELECT(-8752,-6148),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C7__7S7404C2[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-8208,-5764),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C7__7S7404C2[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-7664,-5372),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C2[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C4__7S7404C2[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C2[] = {
  ABISELECT(-640,-456),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C6[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTT_ENTRY vtt_S7404C2[] = {
  {&(_ZTV7S7404C2[7]),  7,24},
  {&(_tg__ZTV7S7404C7__7S7404C2[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S7404C7__7S7404C2[3]),  3,5},
  {&(_tg__ZTV7S7404C6__7S7404C7__7S7404C2[4]),  4,5},
  {&(_tg__ZTV7S7404C4__7S7404C7__7S7404C2[5]),  5,5},
  {&(_ZTV7S7404C2[14]),  14,24},
  {&(_ZTV7S7404C2[18]),  18,24},
  {&(_ZTV7S7404C2[22]),  22,24},
  {&(_tg__ZTV7S7404C4__7S7404C2[5]),  5,5},
  {&(_tg__ZTV7S7404C6__7S7404C4__7S7404C2[4]),  4,5},
  {&(_tg__ZTV7S7404C6__7S7404C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7404C2[];
extern  VTBL_ENTRY _ZTV7S7404C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C2[];
static VTBL_ENTRY alt_thunk_names113[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N7S7404C7D0Ev,_ZThn6148_N7S7404C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N7S7404C7D1Ev,_ZThn6148_N7S7404C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N7S7404C2D0Ev,_ZThn6148_N7S7404C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8752_N7S7404C2D1Ev,_ZThn6148_N7S7404C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7404C2 = {  "S7404C2", // class name
  bases_S7404C2, 10,
  &(vtc_S7404C2[0]), // expected_vtbl_contents
  &(vtt_S7404C2[0]), // expected_vtt_contents
  ABISELECT(8880,6232), // object size
  NSPAIRA(_ZTI7S7404C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7404C2),24, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7404C2),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names113,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7404C13  : virtual S7404C7 , S7404C2 {
  int s7404c13f0;
  __tsi64 s7404c13f1[2];
  ::S21199C11 s7404c13f2[9];
  char s7404c13f3;
  virtual void  v5(); // _ZN8S7404C132v5Ev
  ~S7404C13(); // tgen
  S7404C13(); // tgen
};
//SIG(-1 S7404C13) C1{ VBC2{ VBC3{ vd m Fp FD[5] Fp FD} VBC4{ BC5{ m Fi[10] Fp[6]} Fi FD Fi FC5 FC5 Fi FD[8]} VBC6{ BC4 VBC5 v2 FD[2] Fi[2] FD[3]} VBC7{ BC5 VBC4 VBC6 FD} vd FD[9] Fi FC8{ VBC5 VBC3 VBC9{ VBC5 VBC10{ BC11{ BC5 Fi FD Fi FC5 FC5 Fi FD[8]} VBC5 v3 FD[2] Fi[2] FD[3]} VBC11 FC12{}} VBC13{ BC5 VBC11 VBC3 BC10 vd FC9 FC10} FC11 FC5 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC3 FL} BC14{ VBC5 VBC7 BC2 vd Fp FC15{ BC5 VBC4 VBC3 BC6 vd FC16{ VBC5 VBC6 VBC4 FC12} FC6}} v1 Fi FL[2] FC8[9] Fc}


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

static void Test_S7404C13()
{
  extern Class_Descriptor cd_S7404C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3210,9020)];
    init_test(&cd_S7404C13, buf);
    S7404C13 *dp, &lv = *(dp=new (buf) S7404C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(51344,36076), "sizeof(S7404C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C13)");
    /*is_ambiguous_... S7404C13::S7404C7 */ AMB_check_base_class_offset(lv, (S20507C11*)(S7404C7*), ABISELECT(50032,35152), "S7404C13");
    check_base_class_offset(lv, (S20507C11*)(S7404C7*)(S7404C2*), ABISELECT(50032,35152), "S7404C13");
    /*is_ambiguous_... S7404C13::S7404C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C5*), ABISELECT(50160,35236), "S7404C13");
    /*is_ambiguous_... S7404C13::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C7*), ABISELECT(50160,35236), "S7404C13");
    /*is_ambiguous_... S7404C4::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C4*), ABISELECT(50160,35236), "S7404C13");
    /*is_ambiguous_... S7404C7::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C7*)(S7404C2*), ABISELECT(50160,35236), "S7404C13");
    check_base_class_offset(lv, (S20507C6*)(S7404C5*)(S7404C6*), ABISELECT(50608,35552), "S7404C13");
    check_base_class_offset(lv, (S7404C5*)(S7404C6*), ABISELECT(50608,35552), "S7404C13");
    /*is_ambiguous_... S7404C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C6*), ABISELECT(51136,35932), "S7404C13");
    /*is_ambiguous_... S7404C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C2*), ABISELECT(51136,35932), "S7404C13");
    /*is_ambiguous_... S7404C13::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C6*)(S7404C7*), ABISELECT(50592,35548), "S7404C13");
    check_base_class_offset(lv, (S7404C6*)(S7404C4*), ABISELECT(50592,35548), "S7404C13");
    check_base_class_offset(lv, (S7404C6*)(S7404C7*)(S7404C2*), ABISELECT(50592,35548), "S7404C13");
    /*is_ambiguous_... S7404C4::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C4*), ABISELECT(51240,36000), "S7404C13");
    /*is_ambiguous_... S7404C13::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C4*)(S7404C7*), ABISELECT(51232,35996), "S7404C13");
    check_base_class_offset(lv, (S7404C4*)(S7404C2*), ABISELECT(51232,35996), "S7404C13");
    check_base_class_offset(lv, (S7404C4*)(S7404C7*)(S7404C2*), ABISELECT(51232,35996), "S7404C13");
    /*is_ambiguous_... S7404C13::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C7*), ABISELECT(45488,31972), "S7404C13");
    check_base_class_offset(lv, (S7404C7*)(S7404C2*), 0, "S7404C13");
    check_base_class_offset(lv, (S7404C2*), 0, "S7404C13");
    check_field_offset(lv, s7404c13f0, ABISELECT(7568,5308), "S7404C13.s7404c13f0");
    check_field_offset(lv, s7404c13f1, ABISELECT(7576,5312), "S7404C13.s7404c13f1");
    check_field_offset(lv, s7404c13f2, ABISELECT(7600,5328), "S7404C13.s7404c13f2");
    check_field_offset(lv, s7404c13f3, ABISELECT(45472,31968), "S7404C13.s7404c13f3");
    test_class_info(&lv, &cd_S7404C13);
    dp->~S7404C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C13(Test_S7404C13, "S7404C13", ABISELECT(51344,36076));

#else // __cplusplus

extern void _ZN8S7404C13C1Ev();
extern void _ZN8S7404C13D1Ev();
Name_Map name_map_S7404C13[] = {
  NSPAIR(_ZN8S7404C13C1Ev),
  NSPAIR(_ZN8S7404C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C6;
extern VTBL_ENTRY _ZTI7S7404C6[];
extern  VTBL_ENTRY _ZTV7S7404C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C4;
extern VTBL_ENTRY _ZTI7S7404C4[];
extern  VTBL_ENTRY _ZTV7S7404C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C4[];
extern Class_Descriptor cd_S7404C7;
extern VTBL_ENTRY _ZTI7S7404C7[];
extern  VTBL_ENTRY _ZTV7S7404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C7[];
extern Class_Descriptor cd_S7404C7;
extern VTBL_ENTRY _ZTI7S7404C7[];
extern  VTBL_ENTRY _ZTV7S7404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C7[];
extern Class_Descriptor cd_S7404C2;
extern VTBL_ENTRY _ZTI7S7404C2[];
extern  VTBL_ENTRY _ZTV7S7404C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C2[];
static Base_Class bases_S7404C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C11,    ABISELECT(50032,35152), //bcp->offset
    21, //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
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(50160,35236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7404C5,    ABISELECT(50160,35236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(50608,35552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C5,    ABISELECT(50608,35552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(51136,35932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C6,    ABISELECT(50592,35548), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20507C6,    ABISELECT(51240,36000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C4,    ABISELECT(51232,35996), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7404C7,    ABISELECT(45488,31972), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7404C7,    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
    11, //immediately_derived
  0, 0},
  {&cd_S7404C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7404C13[];
extern void _ZN8S7404C13D1Ev();
extern void _ZN8S7404C13D0Ev();
extern void _ZN8S7404C132v5Ev();
extern void ABISELECT(_ZTv0_n64_N8S7404C13D1Ev,_ZTv0_n32_N8S7404C13D1Ev)();
extern void ABISELECT(_ZThn45488_N8S7404C13D1Ev,_ZThn31972_N8S7404C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7404C13D0Ev,_ZTv0_n32_N8S7404C13D0Ev)();
extern void ABISELECT(_ZThn45488_N8S7404C13D0Ev,_ZThn31972_N8S7404C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7404C13D1Ev,_ZTv0_n12_N8S7404C13D1Ev)();
extern void ABISELECT(_ZThn50032_N8S7404C13D1Ev,_ZThn35152_N8S7404C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7404C13D0Ev,_ZTv0_n12_N8S7404C13D0Ev)();
extern void ABISELECT(_ZThn50032_N8S7404C13D0Ev,_ZThn35152_N8S7404C13D0Ev)() __attribute__((weak));
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY vtc_S7404C13[] = {
  ABISELECT(45488,31972),
  ABISELECT(51232,35996),
  ABISELECT(51136,35932),
  ABISELECT(50592,35548),
  ABISELECT(50160,35236),
  ABISELECT(50032,35152),
  0,
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
  (VTBL_ENTRY)&_ZN8S7404C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7404C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7404C132v5Ev,
  ABISELECT(-45488,-31972),
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  ABISELECT(-45488,-31972),
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7404C13D1Ev,_ZTv0_n32_N8S7404C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7404C13D0Ev,_ZTv0_n32_N8S7404C13D0Ev),
  ABISELECT(-50032,-35152),
  ABISELECT(-50032,-35152),
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7404C13D1Ev,_ZTv0_n12_N8S7404C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7404C13D0Ev,_ZTv0_n12_N8S7404C13D0Ev),
  0,
  ABISELECT(544,384),
  ABISELECT(-50592,-35548),
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-51232,-35996),
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
};
extern VTBL_ENTRY _ZTV8S7404C13[];
extern void _ZN7S7404C2D1Ev();
extern void _ZN7S7404C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C2__8S7404C13[] = {
  ABISELECT(51232,35996),
  ABISELECT(51136,35932),
  ABISELECT(50592,35548),
  ABISELECT(50160,35236),
  ABISELECT(50032,35152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&_ZN7S7404C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C2D0Ev,
};
extern void _ZN7S7404C7D1Ev();
extern void _ZN7S7404C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C77S7404C2__A1__8S7404C13[] = {
  ABISELECT(51232,35996),
  ABISELECT(51136,35932),
  ABISELECT(50592,35548),
  ABISELECT(50160,35236),
  ABISELECT(50032,35152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev)();
extern void ABISELECT(_ZThn50032_N7S7404C7D1Ev,_ZThn35152_N7S7404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev)();
extern void ABISELECT(_ZThn50032_N7S7404C7D0Ev,_ZThn35152_N7S7404C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C77S7404C2__A1__8S7404C13[] = {
  ABISELECT(-50032,-35152),
  ABISELECT(-50032,-35152),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C77S7404C2__A1__8S7404C13[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-50592,-35548),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C77S7404C2__A1__8S7404C13[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-51232,-35996),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C2__8S7404C13[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-51232,-35996),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C2__8S7404C13[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-50592,-35548),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev)();
extern void ABISELECT(_ZThn50032_N7S7404C2D1Ev,_ZThn35152_N7S7404C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev)();
extern void ABISELECT(_ZThn50032_N7S7404C2D0Ev,_ZThn35152_N7S7404C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C2__8S7404C13[] = {
  ABISELECT(-50032,-35152),
  ABISELECT(-50032,-35152),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev),
};
extern void _ZN7S7404C7D1Ev();
extern void _ZN7S7404C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C7__8S7404C13[] = {
  ABISELECT(5744,4024),
  ABISELECT(5648,3960),
  ABISELECT(5104,3576),
  ABISELECT(4672,3264),
  ABISELECT(4544,3180),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev)();
extern void ABISELECT(_ZThn4544_N7S7404C7D1Ev,_ZThn3180_N7S7404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev)();
extern void ABISELECT(_ZThn4544_N7S7404C7D0Ev,_ZThn3180_N7S7404C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C7__8S7404C13[] = {
  ABISELECT(-4544,-3180),
  ABISELECT(-4544,-3180),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C7__8S7404C13[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(-5104,-3576),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C7__8S7404C13[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  ABISELECT(-5744,-4024),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__8S7404C13[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C6[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__8S7404C13[] = {
  ABISELECT(-96,-64),
  ABISELECT(-640,-448),
  ABISELECT(-1072,-760),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C4__8S7404C13[] = {
  0,
  ABISELECT(544,384),
  ABISELECT(640,448),
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTT_ENTRY vtt_S7404C13[] = {
  {&(_ZTV8S7404C13[8]),  8,36},
  {&(_tg__ZTV7S7404C2__8S7404C13[7]),  7,9},
  {&(_tg__ZTV7S7404C77S7404C2__A1__8S7404C13[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S7404C77S7404C2__A1__8S7404C13[3]),  3,5},
  {&(_tg__ZTV7S7404C6__7S7404C77S7404C2__A1__8S7404C13[4]),  4,5},
  {&(_tg__ZTV7S7404C4__7S7404C77S7404C2__A1__8S7404C13[5]),  5,5},
  {&(_tg__ZTV7S7404C4__7S7404C2__8S7404C13[5]),  5,5},
  {&(_tg__ZTV7S7404C6__7S7404C2__8S7404C13[4]),  4,5},
  {&(_tg__ZTV9S20507C11__7S7404C2__8S7404C13[3]),  3,5},
  {&(_ZTV8S7404C13[19]),  19,36},
  {&(_ZTV8S7404C13[24]),  24,36},
  {&(_ZTV8S7404C13[30]),  30,36},
  {&(_ZTV8S7404C13[36]),  36,36},
  {&(_tg__ZTV7S7404C7__8S7404C13[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S7404C7__8S7404C13[3]),  3,5},
  {&(_tg__ZTV7S7404C6__7S7404C7__8S7404C13[4]),  4,5},
  {&(_tg__ZTV7S7404C4__7S7404C7__8S7404C13[5]),  5,5},
  {&(_tg__ZTV7S7404C6__8S7404C13[3]),  3,4},
  {&(_tg__ZTV7S7404C4__8S7404C13[5]),  5,5},
  {&(_tg__ZTV7S7404C6__7S7404C4__8S7404C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S7404C13[];
extern  VTBL_ENTRY _ZTV8S7404C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7404C13[];
static VTBL_ENTRY alt_thunk_names114[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50032_N7S7404C2D0Ev,_ZThn35152_N7S7404C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50032_N7S7404C2D1Ev,_ZThn35152_N7S7404C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S7404C7D0Ev,_ZThn3180_N7S7404C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50032_N7S7404C7D0Ev,_ZThn35152_N7S7404C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S7404C7D1Ev,_ZThn3180_N7S7404C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50032_N7S7404C7D1Ev,_ZThn35152_N7S7404C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7404C13D0Ev,_ZTv0_n12_N8S7404C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50032_N8S7404C13D0Ev,_ZThn35152_N8S7404C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7404C13D1Ev,_ZTv0_n12_N8S7404C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50032_N8S7404C13D1Ev,_ZThn35152_N8S7404C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7404C13D0Ev,_ZTv0_n32_N8S7404C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn45488_N8S7404C13D0Ev,_ZThn31972_N8S7404C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7404C13D1Ev,_ZTv0_n32_N8S7404C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn45488_N8S7404C13D1Ev,_ZThn31972_N8S7404C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7404C13 = {  "S7404C13", // class name
  bases_S7404C13, 12,
  &(vtc_S7404C13[0]), // expected_vtbl_contents
  &(vtt_S7404C13[0]), // expected_vtt_contents
  ABISELECT(51344,36076), // object size
  NSPAIRA(_ZTI8S7404C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7404C13),36, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7404C13),20, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names114,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7404C1  : S7404C2 , S7404C7 , S7404C13 {
  int s7404c1f0;
  long double s7404c1f1[3];
  short s7404c1f2;
  long double s7404c1f3;
  short s7404c1f4:16;
  int s7404c1f5[2];
  virtual  ~S7404C1(); // _ZN7S7404C1D2Ev
  virtual void  v1(); // _ZN7S7404C12v1Ev
  virtual void  v2(); // _ZN7S7404C12v2Ev
  virtual void  v3(); // _ZN7S7404C12v3Ev
  S7404C1(); // tgen
};
//SIG(1 S7404C1) C1{ BC2{ VBC3{ m Fi[10] Fp[6]} VBC4{ BC3 VBC5{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC6{ BC5 VBC3 v4 FD[2] Fi[2] FD[3]} FD} BC7{ VBC8{ vd m Fp FD[5] Fp FD} VBC5 VBC6 VBC4 vd FD[9] Fi FC9{ VBC3 VBC8 VBC10{ VBC3 VBC11{ BC12{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v6 FD[2] Fi[2] FD[3]} VBC12 FC13{}} VBC14{ BC3 VBC12 VBC8 BC11 vd FC10 FC11} FC12 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC8 FL} vd Fp FC15{ BC3 VBC5 VBC8 BC6 vd FC16{ VBC3 VBC6 VBC5 FC13} FC6}} BC7 BC17{ VBC7 BC2 v5 Fi FL[2] FC9[9] Fc} vd v1 v2 v3 Fi FD[3] Fs FD Fs:16 Fi[2]}


 S7404C1 ::~S7404C1(){ note_dtor("S7404C1", this);}
void  S7404C1 ::v1(){vfunc_called(this, "_ZN7S7404C12v1Ev");}
void  S7404C1 ::v2(){vfunc_called(this, "_ZN7S7404C12v2Ev");}
void  S7404C1 ::v3(){vfunc_called(this, "_ZN7S7404C12v3Ev");}
S7404C1 ::S7404C1(){ note_ctor("S7404C1", this);} // tgen

static void Test_S7404C1()
{
  extern Class_Descriptor cd_S7404C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3973,11159)];
    init_test(&cd_S7404C1, buf);
    S7404C1 *dp, &lv = *(dp=new (buf) S7404C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(63552,44632), "sizeof(S7404C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7404C1)");
    /*is_ambiguous_... S7404C1::S7404C2 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C2*), ABISELECT(57696,40528), "S7404C1");
    /*is_ambiguous_... S7404C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C6*), ABISELECT(57696,40528), "S7404C1");
    /*is_ambiguous_... S7404C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C2*)(S7404C13*), ABISELECT(57696,40528), "S7404C1");
    /*is_ambiguous_... S7404C4::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C4*), ABISELECT(57800,40596), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C5 */ AMB_check_base_class_offset(lv, (S20507C6*)(S7404C5*), ABISELECT(57904,40672), "S7404C1");
    /*is_ambiguous_... S7404C4::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C4*), ABISELECT(57904,40672), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C2 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C7*)(S7404C2*), ABISELECT(57904,40672), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C7*), ABISELECT(57904,40672), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C7*), ABISELECT(57904,40672), "S7404C1");
    /*is_ambiguous_... S7404C7::S7404C5 */ AMB_check_base_class_offset(lv, (S7404C5*)(S7404C7*)(S7404C2*)(S7404C13*), ABISELECT(57904,40672), "S7404C1");
    check_base_class_offset(lv, (S20507C6*)(S7404C5*)(S7404C6*), ABISELECT(58352,40988), "S7404C1");
    check_base_class_offset(lv, (S7404C5*)(S7404C6*), ABISELECT(58352,40988), "S7404C1");
    check_base_class_offset(lv, (S7404C6*)(S7404C4*), ABISELECT(58336,40984), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C2 */ AMB_check_base_class_offset(lv, (S7404C6*)(S7404C7*)(S7404C2*), ABISELECT(58336,40984), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C6*)(S7404C7*), ABISELECT(58336,40984), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C6*)(S7404C7*), ABISELECT(58336,40984), "S7404C1");
    check_base_class_offset(lv, (S7404C6*)(S7404C7*)(S7404C2*)(S7404C13*), ABISELECT(58336,40984), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C2 */ AMB_check_base_class_offset(lv, (S7404C4*)(S7404C2*), ABISELECT(57792,40592), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C2 */ AMB_check_base_class_offset(lv, (S7404C4*)(S7404C7*)(S7404C2*), ABISELECT(57792,40592), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C4*)(S7404C7*), ABISELECT(57792,40592), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C4*)(S7404C7*), ABISELECT(57792,40592), "S7404C1");
    check_base_class_offset(lv, (S7404C4*)(S7404C2*)(S7404C13*), ABISELECT(57792,40592), "S7404C1");
    check_base_class_offset(lv, (S7404C4*)(S7404C7*)(S7404C2*)(S7404C13*), ABISELECT(57792,40592), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C2 */ AMB_check_base_class_offset(lv, (S20507C11*)(S7404C7*)(S7404C2*), ABISELECT(58880,41368), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S20507C11*)(S7404C7*), ABISELECT(58880,41368), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S20507C11*)(S7404C7*), ABISELECT(58880,41368), "S7404C1");
    check_base_class_offset(lv, (S20507C11*)(S7404C7*)(S7404C2*)(S7404C13*), ABISELECT(58880,41368), "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C2 */ AMB_check_base_class_offset(lv, (S7404C7*)(S7404C2*), 0, "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C2 */ AMB_check_base_class_offset(lv, (S7404C2*), 0, "S7404C1");
    /*is_ambiguous_... S7404C1::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C7*), ABISELECT(7568,5308), "S7404C1");
    /*is_ambiguous_... S7404C13::S7404C7 */ AMB_check_base_class_offset(lv, (S7404C7*)(S7404C13*), ABISELECT(59008,41452), "S7404C1");
    check_base_class_offset(lv, (S7404C7*)(S7404C2*)(S7404C13*), ABISELECT(12112,8488), "S7404C1");
    check_base_class_offset(lv, (S7404C2*)(S7404C13*), ABISELECT(12112,8488), "S7404C1");
    check_base_class_offset(lv, (S7404C13*), ABISELECT(12112,8488), "S7404C1");
    check_field_offset(lv, s7404c1f0, ABISELECT(57588,40460), "S7404C1.s7404c1f0");
    check_field_offset(lv, s7404c1f1, ABISELECT(57600,40464), "S7404C1.s7404c1f1");
    check_field_offset(lv, s7404c1f2, ABISELECT(57648,40500), "S7404C1.s7404c1f2");
    check_field_offset(lv, s7404c1f3, ABISELECT(57664,40504), "S7404C1.s7404c1f3");
    set_bf_and_test(lv, s7404c1f4, ABISELECT(57680,40516), 0, 16, 1, "S7404C1");
    set_bf_and_test(lv, s7404c1f4, ABISELECT(57680,40516), 0, 16, hide_sll(1LL<<15), "S7404C1");
    check_field_offset(lv, s7404c1f5, ABISELECT(57684,40520), "S7404C1.s7404c1f5");
    test_class_info(&lv, &cd_S7404C1);
    dp->~S7404C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7404C1(Test_S7404C1, "S7404C1", ABISELECT(63552,44632));

#else // __cplusplus

extern void _ZN7S7404C1C1Ev();
extern void _ZN7S7404C1D2Ev();
Name_Map name_map_S7404C1[] = {
  NSPAIR(_ZN7S7404C1C1Ev),
  NSPAIR(_ZN7S7404C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S7404C5;
extern VTBL_ENTRY _ZTI7S7404C5[];
extern Class_Descriptor cd_S7404C6;
extern VTBL_ENTRY _ZTI7S7404C6[];
extern  VTBL_ENTRY _ZTV7S7404C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C6[];
extern Class_Descriptor cd_S7404C4;
extern VTBL_ENTRY _ZTI7S7404C4[];
extern  VTBL_ENTRY _ZTV7S7404C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S7404C7;
extern VTBL_ENTRY _ZTI7S7404C7[];
extern  VTBL_ENTRY _ZTV7S7404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C7[];
extern Class_Descriptor cd_S7404C2;
extern VTBL_ENTRY _ZTI7S7404C2[];
extern  VTBL_ENTRY _ZTV7S7404C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C2[];
extern Class_Descriptor cd_S7404C7;
extern VTBL_ENTRY _ZTI7S7404C7[];
extern  VTBL_ENTRY _ZTV7S7404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C7[];
extern Class_Descriptor cd_S7404C7;
extern VTBL_ENTRY _ZTI7S7404C7[];
extern  VTBL_ENTRY _ZTV7S7404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C7[];
extern Class_Descriptor cd_S7404C7;
extern VTBL_ENTRY _ZTI7S7404C7[];
extern  VTBL_ENTRY _ZTV7S7404C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C7[];
extern Class_Descriptor cd_S7404C2;
extern VTBL_ENTRY _ZTI7S7404C2[];
extern  VTBL_ENTRY _ZTV7S7404C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C2[];
extern Class_Descriptor cd_S7404C13;
extern VTBL_ENTRY _ZTI8S7404C13[];
extern  VTBL_ENTRY _ZTV8S7404C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7404C13[];
static Base_Class bases_S7404C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(57696,40528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(57800,40596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(57904,40672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C5,    ABISELECT(57904,40672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20507C6,    ABISELECT(58352,40988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C5,    ABISELECT(58352,40988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7404C6,    ABISELECT(58336,40984), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7404C4,    ABISELECT(57792,40592), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20507C11,    ABISELECT(58880,41368), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7404C7,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7404C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7404C7,    ABISELECT(7568,5308), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7404C7,    ABISELECT(59008,41452), //bcp->offset
    48, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7404C7,    ABISELECT(12112,8488), //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
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7404C2,    ABISELECT(12112,8488), //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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7404C13,    ABISELECT(12112,8488), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7404C1[];
extern void _ZN7S7404C1D1Ev();
extern void _ZN7S7404C1D0Ev();
extern void _ZN7S7404C12v1Ev();
extern void _ZN7S7404C12v2Ev();
extern void _ZN7S7404C12v3Ev();
extern void ABISELECT(_ZThn7568_N7S7404C1D1Ev,_ZThn5308_N7S7404C1D1Ev)();
extern void ABISELECT(_ZThn7568_N7S7404C1D0Ev,_ZThn5308_N7S7404C1D0Ev)();
extern void ABISELECT(_ZThn12112_N7S7404C1D1Ev,_ZThn8488_N7S7404C1D1Ev)();
extern void ABISELECT(_ZThn12112_N7S7404C1D0Ev,_ZThn8488_N7S7404C1D0Ev)();
extern void _ZN8S7404C132v5Ev();
extern void _ZN7S7404C62v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S7404C1D1Ev,_ZTv0_n12_N7S7404C1D1Ev)();
extern void ABISELECT(_ZThn58880_N7S7404C1D1Ev,_ZThn41368_N7S7404C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C1D0Ev,_ZTv0_n12_N7S7404C1D0Ev)();
extern void ABISELECT(_ZThn58880_N7S7404C1D0Ev,_ZThn41368_N7S7404C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7404C1D1Ev,_ZTv0_n32_N7S7404C1D1Ev)();
extern void ABISELECT(_ZThn59008_N7S7404C1D1Ev,_ZThn41452_N7S7404C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7404C1D0Ev,_ZTv0_n32_N7S7404C1D0Ev)();
extern void ABISELECT(_ZThn59008_N7S7404C1D0Ev,_ZThn41452_N7S7404C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7404C1[] = {
  ABISELECT(59008,41452),
  ABISELECT(57792,40592),
  ABISELECT(57696,40528),
  ABISELECT(58336,40984),
  ABISELECT(57904,40672),
  ABISELECT(58880,41368),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C1[0]),
  (VTBL_ENTRY)&_ZN7S7404C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7404C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7404C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7404C12v3Ev,
  ABISELECT(50224,35284),
  ABISELECT(50128,35220),
  ABISELECT(50768,35676),
  ABISELECT(50336,35364),
  ABISELECT(51312,36060),
  ABISELECT(-7568,-5308),
  (VTBL_ENTRY)&(_ZTI7S7404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn7568_N7S7404C1D1Ev,_ZThn5308_N7S7404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn7568_N7S7404C1D0Ev,_ZThn5308_N7S7404C1D0Ev),
  ABISELECT(46896,32964),
  ABISELECT(45680,32104),
  ABISELECT(45584,32040),
  ABISELECT(46224,32496),
  ABISELECT(45792,32184),
  ABISELECT(46768,32880),
  ABISELECT(-12112,-8488),
  (VTBL_ENTRY)&(_ZTI7S7404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn12112_N7S7404C1D1Ev,_ZThn8488_N7S7404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn12112_N7S7404C1D0Ev,_ZThn8488_N7S7404C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7404C132v5Ev,
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-57792,-40592),
  (VTBL_ENTRY)&(_ZTI7S7404C1[0]),
  0,
  ABISELECT(-640,-456),
  ABISELECT(-58336,-40984),
  (VTBL_ENTRY)&(_ZTI7S7404C1[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
  ABISELECT(-58880,-41368),
  ABISELECT(-58880,-41368),
  (VTBL_ENTRY)&(_ZTI7S7404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C1D1Ev,_ZTv0_n12_N7S7404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C1D0Ev,_ZTv0_n12_N7S7404C1D0Ev),
  ABISELECT(-59008,-41452),
  ABISELECT(-1216,-860),
  ABISELECT(-1312,-924),
  ABISELECT(-672,-468),
  ABISELECT(-1104,-780),
  ABISELECT(-128,-84),
  ABISELECT(-59008,-41452),
  (VTBL_ENTRY)&(_ZTI7S7404C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7404C1D1Ev,_ZTv0_n32_N7S7404C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7404C1D0Ev,_ZTv0_n32_N7S7404C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7404C1[];
extern void _ZN7S7404C2D1Ev();
extern void _ZN7S7404C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C2__7S7404C1[] = {
  ABISELECT(57792,40592),
  ABISELECT(57696,40528),
  ABISELECT(58336,40984),
  ABISELECT(57904,40672),
  ABISELECT(58880,41368),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&_ZN7S7404C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C2D0Ev,
};
extern void _ZN7S7404C7D1Ev();
extern void _ZN7S7404C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C77S7404C2__7S7404C1[] = {
  ABISELECT(57792,40592),
  ABISELECT(57696,40528),
  ABISELECT(58336,40984),
  ABISELECT(57904,40672),
  ABISELECT(58880,41368),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev)();
extern void ABISELECT(_ZThn58880_N7S7404C7D1Ev,_ZThn41368_N7S7404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev)();
extern void ABISELECT(_ZThn58880_N7S7404C7D0Ev,_ZThn41368_N7S7404C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C77S7404C2__7S7404C1[] = {
  ABISELECT(-58880,-41368),
  ABISELECT(-58880,-41368),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C77S7404C2__7S7404C1[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-58336,-40984),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C77S7404C2__7S7404C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-57792,-40592),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C2__7S7404C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-57792,-40592),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C2__7S7404C1[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-58336,-40984),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev)();
extern void ABISELECT(_ZThn58880_N7S7404C2D1Ev,_ZThn41368_N7S7404C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev)();
extern void ABISELECT(_ZThn58880_N7S7404C2D0Ev,_ZThn41368_N7S7404C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C2__7S7404C1[] = {
  ABISELECT(-58880,-41368),
  ABISELECT(-58880,-41368),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev),
};
extern void _ZN7S7404C7D1Ev();
extern void _ZN7S7404C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C7__A__7S7404C1[] = {
  ABISELECT(50224,35284),
  ABISELECT(50128,35220),
  ABISELECT(50768,35676),
  ABISELECT(50336,35364),
  ABISELECT(51312,36060),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev)();
extern void ABISELECT(_ZThn51312_N7S7404C7D1Ev,_ZThn36060_N7S7404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev)();
extern void ABISELECT(_ZThn51312_N7S7404C7D0Ev,_ZThn36060_N7S7404C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C7__A__7S7404C1[] = {
  ABISELECT(-51312,-36060),
  ABISELECT(-51312,-36060),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C7__A__7S7404C1[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-50768,-35676),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C7__A__7S7404C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-50224,-35284),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
};
extern void _ZN8S7404C13D1Ev();
extern void _ZN8S7404C13D0Ev();
extern void _ZN8S7404C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7404C13__7S7404C1[] = {
  ABISELECT(46896,32964),
  ABISELECT(45680,32104),
  ABISELECT(45584,32040),
  ABISELECT(46224,32496),
  ABISELECT(45792,32184),
  ABISELECT(46768,32880),
  0,
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
  (VTBL_ENTRY)&_ZN8S7404C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7404C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7404C132v5Ev,
};
extern void _ZN7S7404C2D1Ev();
extern void _ZN7S7404C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C28S7404C13__A1__7S7404C1[] = {
  ABISELECT(45680,32104),
  ABISELECT(45584,32040),
  ABISELECT(46224,32496),
  ABISELECT(45792,32184),
  ABISELECT(46768,32880),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&_ZN7S7404C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C2D0Ev,
};
extern void _ZN7S7404C7D1Ev();
extern void _ZN7S7404C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C77S7404C28S7404C13__A3__7S7404C1[] = {
  ABISELECT(45680,32104),
  ABISELECT(45584,32040),
  ABISELECT(46224,32496),
  ABISELECT(45792,32184),
  ABISELECT(46768,32880),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev)();
extern void ABISELECT(_ZThn46768_N7S7404C7D1Ev,_ZThn32880_N7S7404C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev)();
extern void ABISELECT(_ZThn46768_N7S7404C7D0Ev,_ZThn32880_N7S7404C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C77S7404C28S7404C13__A3__7S7404C1[] = {
  ABISELECT(-46768,-32880),
  ABISELECT(-46768,-32880),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C77S7404C28S7404C13__A3__7S7404C1[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-46224,-32496),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C77S7404C28S7404C13__A3__7S7404C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-45680,-32104),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C28S7404C13__A1__7S7404C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-45680,-32104),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C28S7404C13__A1__7S7404C1[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-46224,-32496),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev)();
extern void ABISELECT(_ZThn46768_N7S7404C2D1Ev,_ZThn32880_N7S7404C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev)();
extern void ABISELECT(_ZThn46768_N7S7404C2D0Ev,_ZThn32880_N7S7404C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C28S7404C13__A1__7S7404C1[] = {
  ABISELECT(-46768,-32880),
  ABISELECT(-46768,-32880),
  (VTBL_ENTRY)&(_ZTI7S7404C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7404C13D1Ev,_ZTv0_n32_N8S7404C13D1Ev)();
extern void ABISELECT(_ZThn46896_N8S7404C13D1Ev,_ZThn32964_N8S7404C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7404C13D0Ev,_ZTv0_n32_N8S7404C13D0Ev)();
extern void ABISELECT(_ZThn46896_N8S7404C13D0Ev,_ZThn32964_N8S7404C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7404C7__8S7404C13__7S7404C1[] = {
  ABISELECT(-46896,-32964),
  ABISELECT(-1216,-860),
  ABISELECT(-1312,-924),
  ABISELECT(-672,-468),
  ABISELECT(-1104,-780),
  ABISELECT(-128,-84),
  ABISELECT(-46896,-32964),
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7404C13D1Ev,_ZTv0_n32_N8S7404C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7404C13D0Ev,_ZTv0_n32_N8S7404C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7404C13D1Ev,_ZTv0_n12_N8S7404C13D1Ev)();
extern void ABISELECT(_ZThn46768_N8S7404C13D1Ev,_ZThn32880_N8S7404C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7404C13D0Ev,_ZTv0_n12_N8S7404C13D0Ev)();
extern void ABISELECT(_ZThn46768_N8S7404C13D0Ev,_ZThn32880_N8S7404C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20507C11__8S7404C13__7S7404C1[] = {
  ABISELECT(-46768,-32880),
  ABISELECT(-46768,-32880),
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7404C13D1Ev,_ZTv0_n12_N8S7404C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7404C13D0Ev,_ZTv0_n12_N8S7404C13D0Ev),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__8S7404C13__7S7404C1[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-46224,-32496),
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__8S7404C13__7S7404C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(-45680,-32104),
  (VTBL_ENTRY)&(_ZTI8S7404C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C4__7S7404C1[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(-544,-392),
  (VTBL_ENTRY)&(_ZTI7S7404C4[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C1[] = {
  ABISELECT(-640,-456),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C6[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
extern void _ZN7S7404C7D1Ev();
extern void _ZN7S7404C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C7__A2__7S7404C1[] = {
  ABISELECT(-1216,-860),
  ABISELECT(-1312,-924),
  ABISELECT(-672,-468),
  ABISELECT(-1104,-780),
  ABISELECT(-128,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7404C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20507C11__7S7404C7__A2__7S7404C1[] = {
  ABISELECT(128,84),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev),
};
extern void _ZN7S7404C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7404C6__7S7404C7__A2__7S7404C1[] = {
  0,
  ABISELECT(-640,-456),
  ABISELECT(672,468),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
  (VTBL_ENTRY)&_ZN7S7404C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7404C4__7S7404C7__A2__7S7404C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(544,392),
  ABISELECT(112,80),
  ABISELECT(1216,860),
  (VTBL_ENTRY)&(_ZTI7S7404C7[0]),
};
static  VTT_ENTRY vtt_S7404C1[] = {
  {&(_ZTV7S7404C1[8]),  8,58},
  {&(_tg__ZTV7S7404C2__7S7404C1[7]),  7,9},
  {&(_tg__ZTV7S7404C77S7404C2__7S7404C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S7404C77S7404C2__7S7404C1[3]),  3,5},
  {&(_tg__ZTV7S7404C6__7S7404C77S7404C2__7S7404C1[4]),  4,5},
  {&(_tg__ZTV7S7404C4__7S7404C77S7404C2__7S7404C1[5]),  5,5},
  {&(_tg__ZTV7S7404C4__7S7404C2__7S7404C1[5]),  5,5},
  {&(_tg__ZTV7S7404C6__7S7404C2__7S7404C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__7S7404C2__7S7404C1[3]),  3,5},
  {&(_tg__ZTV7S7404C7__A__7S7404C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S7404C7__A__7S7404C1[3]),  3,5},
  {&(_tg__ZTV7S7404C6__7S7404C7__A__7S7404C1[4]),  4,5},
  {&(_tg__ZTV7S7404C4__7S7404C7__A__7S7404C1[5]),  5,5},
  {&(_tg__ZTV8S7404C13__7S7404C1[8]),  8,11},
  {&(_tg__ZTV7S7404C28S7404C13__A1__7S7404C1[7]),  7,9},
  {&(_tg__ZTV7S7404C77S7404C28S7404C13__A3__7S7404C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S7404C77S7404C28S7404C13__A3__7S7404C1[3]),  3,5},
  {&(_tg__ZTV7S7404C6__7S7404C77S7404C28S7404C13__A3__7S7404C1[4]),  4,5},
  {&(_tg__ZTV7S7404C4__7S7404C77S7404C28S7404C13__A3__7S7404C1[5]),  5,5},
  {&(_tg__ZTV7S7404C4__7S7404C28S7404C13__A1__7S7404C1[5]),  5,5},
  {&(_tg__ZTV7S7404C6__7S7404C28S7404C13__A1__7S7404C1[4]),  4,5},
  {&(_tg__ZTV9S20507C11__7S7404C28S7404C13__A1__7S7404C1[3]),  3,5},
  {&(_tg__ZTV7S7404C7__8S7404C13__7S7404C1[8]),  8,10},
  {&(_tg__ZTV9S20507C11__8S7404C13__7S7404C1[3]),  3,5},
  {&(_tg__ZTV7S7404C6__8S7404C13__7S7404C1[4]),  4,5},
  {&(_tg__ZTV7S7404C4__8S7404C13__7S7404C1[5]),  5,5},
  {&(_ZTV7S7404C1[38]),  38,58},
  {&(_ZTV7S7404C1[42]),  42,58},
  {&(_ZTV7S7404C1[46]),  46,58},
  {&(_ZTV7S7404C1[20]),  20,58},
  {&(_ZTV7S7404C1[30]),  30,58},
  {&(_ZTV7S7404C1[56]),  56,58},
  {&(_tg__ZTV7S7404C4__7S7404C1[5]),  5,5},
  {&(_tg__ZTV7S7404C6__7S7404C4__7S7404C1[4]),  4,5},
  {&(_tg__ZTV7S7404C6__7S7404C1[3]),  3,4},
  {&(_tg__ZTV7S7404C7__A2__7S7404C1[7]),  7,9},
  {&(_tg__ZTV9S20507C11__7S7404C7__A2__7S7404C1[3]),  3,5},
  {&(_tg__ZTV7S7404C6__7S7404C7__A2__7S7404C1[4]),  4,5},
  {&(_tg__ZTV7S7404C4__7S7404C7__A2__7S7404C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S7404C1[];
extern  VTBL_ENTRY _ZTV7S7404C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7404C1[];
static VTBL_ENTRY alt_thunk_names115[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7404C13D0Ev,_ZTv0_n12_N8S7404C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46768_N8S7404C13D0Ev,_ZThn32880_N8S7404C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7404C13D1Ev,_ZTv0_n12_N8S7404C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46768_N8S7404C13D1Ev,_ZThn32880_N8S7404C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7404C13D0Ev,_ZTv0_n32_N8S7404C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46896_N8S7404C13D0Ev,_ZThn32964_N8S7404C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7404C13D1Ev,_ZTv0_n32_N8S7404C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46896_N8S7404C13D1Ev,_ZThn32964_N8S7404C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C2D0Ev,_ZTv0_n12_N7S7404C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46768_N7S7404C2D0Ev,_ZThn32880_N7S7404C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn58880_N7S7404C2D0Ev,_ZThn41368_N7S7404C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C2D1Ev,_ZTv0_n12_N7S7404C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46768_N7S7404C2D1Ev,_ZThn32880_N7S7404C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn58880_N7S7404C2D1Ev,_ZThn41368_N7S7404C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C7D0Ev,_ZTv0_n12_N7S7404C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46768_N7S7404C7D0Ev,_ZThn32880_N7S7404C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51312_N7S7404C7D0Ev,_ZThn36060_N7S7404C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn58880_N7S7404C7D0Ev,_ZThn41368_N7S7404C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C7D1Ev,_ZTv0_n12_N7S7404C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46768_N7S7404C7D1Ev,_ZThn32880_N7S7404C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51312_N7S7404C7D1Ev,_ZThn36060_N7S7404C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn58880_N7S7404C7D1Ev,_ZThn41368_N7S7404C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7404C1D0Ev,_ZTv0_n32_N7S7404C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn59008_N7S7404C1D0Ev,_ZThn41452_N7S7404C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7404C1D1Ev,_ZTv0_n32_N7S7404C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn59008_N7S7404C1D1Ev,_ZThn41452_N7S7404C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C1D0Ev,_ZTv0_n12_N7S7404C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58880_N7S7404C1D0Ev,_ZThn41368_N7S7404C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7404C1D1Ev,_ZTv0_n12_N7S7404C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58880_N7S7404C1D1Ev,_ZThn41368_N7S7404C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7404C1 = {  "S7404C1", // class name
  bases_S7404C1, 16,
  &(vtc_S7404C1[0]), // expected_vtbl_contents
  &(vtt_S7404C1[0]), // expected_vtt_contents
  ABISELECT(63552,44632), // object size
  NSPAIRA(_ZTI7S7404C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7404C1),58, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7404C1),39, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names115,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16521C4  : S20507C6 {
  int s16521c4f0;
  long double s16521c4f1;
  int s16521c4f2;
  ::S20507C6 s16521c4f3;
  ::S20507C6 s16521c4f4;
  int s16521c4f5;
  long double s16521c4f6[8];
};
//SIG(-1 S16521C4) C1{ BC2{ m Fi[10] Fp[6]} Fi FD Fi FC2 FC2 Fi FD[8]}



static void Test_S16521C4()
{
  extern Class_Descriptor cd_S16521C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,79)];
    init_test(&cd_S16521C4, buf);
    S16521C4 &lv = *(new (buf) S16521C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,312), "sizeof(S16521C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16521C4)");
    check_base_class_offset(lv, (S20507C6*), 0, "S16521C4");
    check_field_offset(lv, s16521c4f0, ABISELECT(88,64), "S16521C4.s16521c4f0");
    check_field_offset(lv, s16521c4f1, ABISELECT(96,68), "S16521C4.s16521c4f1");
    check_field_offset(lv, s16521c4f2, ABISELECT(112,80), "S16521C4.s16521c4f2");
    check_field_offset(lv, s16521c4f3, ABISELECT(120,84), "S16521C4.s16521c4f3");
    check_field_offset(lv, s16521c4f4, ABISELECT(208,148), "S16521C4.s16521c4f4");
    check_field_offset(lv, s16521c4f5, ABISELECT(296,212), "S16521C4.s16521c4f5");
    check_field_offset(lv, s16521c4f6, ABISELECT(304,216), "S16521C4.s16521c4f6");
    test_class_info(&lv, &cd_S16521C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16521C4(Test_S16521C4, "S16521C4", ABISELECT(432,312));

#else // __cplusplus

extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S16521C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S16521C4[];
Class_Descriptor cd_S16521C4 = {  "S16521C4", // class name
  bases_S16521C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,312), // object size
  NSPAIRA(_ZTI8S16521C4),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  S16521C6  : S16521C4 , virtual S20507C6 {
  long double s16521c6f0[2];
  int s16521c6f1[2];
  long double s16521c6f2[3];
  virtual void  v1(); // _ZN8S16521C62v1Ev
  ~S16521C6(); // tgen
  S16521C6(); // tgen
};
//SIG(-1 S16521C6) C1{ BC2{ BC3{ m Fi[10] Fp[6]} Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v1 FD[2] Fi[2] FD[3]}


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

static void Test_S16521C6()
{
  extern Class_Descriptor cd_S16521C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,113)];
    init_test(&cd_S16521C6, buf);
    S16521C6 *dp, &lv = *(dp=new (buf) S16521C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,448), "sizeof(S16521C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16521C6)");
    check_base_class_offset(lv, (S20507C6*)(S16521C4*), ABISELECT(16,4), "S16521C6");
    check_base_class_offset(lv, (S16521C4*), ABISELECT(16,4), "S16521C6");
    /*is_ambiguous_... S16521C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S16521C6");
    check_field_offset(lv, s16521c6f0, ABISELECT(448,316), "S16521C6.s16521c6f0");
    check_field_offset(lv, s16521c6f1, ABISELECT(480,340), "S16521C6.s16521c6f1");
    check_field_offset(lv, s16521c6f2, ABISELECT(496,348), "S16521C6.s16521c6f2");
    test_class_info(&lv, &cd_S16521C6);
    dp->~S16521C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16521C6(Test_S16521C6, "S16521C6", ABISELECT(640,448));

#else // __cplusplus

extern void _ZN8S16521C6C1Ev();
extern void _ZN8S16521C6D1Ev();
Name_Map name_map_S16521C6[] = {
  NSPAIR(_ZN8S16521C6C1Ev),
  NSPAIR(_ZN8S16521C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S16521C4;
extern VTBL_ENTRY _ZTI8S16521C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
static Base_Class bases_S16521C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S16521C4,    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_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S16521C6[];
extern void _ZN8S16521C62v1Ev();
static  VTBL_ENTRY vtc_S16521C6[] = {
  ABISELECT(544,384),
  0,
  (VTBL_ENTRY)&(_ZTI8S16521C6[0]),
  (VTBL_ENTRY)&_ZN8S16521C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S16521C6[];
static  VTT_ENTRY vtt_S16521C6[] = {
  {&(_ZTV8S16521C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S16521C6[];
extern  VTBL_ENTRY _ZTV8S16521C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S16521C6[];
Class_Descriptor cd_S16521C6 = {  "S16521C6", // class name
  bases_S16521C6, 3,
  &(vtc_S16521C6[0]), // expected_vtbl_contents
  &(vtt_S16521C6[0]), // expected_vtt_contents
  ABISELECT(640,448), // object size
  NSPAIRA(_ZTI8S16521C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S16521C6),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S16521C6),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  S16521C7  : virtual S20507C6 , virtual S16521C6 , virtual S16521C4 {
  ::S468C20_nt s16521c7f0;
  ~S16521C7(); // tgen
  S16521C7(); // tgen
};
//SIG(-1 S16521C7) C1{ VBC2{ m Fi[10] Fp[6]} VBC3{ BC4{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC2 v1 FD[2] Fi[2] FD[3]} VBC4 FC5{}}


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

static void Test_S16521C7()
{
  extern Class_Descriptor cd_S16521C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,193)];
    init_test(&cd_S16521C7, buf);
    S16521C7 *dp, &lv = *(dp=new (buf) S16521C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,768), "sizeof(S16521C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16521C7)");
    /*is_ambiguous_... S16521C7::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(16,8), "S16521C7");
    /*is_ambiguous_... S16521C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S16521C6*), ABISELECT(16,8), "S16521C7");
    check_base_class_offset(lv, (S20507C6*)(S16521C4*)(S16521C6*), ABISELECT(128,76), "S16521C7");
    check_base_class_offset(lv, (S16521C4*)(S16521C6*), ABISELECT(128,76), "S16521C7");
    check_base_class_offset(lv, (S16521C6*), ABISELECT(112,72), "S16521C7");
    /*is_ambiguous_... S16521C7::S16521C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S16521C4*), ABISELECT(656,456), "S16521C7");
    /*is_ambiguous_... S16521C7::S16521C4 */ AMB_check_base_class_offset(lv, (S16521C4*), ABISELECT(656,456), "S16521C7");
    check_field_offset(lv, s16521c7f0, ABISELECT(8,4), "S16521C7.s16521c7f0");
    test_class_info(&lv, &cd_S16521C7);
    dp->~S16521C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16521C7(Test_S16521C7, "S16521C7", ABISELECT(1088,768));

#else // __cplusplus

extern void _ZN8S16521C7C1Ev();
extern void _ZN8S16521C7D1Ev();
Name_Map name_map_S16521C7[] = {
  NSPAIR(_ZN8S16521C7C1Ev),
  NSPAIR(_ZN8S16521C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S16521C4;
extern VTBL_ENTRY _ZTI8S16521C4[];
extern Class_Descriptor cd_S16521C6;
extern VTBL_ENTRY _ZTI8S16521C6[];
extern  VTBL_ENTRY _ZTV8S16521C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S16521C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S16521C4;
extern VTBL_ENTRY _ZTI8S16521C4[];
static Base_Class bases_S16521C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S16521C4,    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
    3, //immediately_derived
  0, 0},
  {&cd_S16521C6,    ABISELECT(112,72), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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_S20507C6,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S16521C4,    ABISELECT(656,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S16521C7[];
extern void _ZN8S16521C62v1Ev();
static  VTBL_ENTRY vtc_S16521C7[] = {
  ABISELECT(656,456),
  ABISELECT(112,72),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S16521C7[0]),
  0,
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S16521C7[0]),
  (VTBL_ENTRY)&_ZN8S16521C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S16521C7[];
extern void _ZN8S16521C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S16521C6__8S16521C7[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S16521C6[0]),
  (VTBL_ENTRY)&_ZN8S16521C62v1Ev,
};
static  VTT_ENTRY vtt_S16521C7[] = {
  {&(_ZTV8S16521C7[5]),  5,10},
  {&(_ZTV8S16521C7[9]),  9,10},
  {&(_tg__ZTV8S16521C6__8S16521C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S16521C7[];
extern  VTBL_ENTRY _ZTV8S16521C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S16521C7[];
Class_Descriptor cd_S16521C7 = {  "S16521C7", // class name
  bases_S16521C7, 6,
  &(vtc_S16521C7[0]), // expected_vtbl_contents
  &(vtt_S16521C7[0]), // expected_vtt_contents
  ABISELECT(1088,768), // object size
  NSPAIRA(_ZTI8S16521C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S16521C7),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S16521C7),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  S16521C2  : S20507C6 , virtual S16521C4 , virtual S20507C11 , S16521C6 {
  ::S16521C7 s16521c2f0;
  ::S16521C6 s16521c2f1;
  virtual  ~S16521C2(); // _ZN8S16521C2D2Ev
  S16521C2(); // tgen
};
//SIG(-1 S16521C2) C1{ BC2{ m Fi[10] Fp[6]} VBC3{ BC2 Fi FD Fi FC2 FC2 Fi FD[8]} VBC4{ vd m Fp FD[5] Fp FD} BC5{ BC3 VBC2 v1 FD[2] Fi[2] FD[3]} vd FC6{ VBC2 VBC5 VBC3 FC7{}} FC5}


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

static void Test_S16521C2()
{
  extern Class_Descriptor cd_S16521C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(190,532)];
    init_test(&cd_S16521C2, buf);
    S16521C2 *dp, &lv = *(dp=new (buf) S16521C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3024,2124), "sizeof(S16521C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16521C2)");
    /*is_ambiguous_... S16521C2::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*), ABISELECT(544,384), "S16521C2");
    /*is_ambiguous_... S16521C2::S16521C4 */ AMB_check_base_class_offset(lv, (S20507C6*)(S16521C4*), ABISELECT(2368,1664), "S16521C2");
    /*is_ambiguous_... S16521C2::S16521C4 */ AMB_check_base_class_offset(lv, (S16521C4*), ABISELECT(2368,1664), "S16521C2");
    check_base_class_offset(lv, (S20507C11*), ABISELECT(2800,1976), "S16521C2");
    check_base_class_offset(lv, (S20507C6*)(S16521C4*)(S16521C6*), ABISELECT(16,4), "S16521C2");
    check_base_class_offset(lv, (S16521C4*)(S16521C6*), ABISELECT(16,4), "S16521C2");
    /*is_ambiguous_... S16521C6::S20507C6 */ AMB_check_base_class_offset(lv, (S20507C6*)(S16521C6*), ABISELECT(2928,2060), "S16521C2");
    check_base_class_offset(lv, (S16521C6*), 0, "S16521C2");
    check_field_offset(lv, s16521c2f0, ABISELECT(640,448), "S16521C2.s16521c2f0");
    check_field_offset(lv, s16521c2f1, ABISELECT(1728,1216), "S16521C2.s16521c2f1");
    test_class_info(&lv, &cd_S16521C2);
    dp->~S16521C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16521C2(Test_S16521C2, "S16521C2", ABISELECT(3024,2124));

#else // __cplusplus

extern void _ZN8S16521C2C1Ev();
extern void _ZN8S16521C2D2Ev();
Name_Map name_map_S16521C2[] = {
  NSPAIR(_ZN8S16521C2C1Ev),
  NSPAIR(_ZN8S16521C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S16521C4;
extern VTBL_ENTRY _ZTI8S16521C4[];
extern Class_Descriptor cd_S20507C11;
extern VTBL_ENTRY _ZTI9S20507C11[];
extern  VTBL_ENTRY _ZTV9S20507C11[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S16521C4;
extern VTBL_ENTRY _ZTI8S16521C4[];
extern Class_Descriptor cd_S20507C6;
extern VTBL_ENTRY _ZTI8S20507C6[];
extern Class_Descriptor cd_S16521C6;
extern VTBL_ENTRY _ZTI8S16521C6[];
extern  VTBL_ENTRY _ZTV8S16521C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S16521C6[];
static Base_Class bases_S16521C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20507C6,    ABISELECT(544,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20507C6,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S16521C4,    ABISELECT(2368,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20507C11,    ABISELECT(2800,1976), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20507C6,    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_S16521C4,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20507C6,    ABISELECT(2928,2060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S16521C6,    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 _ZTI8S16521C2[];
extern void _ZN8S16521C62v1Ev();
extern void _ZN8S16521C2D1Ev();
extern void _ZN8S16521C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S16521C2D1Ev,_ZTv0_n12_N8S16521C2D1Ev)();
extern void ABISELECT(_ZThn2800_N8S16521C2D1Ev,_ZThn1976_N8S16521C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S16521C2D0Ev,_ZTv0_n12_N8S16521C2D0Ev)();
extern void ABISELECT(_ZThn2800_N8S16521C2D0Ev,_ZThn1976_N8S16521C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S16521C2[] = {
  ABISELECT(2800,1976),
  ABISELECT(2368,1664),
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S16521C2[0]),
  (VTBL_ENTRY)&_ZN8S16521C62v1Ev,
  (VTBL_ENTRY)&_ZN8S16521C2D1Ev,
  (VTBL_ENTRY)&_ZN8S16521C2D0Ev,
  ABISELECT(-2800,-1976),
  ABISELECT(-2800,-1976),
  (VTBL_ENTRY)&(_ZTI8S16521C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S16521C2D1Ev,_ZTv0_n12_N8S16521C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S16521C2D0Ev,_ZTv0_n12_N8S16521C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S16521C2[];
extern void _ZN8S16521C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S16521C6__8S16521C2[] = {
  ABISELECT(2928,2060),
  0,
  (VTBL_ENTRY)&(_ZTI8S16521C6[0]),
  (VTBL_ENTRY)&_ZN8S16521C62v1Ev,
};
static  VTT_ENTRY vtt_S16521C2[] = {
  {&(_ZTV8S16521C2[5]),  5,13},
  {&(_tg__ZTV8S16521C6__8S16521C2[3]),  3,4},
  {&(_ZTV8S16521C2[11]),  11,13},
};
extern VTBL_ENTRY _ZTI8S16521C2[];
extern  VTBL_ENTRY _ZTV8S16521C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S16521C2[];
static VTBL_ENTRY alt_thunk_names116[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S16521C2D0Ev,_ZTv0_n12_N8S16521C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N8S16521C2D0Ev,_ZThn1976_N8S16521C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S16521C2D1Ev,_ZTv0_n12_N8S16521C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N8S16521C2D1Ev,_ZThn1976_N8S16521C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S16521C2 = {  "S16521C2", // class name
  bases_S16521C2, 8,
  &(vtc_S16521C2[0]), // expected_vtbl_contents
  &(vtt_S16521C2[0]), // expected_vtt_contents
  ABISELECT(3024,2124), // object size
  NSPAIRA(_ZTI8S16521C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S16521C2),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S16521C2),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names116,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16521C1  {
  long double s16521c1f0;
  short s16521c1f1;
  int s16521c1f2[2];
  long double s16521c1f3;
  ::S16521C2 s16521c1f4;
  ::S16521C2 s16521c1f5;
  long double s16521c1f6[8];
  ::S21200C4 s16521c1f7;
  void  mf16521c1(); // _ZN8S16521C19mf16521c1Ev
};
//SIG(1 S16521C1) C1{ m FD Fs Fi[2] FD FC2{ BC3{ m Fi[10] Fp[6]} VBC4{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC5{ vd m Fp FD[5] Fp FD} BC6{ BC4 VBC3 v1 FD[2] Fi[2] FD[3]} vd FC7{ VBC3 VBC6 VBC4 FC8{}} FC6} FC2 FD[8] FC9{ v2 v3 v4 Fi FC10{ VBC3 VBC11{ BC12{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v5 FD[2] Fi[2] FD[3]} VBC12 FC8} Fi Fp FC13{ VBC5 VBC12 VBC11 VBC14{ BC3 VBC12 VBC11 FD} vd FD[9] Fi FC15{ VBC3 VBC5 VBC16{ VBC3 VBC17{ BC18{ BC3 Fi FD Fi FC3 FC3 Fi FD[8]} VBC3 v6 FD[2] Fi[2] FD[3]} VBC18 FC8} VBC19{ BC3 VBC18 VBC5 BC17 vd FC16 FC17} FC18 FC3 Fs Fp[2] FL FD[2] FL Fi[2] Fc} Fi FL FC5 FL} Fi FL FD}}


void  S16521C1 ::mf16521c1(){}

static void Test_S16521C1()
{
  {
    init_simple_test("S16521C1");
    S16521C1 lv;
    check2(sizeof(lv), ABISELECT(13232,9292), "sizeof(S16521C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16521C1)");
    check_field_offset(lv, s16521c1f0, 0, "S16521C1.s16521c1f0");
    check_field_offset(lv, s16521c1f1, ABISELECT(16,12), "S16521C1.s16521c1f1");
    check_field_offset(lv, s16521c1f2, ABISELECT(20,16), "S16521C1.s16521c1f2");
    check_field_offset(lv, s16521c1f3, ABISELECT(32,24), "S16521C1.s16521c1f3");
    check_field_offset(lv, s16521c1f4, ABISELECT(48,36), "S16521C1.s16521c1f4");
    check_field_offset(lv, s16521c1f5, ABISELECT(3072,2160), "S16521C1.s16521c1f5");
    check_field_offset(lv, s16521c1f6, ABISELECT(6096,4284), "S16521C1.s16521c1f6");
    check_field_offset(lv, s16521c1f7, ABISELECT(6224,4380), "S16521C1.s16521c1f7");
  }
}
static Arrange_To_Call_Me vS16521C1(Test_S16521C1, "S16521C1", ABISELECT(13232,9292));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4665C3_nt  {
  virtual  ~S4665C3_nt(); // _ZN10S4665C3_ntD1Ev
  virtual void  v22(); // _ZN10S4665C3_nt3v22Ev
  virtual void  v23(); // _ZN10S4665C3_nt3v23Ev
  virtual void  v24(); // _ZN10S4665C3_nt3v24Ev
  virtual void  v25(); // _ZN10S4665C3_nt3v25Ev
  virtual void  v26(); // _ZN10S4665C3_nt3v26Ev
  virtual void  v27(); // _ZN10S4665C3_nt3v27Ev
  virtual void  v28(); // _ZN10S4665C3_nt3v28Ev
  virtual void  v29(); // _ZN10S4665C3_nt3v29Ev
  virtual void  v30(); // _ZN10S4665C3_nt3v30Ev
  virtual void  v31(); // _ZN10S4665C3_nt3v31Ev
  virtual void  v32(); // _ZN10S4665C3_nt3v32Ev
  virtual void  v33(); // _ZN10S4665C3_nt3v33Ev
  virtual void  v34(); // _ZN10S4665C3_nt3v34Ev
  virtual void  v35(); // _ZN10S4665C3_nt3v35Ev
  virtual void  v36(); // _ZN10S4665C3_nt3v36Ev
  virtual void  v37(); // _ZN10S4665C3_nt3v37Ev
  virtual void  v38(); // _ZN10S4665C3_nt3v38Ev
  virtual void  v39(); // _ZN10S4665C3_nt3v39Ev
  virtual void  v40(); // _ZN10S4665C3_nt3v40Ev
  virtual void  v41(); // _ZN10S4665C3_nt3v41Ev
  virtual void  v42(); // _ZN10S4665C3_nt3v42Ev
  virtual void  v43(); // _ZN10S4665C3_nt3v43Ev
  virtual void  v44(); // _ZN10S4665C3_nt3v44Ev
  virtual void  v45(); // _ZN10S4665C3_nt3v45Ev
  virtual void  v46(); // _ZN10S4665C3_nt3v46Ev
  virtual void  v47(); // _ZN10S4665C3_nt3v47Ev
  S4665C3_nt(); // tgen
};
//SIG(-1 S4665C3_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}


 S4665C3_nt ::~S4665C3_nt(){ note_dtor("S4665C3_nt", this);}
void  S4665C3_nt ::v22(){vfunc_called(this, "_ZN10S4665C3_nt3v22Ev");}
void  S4665C3_nt ::v23(){vfunc_called(this, "_ZN10S4665C3_nt3v23Ev");}
void  S4665C3_nt ::v24(){vfunc_called(this, "_ZN10S4665C3_nt3v24Ev");}
void  S4665C3_nt ::v25(){vfunc_called(this, "_ZN10S4665C3_nt3v25Ev");}
void  S4665C3_nt ::v26(){vfunc_called(this, "_ZN10S4665C3_nt3v26Ev");}
void  S4665C3_nt ::v27(){vfunc_called(this, "_ZN10S4665C3_nt3v27Ev");}
void  S4665C3_nt ::v28(){vfunc_called(this, "_ZN10S4665C3_nt3v28Ev");}
void  S4665C3_nt ::v29(){vfunc_called(this, "_ZN10S4665C3_nt3v29Ev");}
void  S4665C3_nt ::v30(){vfunc_called(this, "_ZN10S4665C3_nt3v30Ev");}
void  S4665C3_nt ::v31(){vfunc_called(this, "_ZN10S4665C3_nt3v31Ev");}
void  S4665C3_nt ::v32(){vfunc_called(this, "_ZN10S4665C3_nt3v32Ev");}
void  S4665C3_nt ::v33(){vfunc_called(this, "_ZN10S4665C3_nt3v33Ev");}
void  S4665C3_nt ::v34(){vfunc_called(this, "_ZN10S4665C3_nt3v34Ev");}
void  S4665C3_nt ::v35(){vfunc_called(this, "_ZN10S4665C3_nt3v35Ev");}
void  S4665C3_nt ::v36(){vfunc_called(this, "_ZN10S4665C3_nt3v36Ev");}
void  S4665C3_nt ::v37(){vfunc_called(this, "_ZN10S4665C3_nt3v37Ev");}
void  S4665C3_nt ::v38(){vfunc_called(this, "_ZN10S4665C3_nt3v38Ev");}
void  S4665C3_nt ::v39(){vfunc_called(this, "_ZN10S4665C3_nt3v39Ev");}
void  S4665C3_nt ::v40(){vfunc_called(this, "_ZN10S4665C3_nt3v40Ev");}
void  S4665C3_nt ::v41(){vfunc_called(this, "_ZN10S4665C3_nt3v41Ev");}
void  S4665C3_nt ::v42(){vfunc_called(this, "_ZN10S4665C3_nt3v42Ev");}
void  S4665C3_nt ::v43(){vfunc_called(this, "_ZN10S4665C3_nt3v43Ev");}
void  S4665C3_nt ::v44(){vfunc_called(this, "_ZN10S4665C3_nt3v44Ev");}
void  S4665C3_nt ::v45(){vfunc_called(this, "_ZN10S4665C3_nt3v45Ev");}
void  S4665C3_nt ::v46(){vfunc_called(this, "_ZN10S4665C3_nt3v46Ev");}
void  S4665C3_nt ::v47(){vfunc_called(this, "_ZN10S4665C3_nt3v47Ev");}
S4665C3_nt ::S4665C3_nt(){ note_ctor("S4665C3_nt", this);} // tgen

//skip512 S4665C3_nt

#else // __cplusplus

extern void _ZN10S4665C3_ntC1Ev();
extern void _ZN10S4665C3_ntD1Ev();
Name_Map name_map_S4665C3_nt[] = {
  NSPAIR(_ZN10S4665C3_ntC1Ev),
  NSPAIR(_ZN10S4665C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4665C3_nt[];
extern void _ZN10S4665C3_ntD1Ev();
extern void _ZN10S4665C3_ntD0Ev();
extern void _ZN10S4665C3_nt3v22Ev();
extern void _ZN10S4665C3_nt3v23Ev();
extern void _ZN10S4665C3_nt3v24Ev();
extern void _ZN10S4665C3_nt3v25Ev();
extern void _ZN10S4665C3_nt3v26Ev();
extern void _ZN10S4665C3_nt3v27Ev();
extern void _ZN10S4665C3_nt3v28Ev();
extern void _ZN10S4665C3_nt3v29Ev();
extern void _ZN10S4665C3_nt3v30Ev();
extern void _ZN10S4665C3_nt3v31Ev();
extern void _ZN10S4665C3_nt3v32Ev();
extern void _ZN10S4665C3_nt3v33Ev();
extern void _ZN10S4665C3_nt3v34Ev();
extern void _ZN10S4665C3_nt3v35Ev();
extern void _ZN10S4665C3_nt3v36Ev();
extern void _ZN10S4665C3_nt3v37Ev();
extern void _ZN10S4665C3_nt3v38Ev();
extern void _ZN10S4665C3_nt3v39Ev();
extern void _ZN10S4665C3_nt3v40Ev();
extern void _ZN10S4665C3_nt3v41Ev();
extern void _ZN10S4665C3_nt3v42Ev();
extern void _ZN10S4665C3_nt3v43Ev();
extern void _ZN10S4665C3_nt3v44Ev();
extern void _ZN10S4665C3_nt3v45Ev();
extern void _ZN10S4665C3_nt3v46Ev();
extern void _ZN10S4665C3_nt3v47Ev();
static  VTBL_ENTRY vtc_S4665C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4665C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4665C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v47Ev,
};
extern VTBL_ENTRY _ZTI10S4665C3_nt[];
VTBL_ENTRY *P__ZTI10S4665C3_nt = _ZTI10S4665C3_nt; 
extern  VTBL_ENTRY _ZTV10S4665C3_nt[];
Class_Descriptor cd_S4665C3_nt = {  "S4665C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4665C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4665C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4665C3_nt),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4665C2  : S4665C3_nt {
  virtual void  v48(); // _ZN7S4665C23v48Ev
  virtual void  v49(); // _ZN7S4665C23v49Ev
  virtual void  v50(); // _ZN7S4665C23v50Ev
  virtual void  v51(); // _ZN7S4665C23v51Ev
  virtual void  v52(); // _ZN7S4665C23v52Ev
  virtual void  v53(); // _ZN7S4665C23v53Ev
  virtual void  v54(); // _ZN7S4665C23v54Ev
  virtual void  v55(); // _ZN7S4665C23v55Ev
  virtual void  v56(); // _ZN7S4665C23v56Ev
  virtual void  v57(); // _ZN7S4665C23v57Ev
  virtual void  v58(); // _ZN7S4665C23v58Ev
  virtual void  v59(); // _ZN7S4665C23v59Ev
  virtual void  v60(); // _ZN7S4665C23v60Ev
  virtual void  v61(); // _ZN7S4665C23v61Ev
  virtual void  v62(); // _ZN7S4665C23v62Ev
  virtual void  v63(); // _ZN7S4665C23v63Ev
  virtual void  v64(); // _ZN7S4665C23v64Ev
  virtual void  v65(); // _ZN7S4665C23v65Ev
  virtual void  v66(); // _ZN7S4665C23v66Ev
  virtual void  v67(); // _ZN7S4665C23v67Ev
  virtual void  v68(); // _ZN7S4665C23v68Ev
  virtual void  v69(); // _ZN7S4665C23v69Ev
  virtual void  v70(); // _ZN7S4665C23v70Ev
  ~S4665C2(); // tgen
  S4665C2(); // tgen
};
//SIG(-1 S4665C2) C1{ BC2{ vd 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23}


void  S4665C2 ::v48(){vfunc_called(this, "_ZN7S4665C23v48Ev");}
void  S4665C2 ::v49(){vfunc_called(this, "_ZN7S4665C23v49Ev");}
void  S4665C2 ::v50(){vfunc_called(this, "_ZN7S4665C23v50Ev");}
void  S4665C2 ::v51(){vfunc_called(this, "_ZN7S4665C23v51Ev");}
void  S4665C2 ::v52(){vfunc_called(this, "_ZN7S4665C23v52Ev");}
void  S4665C2 ::v53(){vfunc_called(this, "_ZN7S4665C23v53Ev");}
void  S4665C2 ::v54(){vfunc_called(this, "_ZN7S4665C23v54Ev");}
void  S4665C2 ::v55(){vfunc_called(this, "_ZN7S4665C23v55Ev");}
void  S4665C2 ::v56(){vfunc_called(this, "_ZN7S4665C23v56Ev");}
void  S4665C2 ::v57(){vfunc_called(this, "_ZN7S4665C23v57Ev");}
void  S4665C2 ::v58(){vfunc_called(this, "_ZN7S4665C23v58Ev");}
void  S4665C2 ::v59(){vfunc_called(this, "_ZN7S4665C23v59Ev");}
void  S4665C2 ::v60(){vfunc_called(this, "_ZN7S4665C23v60Ev");}
void  S4665C2 ::v61(){vfunc_called(this, "_ZN7S4665C23v61Ev");}
void  S4665C2 ::v62(){vfunc_called(this, "_ZN7S4665C23v62Ev");}
void  S4665C2 ::v63(){vfunc_called(this, "_ZN7S4665C23v63Ev");}
void  S4665C2 ::v64(){vfunc_called(this, "_ZN7S4665C23v64Ev");}
void  S4665C2 ::v65(){vfunc_called(this, "_ZN7S4665C23v65Ev");}
void  S4665C2 ::v66(){vfunc_called(this, "_ZN7S4665C23v66Ev");}
void  S4665C2 ::v67(){vfunc_called(this, "_ZN7S4665C23v67Ev");}
void  S4665C2 ::v68(){vfunc_called(this, "_ZN7S4665C23v68Ev");}
void  S4665C2 ::v69(){vfunc_called(this, "_ZN7S4665C23v69Ev");}
void  S4665C2 ::v70(){vfunc_called(this, "_ZN7S4665C23v70Ev");}
S4665C2 ::~S4665C2(){ note_dtor("S4665C2", this);} // tgen
S4665C2 ::S4665C2(){ note_ctor("S4665C2", this);} // tgen

static void Test_S4665C2()
{
  extern Class_Descriptor cd_S4665C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4665C2, buf);
    S4665C2 *dp, &lv = *(dp=new (buf) S4665C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4665C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4665C2)");
    check_base_class_offset(lv, (S4665C3_nt*), 0, "S4665C2");
    test_class_info(&lv, &cd_S4665C2);
    dp->~S4665C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4665C2(Test_S4665C2, "S4665C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4665C2C1Ev();
extern void _ZN7S4665C2D1Ev();
Name_Map name_map_S4665C2[] = {
  NSPAIR(_ZN7S4665C2C1Ev),
  NSPAIR(_ZN7S4665C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4665C3_nt;
extern VTBL_ENTRY _ZTI10S4665C3_nt[];
extern  VTBL_ENTRY _ZTV10S4665C3_nt[];
static Base_Class bases_S4665C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4665C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4665C2[];
extern void _ZN7S4665C2D1Ev();
extern void _ZN7S4665C2D0Ev();
extern void _ZN10S4665C3_nt3v22Ev();
extern void _ZN10S4665C3_nt3v23Ev();
extern void _ZN10S4665C3_nt3v24Ev();
extern void _ZN10S4665C3_nt3v25Ev();
extern void _ZN10S4665C3_nt3v26Ev();
extern void _ZN10S4665C3_nt3v27Ev();
extern void _ZN10S4665C3_nt3v28Ev();
extern void _ZN10S4665C3_nt3v29Ev();
extern void _ZN10S4665C3_nt3v30Ev();
extern void _ZN10S4665C3_nt3v31Ev();
extern void _ZN10S4665C3_nt3v32Ev();
extern void _ZN10S4665C3_nt3v33Ev();
extern void _ZN10S4665C3_nt3v34Ev();
extern void _ZN10S4665C3_nt3v35Ev();
extern void _ZN10S4665C3_nt3v36Ev();
extern void _ZN10S4665C3_nt3v37Ev();
extern void _ZN10S4665C3_nt3v38Ev();
extern void _ZN10S4665C3_nt3v39Ev();
extern void _ZN10S4665C3_nt3v40Ev();
extern void _ZN10S4665C3_nt3v41Ev();
extern void _ZN10S4665C3_nt3v42Ev();
extern void _ZN10S4665C3_nt3v43Ev();
extern void _ZN10S4665C3_nt3v44Ev();
extern void _ZN10S4665C3_nt3v45Ev();
extern void _ZN10S4665C3_nt3v46Ev();
extern void _ZN10S4665C3_nt3v47Ev();
extern void _ZN7S4665C23v48Ev();
extern void _ZN7S4665C23v49Ev();
extern void _ZN7S4665C23v50Ev();
extern void _ZN7S4665C23v51Ev();
extern void _ZN7S4665C23v52Ev();
extern void _ZN7S4665C23v53Ev();
extern void _ZN7S4665C23v54Ev();
extern void _ZN7S4665C23v55Ev();
extern void _ZN7S4665C23v56Ev();
extern void _ZN7S4665C23v57Ev();
extern void _ZN7S4665C23v58Ev();
extern void _ZN7S4665C23v59Ev();
extern void _ZN7S4665C23v60Ev();
extern void _ZN7S4665C23v61Ev();
extern void _ZN7S4665C23v62Ev();
extern void _ZN7S4665C23v63Ev();
extern void _ZN7S4665C23v64Ev();
extern void _ZN7S4665C23v65Ev();
extern void _ZN7S4665C23v66Ev();
extern void _ZN7S4665C23v67Ev();
extern void _ZN7S4665C23v68Ev();
extern void _ZN7S4665C23v69Ev();
extern void _ZN7S4665C23v70Ev();
static  VTBL_ENTRY vtc_S4665C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4665C2[0]),
  (VTBL_ENTRY)&_ZN7S4665C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4665C2D0Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v61Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v62Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v63Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v64Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v65Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v66Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v67Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v68Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v69Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v70Ev,
};
extern VTBL_ENTRY _ZTI7S4665C2[];
extern  VTBL_ENTRY _ZTV7S4665C2[];
Class_Descriptor cd_S4665C2 = {  "S4665C2", // class name
  bases_S4665C2, 1,
  &(vtc_S4665C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4665C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4665C2),53, //virtual function table var
  2, // 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  S4665C1  : S4665C2 {
  virtual  ~S4665C1(); // _ZN7S4665C1D1Ev
  virtual void  v1(); // _ZN7S4665C12v1Ev
  virtual void  v2(); // _ZN7S4665C12v2Ev
  virtual void  v3(); // _ZN7S4665C12v3Ev
  virtual void  v4(); // _ZN7S4665C12v4Ev
  virtual void  v5(); // _ZN7S4665C12v5Ev
  virtual void  v6(); // _ZN7S4665C12v6Ev
  virtual void  v7(); // _ZN7S4665C12v7Ev
  virtual void  v8(); // _ZN7S4665C12v8Ev
  virtual void  v9(); // _ZN7S4665C12v9Ev
  virtual void  v10(); // _ZN7S4665C13v10Ev
  virtual void  v11(); // _ZN7S4665C13v11Ev
  virtual void  v12(); // _ZN7S4665C13v12Ev
  virtual void  v13(); // _ZN7S4665C13v13Ev
  virtual void  v14(); // _ZN7S4665C13v14Ev
  virtual void  v15(); // _ZN7S4665C13v15Ev
  virtual void  v16(); // _ZN7S4665C13v16Ev
  virtual void  v17(); // _ZN7S4665C13v17Ev
  virtual void  v18(); // _ZN7S4665C13v18Ev
  virtual void  v19(); // _ZN7S4665C13v19Ev
  virtual void  v20(); // _ZN7S4665C13v20Ev
  virtual void  v21(); // _ZN7S4665C13v21Ev
  S4665C1(); // tgen
};
//SIG(1 S4665C1) C1{ BC2{ BC3{ vd 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} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21}


 S4665C1 ::~S4665C1(){ note_dtor("S4665C1", this);}
void  S4665C1 ::v1(){vfunc_called(this, "_ZN7S4665C12v1Ev");}
void  S4665C1 ::v2(){vfunc_called(this, "_ZN7S4665C12v2Ev");}
void  S4665C1 ::v3(){vfunc_called(this, "_ZN7S4665C12v3Ev");}
void  S4665C1 ::v4(){vfunc_called(this, "_ZN7S4665C12v4Ev");}
void  S4665C1 ::v5(){vfunc_called(this, "_ZN7S4665C12v5Ev");}
void  S4665C1 ::v6(){vfunc_called(this, "_ZN7S4665C12v6Ev");}
void  S4665C1 ::v7(){vfunc_called(this, "_ZN7S4665C12v7Ev");}
void  S4665C1 ::v8(){vfunc_called(this, "_ZN7S4665C12v8Ev");}
void  S4665C1 ::v9(){vfunc_called(this, "_ZN7S4665C12v9Ev");}
void  S4665C1 ::v10(){vfunc_called(this, "_ZN7S4665C13v10Ev");}
void  S4665C1 ::v11(){vfunc_called(this, "_ZN7S4665C13v11Ev");}
void  S4665C1 ::v12(){vfunc_called(this, "_ZN7S4665C13v12Ev");}
void  S4665C1 ::v13(){vfunc_called(this, "_ZN7S4665C13v13Ev");}
void  S4665C1 ::v14(){vfunc_called(this, "_ZN7S4665C13v14Ev");}
void  S4665C1 ::v15(){vfunc_called(this, "_ZN7S4665C13v15Ev");}
void  S4665C1 ::v16(){vfunc_called(this, "_ZN7S4665C13v16Ev");}
void  S4665C1 ::v17(){vfunc_called(this, "_ZN7S4665C13v17Ev");}
void  S4665C1 ::v18(){vfunc_called(this, "_ZN7S4665C13v18Ev");}
void  S4665C1 ::v19(){vfunc_called(this, "_ZN7S4665C13v19Ev");}
void  S4665C1 ::v20(){vfunc_called(this, "_ZN7S4665C13v20Ev");}
void  S4665C1 ::v21(){vfunc_called(this, "_ZN7S4665C13v21Ev");}
S4665C1 ::S4665C1(){ note_ctor("S4665C1", this);} // tgen

static void Test_S4665C1()
{
  extern Class_Descriptor cd_S4665C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4665C1, buf);
    S4665C1 *dp, &lv = *(dp=new (buf) S4665C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4665C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4665C1)");
    check_base_class_offset(lv, (S4665C3_nt*)(S4665C2*), 0, "S4665C1");
    check_base_class_offset(lv, (S4665C2*), 0, "S4665C1");
    test_class_info(&lv, &cd_S4665C1);
    dp->~S4665C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4665C1(Test_S4665C1, "S4665C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4665C1C1Ev();
extern void _ZN7S4665C1D1Ev();
Name_Map name_map_S4665C1[] = {
  NSPAIR(_ZN7S4665C1C1Ev),
  NSPAIR(_ZN7S4665C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4665C3_nt;
extern VTBL_ENTRY _ZTI10S4665C3_nt[];
extern  VTBL_ENTRY _ZTV10S4665C3_nt[];
extern Class_Descriptor cd_S4665C2;
extern VTBL_ENTRY _ZTI7S4665C2[];
extern  VTBL_ENTRY _ZTV7S4665C2[];
static Base_Class bases_S4665C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4665C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4665C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4665C1[];
extern void _ZN7S4665C1D1Ev();
extern void _ZN7S4665C1D0Ev();
extern void _ZN10S4665C3_nt3v22Ev();
extern void _ZN10S4665C3_nt3v23Ev();
extern void _ZN10S4665C3_nt3v24Ev();
extern void _ZN10S4665C3_nt3v25Ev();
extern void _ZN10S4665C3_nt3v26Ev();
extern void _ZN10S4665C3_nt3v27Ev();
extern void _ZN10S4665C3_nt3v28Ev();
extern void _ZN10S4665C3_nt3v29Ev();
extern void _ZN10S4665C3_nt3v30Ev();
extern void _ZN10S4665C3_nt3v31Ev();
extern void _ZN10S4665C3_nt3v32Ev();
extern void _ZN10S4665C3_nt3v33Ev();
extern void _ZN10S4665C3_nt3v34Ev();
extern void _ZN10S4665C3_nt3v35Ev();
extern void _ZN10S4665C3_nt3v36Ev();
extern void _ZN10S4665C3_nt3v37Ev();
extern void _ZN10S4665C3_nt3v38Ev();
extern void _ZN10S4665C3_nt3v39Ev();
extern void _ZN10S4665C3_nt3v40Ev();
extern void _ZN10S4665C3_nt3v41Ev();
extern void _ZN10S4665C3_nt3v42Ev();
extern void _ZN10S4665C3_nt3v43Ev();
extern void _ZN10S4665C3_nt3v44Ev();
extern void _ZN10S4665C3_nt3v45Ev();
extern void _ZN10S4665C3_nt3v46Ev();
extern void _ZN10S4665C3_nt3v47Ev();
extern void _ZN7S4665C23v48Ev();
extern void _ZN7S4665C23v49Ev();
extern void _ZN7S4665C23v50Ev();
extern void _ZN7S4665C23v51Ev();
extern void _ZN7S4665C23v52Ev();
extern void _ZN7S4665C23v53Ev();
extern void _ZN7S4665C23v54Ev();
extern void _ZN7S4665C23v55Ev();
extern void _ZN7S4665C23v56Ev();
extern void _ZN7S4665C23v57Ev();
extern void _ZN7S4665C23v58Ev();
extern void _ZN7S4665C23v59Ev();
extern void _ZN7S4665C23v60Ev();
extern void _ZN7S4665C23v61Ev();
extern void _ZN7S4665C23v62Ev();
extern void _ZN7S4665C23v63Ev();
extern void _ZN7S4665C23v64Ev();
extern void _ZN7S4665C23v65Ev();
extern void _ZN7S4665C23v66Ev();
extern void _ZN7S4665C23v67Ev();
extern void _ZN7S4665C23v68Ev();
extern void _ZN7S4665C23v69Ev();
extern void _ZN7S4665C23v70Ev();
extern void _ZN7S4665C12v1Ev();
extern void _ZN7S4665C12v2Ev();
extern void _ZN7S4665C12v3Ev();
extern void _ZN7S4665C12v4Ev();
extern void _ZN7S4665C12v5Ev();
extern void _ZN7S4665C12v6Ev();
extern void _ZN7S4665C12v7Ev();
extern void _ZN7S4665C12v8Ev();
extern void _ZN7S4665C12v9Ev();
extern void _ZN7S4665C13v10Ev();
extern void _ZN7S4665C13v11Ev();
extern void _ZN7S4665C13v12Ev();
extern void _ZN7S4665C13v13Ev();
extern void _ZN7S4665C13v14Ev();
extern void _ZN7S4665C13v15Ev();
extern void _ZN7S4665C13v16Ev();
extern void _ZN7S4665C13v17Ev();
extern void _ZN7S4665C13v18Ev();
extern void _ZN7S4665C13v19Ev();
extern void _ZN7S4665C13v20Ev();
extern void _ZN7S4665C13v21Ev();
static  VTBL_ENTRY vtc_S4665C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4665C1[0]),
  (VTBL_ENTRY)&_ZN7S4665C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4665C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4665C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v60Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v61Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v62Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v63Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v64Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v65Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v66Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v67Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v68Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v69Ev,
  (VTBL_ENTRY)&_ZN7S4665C23v70Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4665C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v19Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v20Ev,
  (VTBL_ENTRY)&_ZN7S4665C13v21Ev,
};
extern VTBL_ENTRY _ZTI7S4665C1[];
extern  VTBL_ENTRY _ZTV7S4665C1[];
Class_Descriptor cd_S4665C1 = {  "S4665C1", // class name
  bases_S4665C1, 2,
  &(vtc_S4665C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4665C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4665C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C2  : S2123C30 {
  char s2863c2f0:5;
  virtual  ~S2863C2(); // _ZN7S2863C2D1Ev
  S2863C2(); // tgen
};
//SIG(-1 S2863C2) C1{ BC2{ m} vd Fc:5}


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

static void Test_S2863C2()
{
  extern Class_Descriptor cd_S2863C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2863C2, buf);
    S2863C2 *dp, &lv = *(dp=new (buf) S2863C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2863C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C2)");
    check_base_class_offset(lv, (S2123C30*), 0, "S2863C2");
    set_bf_and_test(lv, s2863c2f0, ABISELECT(8,4), 0, 5, 1, "S2863C2");
    set_bf_and_test(lv, s2863c2f0, ABISELECT(8,4), 0, 5, hide_sll(1LL<<4), "S2863C2");
    test_class_info(&lv, &cd_S2863C2);
    dp->~S2863C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C2(Test_S2863C2, "S2863C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2863C2C1Ev();
extern void _ZN7S2863C2D1Ev();
Name_Map name_map_S2863C2[] = {
  NSPAIR(_ZN7S2863C2C1Ev),
  NSPAIR(_ZN7S2863C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
static Base_Class bases_S2863C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2863C2[];
extern void _ZN7S2863C2D1Ev();
extern void _ZN7S2863C2D0Ev();
static  VTBL_ENTRY vtc_S2863C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C2[0]),
  (VTBL_ENTRY)&_ZN7S2863C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S2863C2[];
extern  VTBL_ENTRY _ZTV7S2863C2[];
Class_Descriptor cd_S2863C2 = {  "S2863C2", // class name
  bases_S2863C2, 1,
  &(vtc_S2863C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2863C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2863C2),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  S2863C9  : S2123C30 , virtual S2123C23 , virtual S2123C27 {
  virtual void  v2(); // _ZN7S2863C92v2Ev
  ~S2863C9(); // tgen
  S2863C9(); // tgen
};
//SIG(-1 S2863C9) C1{ BC2{ m} VBC3{ m} VBC4{ m} v1}


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

static void Test_S2863C9()
{
  extern Class_Descriptor cd_S2863C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2863C9, buf);
    S2863C9 *dp, &lv = *(dp=new (buf) S2863C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2863C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C9)");
    check_base_class_offset(lv, (S2123C30*), 0, "S2863C9");
    check_base_class_offset(lv, (S2123C23*), 0, "S2863C9");
    check_base_class_offset(lv, (S2123C27*), 0, "S2863C9");
    test_class_info(&lv, &cd_S2863C9);
    dp->~S2863C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C9(Test_S2863C9, "S2863C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2863C9C1Ev();
extern void _ZN7S2863C9D1Ev();
Name_Map name_map_S2863C9[] = {
  NSPAIR(_ZN7S2863C9C1Ev),
  NSPAIR(_ZN7S2863C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
static Base_Class bases_S2863C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2863C9[];
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY vtc_S2863C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S2863C9[];
static  VTT_ENTRY vtt_S2863C9[] = {
  {&(_ZTV7S2863C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
Class_Descriptor cd_S2863C9 = {  "S2863C9", // class name
  bases_S2863C9, 3,
  &(vtc_S2863C9[0]), // expected_vtbl_contents
  &(vtt_S2863C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2863C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2863C9),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2863C9),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  S2863C10_nt  : virtual S2123C30 , S2123C27 , S2123C23 {
  ~S2863C10_nt(); // tgen
  S2863C10_nt(); // tgen
};
//SIG(-1 S2863C10_nt) C1{ VBC2{ m} BC3{ m} BC4{ m}}


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

//skip512 S2863C10_nt

#else // __cplusplus

extern void _ZN11S2863C10_ntC1Ev();
extern void _ZN11S2863C10_ntD1Ev();
Name_Map name_map_S2863C10_nt[] = {
  NSPAIR(_ZN11S2863C10_ntC1Ev),
  NSPAIR(_ZN11S2863C10_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
static Base_Class bases_S2863C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
static  VTBL_ENTRY vtc_S2863C10_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern VTBL_ENTRY _ZTV11S2863C10_nt[];
static  VTT_ENTRY vtt_S2863C10_nt[] = {
  {&(_ZTV11S2863C10_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
VTBL_ENTRY *P__ZTI11S2863C10_nt = _ZTI11S2863C10_nt; 
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
Class_Descriptor cd_S2863C10_nt = {  "S2863C10_nt", // class name
  bases_S2863C10_nt, 3,
  &(vtc_S2863C10_nt[0]), // expected_vtbl_contents
  &(vtt_S2863C10_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S2863C10_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S2863C10_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S2863C10_nt),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  S2863C11_nt  {
  void  mf2863c11(); // _ZN11S2863C11_nt9mf2863c11Ev
  virtual  ~S2863C11_nt(); // _ZN11S2863C11_ntD1Ev
  S2863C11_nt(); // tgen
};
//SIG(-1 S2863C11_nt) C1{ vd m}


void  S2863C11_nt ::mf2863c11(){}
 S2863C11_nt ::~S2863C11_nt(){ note_dtor("S2863C11_nt", this);}
S2863C11_nt ::S2863C11_nt(){ note_ctor("S2863C11_nt", this);} // tgen

//skip512 S2863C11_nt

#else // __cplusplus

extern void _ZN11S2863C11_ntC1Ev();
extern void _ZN11S2863C11_ntD1Ev();
Name_Map name_map_S2863C11_nt[] = {
  NSPAIR(_ZN11S2863C11_ntC1Ev),
  NSPAIR(_ZN11S2863C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern void _ZN11S2863C11_ntD1Ev();
extern void _ZN11S2863C11_ntD0Ev();
static  VTBL_ENTRY vtc_S2863C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S2863C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2863C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
VTBL_ENTRY *P__ZTI11S2863C11_nt = _ZTI11S2863C11_nt; 
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
Class_Descriptor cd_S2863C11_nt = {  "S2863C11_nt", // class name
  0,0,//no base classes
  &(vtc_S2863C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S2863C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2863C11_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  S2863C8  : virtual S2123C30 , S2123C23 , S2863C9 , virtual S2863C10_nt , virtual S2863C11_nt {
  char s2863c8f0;
  virtual  ~S2863C8(); // _ZN7S2863C8D2Ev
  S2863C8(); // tgen
};
//SIG(-1 S2863C8) C1{ VBC2{ m} BC3{ m} BC4{ BC2 VBC3 VBC5{ m} v1} VBC6{ VBC2 BC5 BC3} VBC7{ vd m} vd Fc}


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

static void Test_S2863C8()
{
  extern Class_Descriptor cd_S2863C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S2863C8, buf);
    S2863C8 *dp, &lv = *(dp=new (buf) S2863C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S2863C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C8)");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*), ABISELECT(9,5), "S2863C8");
    check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(9,5), "S2863C8");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*), 0, "S2863C8");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*), 0, "S2863C8");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*), ABISELECT(9,5), "S2863C8");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*), 0, "S2863C8");
    check_base_class_offset(lv, (S2863C9*), 0, "S2863C8");
    check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(16,8), "S2863C8");
    check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(16,8), "S2863C8");
    check_base_class_offset(lv, (S2863C10_nt*), ABISELECT(16,8), "S2863C8");
    check_base_class_offset(lv, (S2863C11_nt*), ABISELECT(24,12), "S2863C8");
    check_field_offset(lv, s2863c8f0, ABISELECT(8,4), "S2863C8.s2863c8f0");
    test_class_info(&lv, &cd_S2863C8);
    dp->~S2863C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C8(Test_S2863C8, "S2863C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S2863C8C1Ev();
extern void _ZN7S2863C8D2Ev();
Name_Map name_map_S2863C8[] = {
  NSPAIR(_ZN7S2863C8C1Ev),
  NSPAIR(_ZN7S2863C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
static Base_Class bases_S2863C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C27,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C10_nt,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2863C11_nt,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2863C8[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn24_N7S2863C8D1Ev,_ZThn12_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn24_N7S2863C8D0Ev,_ZThn12_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C8[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S2863C8[];
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C9__7S2863C8[] = {
  0,
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTT_ENTRY vtt_S2863C8[] = {
  {&(_ZTV7S2863C8[7]),  7,18},
  {&(_tg__ZTV7S2863C9__7S2863C8[4]),  4,5},
  {&(_ZTV7S2863C8[13]),  13,18},
  {&(_ZTV7S2863C8[16]),  16,18},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
static VTBL_ENTRY alt_thunk_names117[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2863C8D0Ev,_ZThn12_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2863C8D1Ev,_ZThn12_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C8 = {  "S2863C8", // class name
  bases_S2863C8, 10,
  &(vtc_S2863C8[0]), // expected_vtbl_contents
  &(vtt_S2863C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S2863C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2863C8),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2863C8),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names117,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C12  : virtual S2863C10_nt , S2863C8 {
  ::S2863C11_nt s2863c12f0;
  virtual  ~S2863C12(); // _ZN8S2863C12D2Ev
  S2863C12(); // tgen
};
//SIG(-1 S2863C12) C1{ VBC2{ VBC3{ m} BC4{ m} BC5{ m}} BC6{ VBC3 BC5 BC7{ BC3 VBC5 VBC4 v1} VBC2 VBC8{ vd m} vd Fc} vd FC8}


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

static void Test_S2863C12()
{
  extern Class_Descriptor cd_S2863C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S2863C12, buf);
    S2863C12 *dp, &lv = *(dp=new (buf) S2863C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S2863C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C12)");
    check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(32,16), "S2863C12");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(32,16), "S2863C12");
    check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(24,12), "S2863C12");
    check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(24,12), "S2863C12");
    check_base_class_offset(lv, (S2863C10_nt*), ABISELECT(24,12), "S2863C12");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(24,12), "S2863C12");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), 0, "S2863C12");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), 0, "S2863C12");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), ABISELECT(32,16), "S2863C12");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), 0, "S2863C12");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*), 0, "S2863C12");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(32,16), "S2863C12");
    check_base_class_offset(lv, (S2863C8*), 0, "S2863C12");
    check_field_offset(lv, s2863c12f0, ABISELECT(16,8), "S2863C12.s2863c12f0");
    test_class_info(&lv, &cd_S2863C12);
    dp->~S2863C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C12(Test_S2863C12, "S2863C12", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S2863C12C1Ev();
extern void _ZN8S2863C12D2Ev();
Name_Map name_map_S2863C12[] = {
  NSPAIR(_ZN8S2863C12C1Ev),
  NSPAIR(_ZN8S2863C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
static Base_Class bases_S2863C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    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, 1},
  {&cd_S2123C27,    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_S2123C23,    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_S2863C10_nt,    ABISELECT(24,12), //bcp->offset
    10, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    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
    8, //immediately_derived
  0, 1},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2863C9,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2863C11_nt,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C8,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2863C12[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C12D1Ev();
extern void _ZN8S2863C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev)();
extern void ABISELECT(_ZThn32_N8S2863C12D1Ev,_ZThn16_N8S2863C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev)();
extern void ABISELECT(_ZThn32_N8S2863C12D0Ev,_ZThn16_N8S2863C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C12[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(32,16),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C12D0Ev,
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S2863C12[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C12[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(32,16),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__8S2863C12[] = {
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__8S2863C12[] = {
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S2863C8D1Ev,_ZThn16_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S2863C8D0Ev,_ZThn16_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__8S2863C12[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTT_ENTRY vtt_S2863C12[] = {
  {&(_ZTV8S2863C12[7]),  7,18},
  {&(_tg__ZTV7S2863C8__8S2863C12[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__8S2863C12[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__8S2863C12[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__8S2863C12[3]),  3,5},
  {&(_ZTV8S2863C12[13]),  13,18},
  {&(_ZTV8S2863C12[16]),  16,18},
  {&(_tg__ZTV11S2863C10_nt__8S2863C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2863C12[];
extern  VTBL_ENTRY _ZTV8S2863C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C12[];
static VTBL_ENTRY alt_thunk_names118[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2863C8D0Ev,_ZThn16_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2863C8D1Ev,_ZThn16_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S2863C12D0Ev,_ZThn16_N8S2863C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S2863C12D1Ev,_ZThn16_N8S2863C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C12 = {  "S2863C12", // class name
  bases_S2863C12, 11,
  &(vtc_S2863C12[0]), // expected_vtbl_contents
  &(vtt_S2863C12[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S2863C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2863C12),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2863C12),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names118,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C7  : S2863C8 , S2123C27 , virtual S2863C12 , S2123C23 {
  virtual void  v3(); // _ZN7S2863C72v3Ev
  ~S2863C7(); // tgen
  S2863C7(); // tgen
};
//SIG(-1 S2863C7) C1{ BC2{ VBC3{ m} BC4{ m} BC5{ BC3 VBC4 VBC6{ m} v2} VBC7{ VBC3 BC6 BC4} VBC8{ vd m} vd Fc} BC6 VBC9{ VBC7 BC2 vd FC8} BC4 v1}


void  S2863C7 ::v3(){vfunc_called(this, "_ZN7S2863C72v3Ev");}
S2863C7 ::~S2863C7(){ note_dtor("S2863C7", this);} // tgen
S2863C7 ::S2863C7(){ note_ctor("S2863C7", this);} // tgen

static void Test_S2863C7()
{
  extern Class_Descriptor cd_S2863C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S2863C7, buf);
    S2863C7 *dp, &lv = *(dp=new (buf) S2863C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S2863C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C7)");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(9,5), "S2863C7");
    check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(9,5), "S2863C7");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C12*), ABISELECT(9,5), "S2863C7");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), 0, "S2863C7");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), 0, "S2863C7");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), ABISELECT(10,6), "S2863C7");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(10,6), "S2863C7");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), ABISELECT(9,5), "S2863C7");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(9,5), "S2863C7");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*), 0, "S2863C7");
    check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(16,8), "S2863C7");
    check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(16,8), "S2863C7");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(16,8), "S2863C7");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C12*), ABISELECT(16,8), "S2863C7");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C12*), ABISELECT(16,8), "S2863C7");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(24,12), "S2863C7");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C12*), ABISELECT(24,12), "S2863C7");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C8*), 0, "S2863C7");
    /*is_ambiguous_... S2863C7::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*), 0, "S2863C7");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C12*), ABISELECT(32,16), "S2863C7");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(32,16), "S2863C7");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(32,16), "S2863C7");
    check_base_class_offset(lv, (S2863C8*)(S2863C12*), ABISELECT(32,16), "S2863C7");
    check_base_class_offset(lv, (S2863C12*), ABISELECT(32,16), "S2863C7");
    /*is_ambiguous_... S2863C7::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*), ABISELECT(9,5), "S2863C7");
    test_class_info(&lv, &cd_S2863C7);
    dp->~S2863C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C7(Test_S2863C7, "S2863C7", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S2863C7C1Ev();
extern void _ZN7S2863C7D1Ev();
Name_Map name_map_S2863C7[] = {
  NSPAIR(_ZN7S2863C7C1Ev),
  NSPAIR(_ZN7S2863C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2863C12;
extern VTBL_ENTRY _ZTI8S2863C12[];
extern  VTBL_ENTRY _ZTV8S2863C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C12[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
static Base_Class bases_S2863C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2123C27,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2123C27,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C10_nt,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C11_nt,    ABISELECT(24,12), //bcp->offset
    15, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C8,    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},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    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_S2123C30,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2863C9,    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
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2863C8,    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
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2863C12,    ABISELECT(32,16), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2123C23,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2863C7[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C7D1Ev();
extern void _ZN7S2863C7D0Ev();
extern void _ZN7S2863C72v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S2863C7D1Ev,_ZThn12_N7S2863C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S2863C7D0Ev,_ZThn12_N7S2863C7D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S2863C7D1Ev,_ZThn16_N7S2863C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S2863C7D0Ev,_ZThn16_N7S2863C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C7[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2863C72v3Ev,
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev),
  ABISELECT(-32,-16),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-23,-11),
  ABISELECT(-23,-11),
  ABISELECT(-22,-10),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S2863C7[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__7S2863C7[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__7S2863C7[] = {
  ABISELECT(9,5),
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__7S2863C7[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn24_N7S2863C8D1Ev,_ZThn12_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn24_N7S2863C8D0Ev,_ZThn12_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__7S2863C7[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C7[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C12D1Ev();
extern void _ZN8S2863C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C12__7S2863C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-23,-11),
  ABISELECT(-23,-11),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C12D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C88S2863C12__A1__7S2863C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-23,-11),
  ABISELECT(-23,-11),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C88S2863C12__A1__7S2863C7[] = {
  ABISELECT(-23,-11),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C88S2863C12__A1__7S2863C7[] = {
  ABISELECT(-7,-3),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C88S2863C12__A1__7S2863C7[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C12__7S2863C7[] = {
  ABISELECT(-7,-3),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C12__7S2863C7[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev),
};
static  VTT_ENTRY vtt_S2863C7[] = {
  {&(_ZTV7S2863C7[8]),  8,32},
  {&(_tg__ZTV7S2863C8__7S2863C7[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__7S2863C7[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__7S2863C7[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__7S2863C7[3]),  3,5},
  {&(_ZTV7S2863C7[15]),  15,32},
  {&(_ZTV7S2863C7[18]),  18,32},
  {&(_ZTV7S2863C7[29]),  29,32},
  {&(_tg__ZTV11S2863C10_nt__7S2863C7[3]),  3,3},
  {&(_tg__ZTV8S2863C12__7S2863C7[7]),  7,10},
  {&(_tg__ZTV7S2863C88S2863C12__A1__7S2863C7[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C88S2863C12__A1__7S2863C7[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C88S2863C12__A1__7S2863C7[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C88S2863C12__A1__7S2863C7[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C12__7S2863C7[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C12__7S2863C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2863C7[];
extern  VTBL_ENTRY _ZTV7S2863C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C7[];
static VTBL_ENTRY alt_thunk_names119[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2863C8D0Ev,_ZThn12_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2863C8D1Ev,_ZThn12_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2863C7D0Ev,_ZThn16_N7S2863C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2863C7D1Ev,_ZThn16_N7S2863C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2863C7D0Ev,_ZThn12_N7S2863C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2863C7D1Ev,_ZThn12_N7S2863C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C7 = {  "S2863C7", // class name
  bases_S2863C7, 18,
  &(vtc_S2863C7[0]), // expected_vtbl_contents
  &(vtt_S2863C7[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S2863C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2863C7),32, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2863C7),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names119,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C14  : virtual S2863C8 , S2863C9 {
  ::S468C20_nt s2863c14f0;
  ~S2863C14(); // tgen
  S2863C14(); // tgen
};
//SIG(-1 S2863C14) C1{ VBC2{ VBC3{ m} BC4{ m} BC5{ BC3 VBC4 VBC6{ m} v1} VBC7{ VBC3 BC6 BC4} VBC8{ vd m} vd Fc} BC5 FC9{}}


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

static void Test_S2863C14()
{
  extern Class_Descriptor cd_S2863C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S2863C14, buf);
    S2863C14 *dp, &lv = *(dp=new (buf) S2863C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S2863C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C14)");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(25,13), "S2863C14");
    check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(25,13), "S2863C14");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), ABISELECT(16,8), "S2863C14");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), ABISELECT(16,8), "S2863C14");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), 0, "S2863C14");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*), 0, "S2863C14");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), 0, "S2863C14");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*), 0, "S2863C14");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*), ABISELECT(16,8), "S2863C14");
    check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(32,16), "S2863C14");
    check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(32,16), "S2863C14");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(32,16), "S2863C14");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(40,20), "S2863C14");
    check_base_class_offset(lv, (S2863C8*), ABISELECT(16,8), "S2863C14");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*), 0, "S2863C14");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2863C9*), 0, "S2863C14");
    check_field_offset(lv, s2863c14f0, ABISELECT(8,4), "S2863C14.s2863c14f0");
    test_class_info(&lv, &cd_S2863C14);
    dp->~S2863C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C14(Test_S2863C14, "S2863C14", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S2863C14C1Ev();
extern void _ZN8S2863C14D1Ev();
Name_Map name_map_S2863C14[] = {
  NSPAIR(_ZN8S2863C14C1Ev),
  NSPAIR(_ZN8S2863C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
static Base_Class bases_S2863C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2123C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C11_nt,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C8,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2863C14[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C14D1Ev();
extern void _ZN8S2863C14D0Ev();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S2863C14D1Ev,_ZThn8_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S2863C14D0Ev,_ZThn8_N8S2863C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn40_N8S2863C14D1Ev,_ZThn20_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn40_N8S2863C14D0Ev,_ZThn20_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C14[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(25,13),
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev),
  ABISELECT(-7,-3),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S2863C14[];
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C9__A1__8S2863C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C14[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__8S2863C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__8S2863C14[] = {
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn24_N7S2863C8D1Ev,_ZThn12_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn24_N7S2863C8D0Ev,_ZThn12_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__8S2863C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C14[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTT_ENTRY vtt_S2863C14[] = {
  {&(_ZTV8S2863C14[8]),  8,31},
  {&(_tg__ZTV7S2863C9__A1__8S2863C14[4]),  4,5},
  {&(_ZTV8S2863C14[20]),  20,31},
  {&(_ZTV8S2863C14[26]),  26,31},
  {&(_ZTV8S2863C14[29]),  29,31},
  {&(_tg__ZTV7S2863C8__8S2863C14[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__8S2863C14[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__8S2863C14[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__8S2863C14[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2863C14[];
extern  VTBL_ENTRY _ZTV8S2863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C14[];
static VTBL_ENTRY alt_thunk_names120[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2863C8D0Ev,_ZThn12_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2863C8D1Ev,_ZThn12_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C14D0Ev,_ZThn20_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C14D1Ev,_ZThn20_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2863C14D0Ev,_ZThn8_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2863C14D1Ev,_ZThn8_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C14 = {  "S2863C14", // class name
  bases_S2863C14, 13,
  &(vtc_S2863C14[0]), // expected_vtbl_contents
  &(vtt_S2863C14[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S2863C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2863C14),31, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2863C14),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names120,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C13  : S2123C27 , virtual S2863C10_nt , S2863C14 {
  ~S2863C13(); // tgen
  S2863C13(); // tgen
};
//SIG(-1 S2863C13) C1{ BC2{ m} VBC3{ VBC4{ m} BC2 BC5{ m}} BC6{ VBC7{ VBC4 BC5 BC8{ BC4 VBC5 VBC2 v1} VBC3 VBC9{ vd m} vd Fc} BC8 FC10{}}}


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

static void Test_S2863C13()
{
  extern Class_Descriptor cd_S2863C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S2863C13, buf);
    S2863C13 *dp, &lv = *(dp=new (buf) S2863C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S2863C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C13)");
    /*is_ambiguous_... S2863C13::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*), 0, "S2863C13");
    check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(24,12), "S2863C13");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(24,12), "S2863C13");
    check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(16,8), "S2863C13");
    check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(16,8), "S2863C13");
    check_base_class_offset(lv, (S2863C10_nt*), ABISELECT(16,8), "S2863C13");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(16,8), "S2863C13");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), ABISELECT(32,16), "S2863C13");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), ABISELECT(32,16), "S2863C13");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), 0, "S2863C13");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C14*), 0, "S2863C13");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), ABISELECT(41,21), "S2863C13");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C14*), ABISELECT(41,21), "S2863C13");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*), ABISELECT(32,16), "S2863C13");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(48,24), "S2863C13");
    check_base_class_offset(lv, (S2863C8*)(S2863C14*), ABISELECT(32,16), "S2863C13");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C14*), 0, "S2863C13");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C14*), 0, "S2863C13");
    check_base_class_offset(lv, (S2863C14*), 0, "S2863C13");
    test_class_info(&lv, &cd_S2863C13);
    dp->~S2863C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C13(Test_S2863C13, "S2863C13", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S2863C13C1Ev();
extern void _ZN8S2863C13D1Ev();
Name_Map name_map_S2863C13[] = {
  NSPAIR(_ZN8S2863C13C1Ev),
  NSPAIR(_ZN8S2863C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C14;
extern VTBL_ENTRY _ZTI8S2863C14[];
extern  VTBL_ENTRY _ZTV8S2863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C14[];
static Base_Class bases_S2863C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C30,    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
    4, //immediately_derived
  0, 1},
  {&cd_S2123C27,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C10_nt,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2123C23,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    ABISELECT(41,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2863C11_nt,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2863C8,    ABISELECT(32,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2863C14,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2863C13[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C13D1Ev();
extern void _ZN8S2863C13D0Ev();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn32_N8S2863C13D1Ev,_ZThn16_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn32_N8S2863C13D0Ev,_ZThn16_N8S2863C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S2863C13D1Ev,_ZThn24_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S2863C13D0Ev,_ZThn24_N8S2863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C13[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(41,21),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D0Ev,
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  ABISELECT(-32,-16),
  0,
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(9,5),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S2863C13[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C14D1Ev();
extern void _ZN8S2863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C14__8S2863C13[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(41,21),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C98S2863C14__A1__8S2863C13[] = {
  ABISELECT(41,21),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S2863C14D1Ev,_ZThn16_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn32_N8S2863C14D0Ev,_ZThn16_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C14__8S2863C13[] = {
  ABISELECT(-32,-16),
  0,
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(9,5),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C14__8S2863C13[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn48_N8S2863C14D1Ev,_ZThn24_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn48_N8S2863C14D0Ev,_ZThn24_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C14__8S2863C13[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C13[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C13[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(9,5),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__8S2863C13[] = {
  ABISELECT(9,5),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__8S2863C13[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S2863C8D1Ev,_ZThn8_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S2863C8D0Ev,_ZThn8_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__8S2863C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTT_ENTRY vtt_S2863C13[] = {
  {&(_ZTV8S2863C13[8]),  8,31},
  {&(_tg__ZTV8S2863C14__8S2863C13[8]),  8,11},
  {&(_tg__ZTV7S2863C98S2863C14__A1__8S2863C13[4]),  4,5},
  {&(_tg__ZTV7S2863C8__8S2863C14__8S2863C13[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C14__8S2863C13[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C14__8S2863C13[3]),  3,5},
  {&(_ZTV8S2863C13[14]),  14,31},
  {&(_ZTV8S2863C13[23]),  23,31},
  {&(_ZTV8S2863C13[29]),  29,31},
  {&(_tg__ZTV11S2863C10_nt__8S2863C13[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C13[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__8S2863C13[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__8S2863C13[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__8S2863C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2863C13[];
extern  VTBL_ENTRY _ZTV8S2863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C13[];
static VTBL_ENTRY alt_thunk_names121[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2863C8D0Ev,_ZThn8_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2863C8D1Ev,_ZThn8_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C14D0Ev,_ZThn24_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C14D1Ev,_ZThn24_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S2863C14D0Ev,_ZThn16_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S2863C14D1Ev,_ZThn16_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C13D0Ev,_ZThn24_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C13D1Ev,_ZThn24_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S2863C13D0Ev,_ZThn16_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S2863C13D1Ev,_ZThn16_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C13 = {  "S2863C13", // class name
  bases_S2863C13, 15,
  &(vtc_S2863C13[0]), // expected_vtbl_contents
  &(vtt_S2863C13[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S2863C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2863C13),31, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2863C13),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names121,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C17  : S2863C13 {
  void *s2863c17f0;
  virtual  ~S2863C17(); // _ZN8S2863C17D2Ev
  S2863C17(); // tgen
};
//SIG(-1 S2863C17) C1{ BC2{ BC3{ m} VBC4{ VBC5{ m} BC3 BC6{ m}} BC7{ VBC8{ VBC5 BC6 BC9{ BC5 VBC6 VBC3 v1} VBC4 VBC10{ vd m} vd Fc} BC9 FC11{}}} vd Fp}


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

static void Test_S2863C17()
{
  extern Class_Descriptor cd_S2863C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S2863C17, buf);
    S2863C17 *dp, &lv = *(dp=new (buf) S2863C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S2863C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C17)");
    /*is_ambiguous_... S2863C13::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C13*), 0, "S2863C17");
    check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(32,16), "S2863C17");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(32,16), "S2863C17");
    check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(24,12), "S2863C17");
    check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(24,12), "S2863C17");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C13*), ABISELECT(24,12), "S2863C17");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(24,12), "S2863C17");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), ABISELECT(40,20), "S2863C17");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), ABISELECT(40,20), "S2863C17");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), 0, "S2863C17");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C14*)(S2863C13*), 0, "S2863C17");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), ABISELECT(49,25), "S2863C17");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C14*)(S2863C13*), ABISELECT(49,25), "S2863C17");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*), ABISELECT(40,20), "S2863C17");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(56,28), "S2863C17");
    check_base_class_offset(lv, (S2863C8*)(S2863C14*)(S2863C13*), ABISELECT(40,20), "S2863C17");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C14*)(S2863C13*), 0, "S2863C17");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C14*)(S2863C13*), 0, "S2863C17");
    check_base_class_offset(lv, (S2863C14*)(S2863C13*), 0, "S2863C17");
    check_base_class_offset(lv, (S2863C13*), 0, "S2863C17");
    check_field_offset(lv, s2863c17f0, ABISELECT(16,8), "S2863C17.s2863c17f0");
    test_class_info(&lv, &cd_S2863C17);
    dp->~S2863C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C17(Test_S2863C17, "S2863C17", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S2863C17C1Ev();
extern void _ZN8S2863C17D2Ev();
Name_Map name_map_S2863C17[] = {
  NSPAIR(_ZN8S2863C17C1Ev),
  NSPAIR(_ZN8S2863C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C14;
extern VTBL_ENTRY _ZTI8S2863C14[];
extern  VTBL_ENTRY _ZTV8S2863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C14[];
extern Class_Descriptor cd_S2863C13;
extern VTBL_ENTRY _ZTI8S2863C13[];
extern  VTBL_ENTRY _ZTV8S2863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C13[];
static Base_Class bases_S2863C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2123C27,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(24,12), //bcp->offset
    11, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2123C23,    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
    11, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    ABISELECT(49,25), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    ABISELECT(40,20), //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
    11, //immediately_derived
  0, 0},
  {&cd_S2863C11_nt,    ABISELECT(56,28), //bcp->offset
    26, //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
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2863C8,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2863C14,    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
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2863C13,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2863C17[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C17D1Ev();
extern void _ZN8S2863C17D0Ev();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev)();
extern void ABISELECT(_ZThn40_N8S2863C17D1Ev,_ZThn20_N8S2863C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev)();
extern void ABISELECT(_ZThn40_N8S2863C17D0Ev,_ZThn20_N8S2863C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev)();
extern void ABISELECT(_ZThn56_N8S2863C17D1Ev,_ZThn28_N8S2863C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev)();
extern void ABISELECT(_ZThn56_N8S2863C17D0Ev,_ZThn28_N8S2863C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C17[] = {
  ABISELECT(56,28),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(40,20),
  ABISELECT(49,25),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C17D0Ev,
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  ABISELECT(-40,-20),
  0,
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(9,5),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev),
};
extern VTBL_ENTRY _ZTV8S2863C17[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C13D1Ev();
extern void _ZN8S2863C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C13__8S2863C17[] = {
  ABISELECT(56,28),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(40,20),
  ABISELECT(49,25),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C14D1Ev();
extern void _ZN8S2863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C148S2863C13__8S2863C17[] = {
  ABISELECT(56,28),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(40,20),
  ABISELECT(49,25),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C98S2863C148S2863C13__A1__8S2863C17[] = {
  ABISELECT(49,25),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn40_N8S2863C14D1Ev,_ZThn20_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn40_N8S2863C14D0Ev,_ZThn20_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C148S2863C13__8S2863C17[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(9,5),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C148S2863C13__8S2863C17[] = {
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn56_N8S2863C14D1Ev,_ZThn28_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn56_N8S2863C14D0Ev,_ZThn28_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C148S2863C13__8S2863C17[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C13__8S2863C17[] = {
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn40_N8S2863C13D1Ev,_ZThn20_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn40_N8S2863C13D0Ev,_ZThn20_N8S2863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C13__8S2863C17[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(9,5),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S2863C13D1Ev,_ZThn28_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S2863C13D0Ev,_ZThn28_N8S2863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C13__8S2863C17[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C17[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C17[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(9,5),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__8S2863C17[] = {
  ABISELECT(9,5),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__8S2863C17[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S2863C8D1Ev,_ZThn8_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S2863C8D0Ev,_ZThn8_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__8S2863C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTT_ENTRY vtt_S2863C17[] = {
  {&(_ZTV8S2863C17[8]),  8,31},
  {&(_tg__ZTV8S2863C13__8S2863C17[8]),  8,11},
  {&(_tg__ZTV8S2863C148S2863C13__8S2863C17[8]),  8,11},
  {&(_tg__ZTV7S2863C98S2863C148S2863C13__A1__8S2863C17[4]),  4,5},
  {&(_tg__ZTV7S2863C8__8S2863C148S2863C13__8S2863C17[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C148S2863C13__8S2863C17[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C148S2863C13__8S2863C17[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C13__8S2863C17[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C13__8S2863C17[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C13__8S2863C17[3]),  3,5},
  {&(_ZTV8S2863C17[14]),  14,31},
  {&(_ZTV8S2863C17[23]),  23,31},
  {&(_ZTV8S2863C17[29]),  29,31},
  {&(_tg__ZTV11S2863C10_nt__8S2863C17[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C17[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__8S2863C17[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__8S2863C17[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__8S2863C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2863C17[];
extern  VTBL_ENTRY _ZTV8S2863C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C17[];
static VTBL_ENTRY alt_thunk_names122[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2863C8D0Ev,_ZThn8_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2863C8D1Ev,_ZThn8_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C13D0Ev,_ZThn28_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C13D1Ev,_ZThn28_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C13D0Ev,_ZThn20_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C13D1Ev,_ZThn20_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C14D0Ev,_ZThn28_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C14D1Ev,_ZThn28_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C14D0Ev,_ZThn20_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C14D1Ev,_ZThn20_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C17D0Ev,_ZThn28_N8S2863C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C17D1Ev,_ZThn28_N8S2863C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C17D0Ev,_ZThn20_N8S2863C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C17D1Ev,_ZThn20_N8S2863C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C17 = {  "S2863C17", // class name
  bases_S2863C17, 16,
  &(vtc_S2863C17[0]), // expected_vtbl_contents
  &(vtt_S2863C17[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S2863C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2863C17),31, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2863C17),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names122,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C16  : virtual S2123C30 , S2863C8 , virtual S2863C17 {
  __tsi64 s2863c16f0;
  virtual  ~S2863C16(); // _ZN8S2863C16D2Ev
  S2863C16(); // tgen
};
//SIG(-1 S2863C16) C1{ VBC2{ m} BC3{ VBC2 BC4{ m} BC5{ BC2 VBC4 VBC6{ m} v1} VBC7{ VBC2 BC6 BC4} VBC8{ vd m} vd Fc} VBC9{ BC10{ BC6 VBC7 BC11{ VBC3 BC5 FC12{}}} vd Fp} vd FL}


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

static void Test_S2863C16()
{
  extern Class_Descriptor cd_S2863C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S2863C16, buf);
    S2863C16 *dp, &lv = *(dp=new (buf) S2863C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S2863C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C16)");
    /*is_ambiguous_... S2863C16::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*), ABISELECT(24,16), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(24,16), "S2863C16");
    check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(24,16), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(24,16), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), 0, "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), 0, "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), ABISELECT(24,16), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), ABISELECT(24,16), "S2863C16");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(24,16), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), 0, "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), 0, "S2863C16");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), 0, "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*), 0, "S2863C16");
    check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(32,20), "S2863C16");
    check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(32,20), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(32,20), "S2863C16");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C13*)(S2863C17*), ABISELECT(32,20), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(32,20), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(40,24), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(40,24), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C8*), 0, "S2863C16");
    /*is_ambiguous_... S2863C13::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C13*)(S2863C17*), ABISELECT(48,28), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), ABISELECT(72,40), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), ABISELECT(72,40), "S2863C16");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*), ABISELECT(72,40), "S2863C16");
    check_base_class_offset(lv, (S2863C8*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(72,40), "S2863C16");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(48,28), "S2863C16");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(48,28), "S2863C16");
    check_base_class_offset(lv, (S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(48,28), "S2863C16");
    check_base_class_offset(lv, (S2863C13*)(S2863C17*), ABISELECT(48,28), "S2863C16");
    check_base_class_offset(lv, (S2863C17*), ABISELECT(48,28), "S2863C16");
    check_field_offset(lv, s2863c16f0, ABISELECT(16,8), "S2863C16.s2863c16f0");
    test_class_info(&lv, &cd_S2863C16);
    dp->~S2863C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C16(Test_S2863C16, "S2863C16", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S2863C16C1Ev();
extern void _ZN8S2863C16D2Ev();
Name_Map name_map_S2863C16[] = {
  NSPAIR(_ZN8S2863C16C1Ev),
  NSPAIR(_ZN8S2863C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C14;
extern VTBL_ENTRY _ZTI8S2863C14[];
extern  VTBL_ENTRY _ZTV8S2863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C14[];
extern Class_Descriptor cd_S2863C13;
extern VTBL_ENTRY _ZTI8S2863C13[];
extern  VTBL_ENTRY _ZTV8S2863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C13[];
extern Class_Descriptor cd_S2863C17;
extern VTBL_ENTRY _ZTI8S2863C17[];
extern  VTBL_ENTRY _ZTV8S2863C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C17[];
static Base_Class bases_S2863C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    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
    5, //immediately_derived
  0, 1},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2123C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C11_nt,    ABISELECT(40,24), //bcp->offset
    15, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C8,    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},
  {&cd_S2123C27,    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
    19, //immediately_derived
  0, 0},
  {&cd_S2123C23,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2123C30,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2863C9,    ABISELECT(72,40), //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
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2863C8,    ABISELECT(72,40), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2123C30,    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
    17, //immediately_derived
  0, 0},
  {&cd_S2863C9,    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
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2863C14,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    19, //immediately_derived
  0, 0},
  {&cd_S2863C13,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2863C17,    ABISELECT(48,28), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2863C16[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C16D1Ev();
extern void _ZN8S2863C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn40_N8S2863C16D1Ev,_ZThn24_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn40_N8S2863C16D0Ev,_ZThn24_N8S2863C16D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn48_N8S2863C16D1Ev,_ZThn28_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn48_N8S2863C16D0Ev,_ZThn28_N8S2863C16D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S2863C16D1Ev,_ZThn40_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S2863C16D0Ev,_ZThn40_N8S2863C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C16[] = {
  ABISELECT(72,40),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C16D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev),
  ABISELECT(-48,-28),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(24,12),
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev),
  ABISELECT(-72,-40),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev),
};
extern VTBL_ENTRY _ZTV8S2863C16[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__A__8S2863C16[] = {
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__8S2863C16[] = {
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__A__8S2863C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S2863C8D1Ev,_ZThn24_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S2863C8D0Ev,_ZThn24_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__A__8S2863C16[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C16[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C17D1Ev();
extern void _ZN8S2863C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C17__8S2863C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(24,12),
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C17D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C13D1Ev();
extern void _ZN8S2863C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C138S2863C17__8S2863C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(24,12),
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C14D1Ev();
extern void _ZN8S2863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C148S2863C138S2863C17__8S2863C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(24,12),
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C98S2863C148S2863C138S2863C17__A2__8S2863C16[] = {
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn24_N8S2863C14D1Ev,_ZThn12_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn24_N8S2863C14D0Ev,_ZThn12_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C148S2863C138S2863C17__8S2863C16[] = {
  ABISELECT(-24,-12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C148S2863C138S2863C17__8S2863C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C148S2863C138S2863C17__8S2863C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C138S2863C17__8S2863C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S2863C13D1Ev,_ZThn12_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S2863C13D0Ev,_ZThn12_N8S2863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C138S2863C17__8S2863C16[] = {
  ABISELECT(-24,-12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C138S2863C17__8S2863C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C17__8S2863C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev)();
extern void ABISELECT(_ZThn24_N8S2863C17D1Ev,_ZThn12_N8S2863C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev)();
extern void ABISELECT(_ZThn24_N8S2863C17D0Ev,_ZThn12_N8S2863C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C17__8S2863C16[] = {
  ABISELECT(-24,-12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C17__8S2863C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__A1__8S2863C16[] = {
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__A1__8S2863C16[] = {
  ABISELECT(-72,-40),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__A1__8S2863C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__A1__8S2863C16[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTT_ENTRY vtt_S2863C16[] = {
  {&(_ZTV8S2863C16[9]),  9,45},
  {&(_tg__ZTV7S2863C8__A__8S2863C16[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__8S2863C16[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__A__8S2863C16[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__A__8S2863C16[3]),  3,5},
  {&(_ZTV8S2863C16[15]),  15,45},
  {&(_ZTV8S2863C16[18]),  18,45},
  {&(_ZTV8S2863C16[30]),  30,45},
  {&(_ZTV8S2863C16[42]),  42,45},
  {&(_tg__ZTV11S2863C10_nt__8S2863C16[3]),  3,3},
  {&(_tg__ZTV8S2863C17__8S2863C16[8]),  8,11},
  {&(_tg__ZTV8S2863C138S2863C17__8S2863C16[8]),  8,11},
  {&(_tg__ZTV8S2863C148S2863C138S2863C17__8S2863C16[8]),  8,11},
  {&(_tg__ZTV7S2863C98S2863C148S2863C138S2863C17__A2__8S2863C16[4]),  4,5},
  {&(_tg__ZTV7S2863C8__8S2863C148S2863C138S2863C17__8S2863C16[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C148S2863C138S2863C17__8S2863C16[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C148S2863C138S2863C17__8S2863C16[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C138S2863C17__8S2863C16[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C138S2863C17__8S2863C16[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C138S2863C17__8S2863C16[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C17__8S2863C16[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C17__8S2863C16[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C17__8S2863C16[3]),  3,5},
  {&(_tg__ZTV7S2863C8__A1__8S2863C16[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__A1__8S2863C16[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__A1__8S2863C16[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__A1__8S2863C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S2863C16[];
extern  VTBL_ENTRY _ZTV8S2863C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C16[];
static VTBL_ENTRY alt_thunk_names123[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S2863C17D0Ev,_ZThn12_N8S2863C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S2863C17D1Ev,_ZThn12_N8S2863C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S2863C13D0Ev,_ZThn12_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S2863C13D1Ev,_ZThn12_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S2863C14D0Ev,_ZThn12_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S2863C14D1Ev,_ZThn12_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2863C8D0Ev,_ZThn24_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2863C8D1Ev,_ZThn24_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S2863C16D0Ev,_ZThn40_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S2863C16D1Ev,_ZThn40_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C16D0Ev,_ZThn28_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C16D1Ev,_ZThn28_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C16D0Ev,_ZThn24_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C16D1Ev,_ZThn24_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C16 = {  "S2863C16", // class name
  bases_S2863C16, 21,
  &(vtc_S2863C16[0]), // expected_vtbl_contents
  &(vtt_S2863C16[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S2863C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2863C16),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2863C16),27, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names123,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C19  : virtual S2123C23 , S2863C8 , S2123C30 , S2863C10_nt {
  virtual  ~S2863C19(); // _ZN8S2863C19D2Ev
  S2863C19(); // tgen
};
//SIG(-1 S2863C19) C1{ VBC2{ m} BC3{ VBC4{ m} BC2 BC5{ BC4 VBC2 VBC6{ m} v1} VBC7{ VBC4 BC6 BC2} VBC8{ vd m} vd Fc} BC4 BC7 vd}


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

static void Test_S2863C19()
{
  extern Class_Descriptor cd_S2863C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S2863C19, buf);
    S2863C19 *dp, &lv = *(dp=new (buf) S2863C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S2863C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C19)");
    /*is_ambiguous_... S2863C19::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*), ABISELECT(24,12), "S2863C19");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), ABISELECT(24,12), "S2863C19");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(24,12), "S2863C19");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(24,12), "S2863C19");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(24,12), "S2863C19");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), 0, "S2863C19");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), 0, "S2863C19");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), 0, "S2863C19");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*), 0, "S2863C19");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(32,16), "S2863C19");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(32,16), "S2863C19");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(32,16), "S2863C19");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(40,20), "S2863C19");
    check_base_class_offset(lv, (S2863C8*), 0, "S2863C19");
    /*is_ambiguous_... S2863C19::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*), ABISELECT(9,5), "S2863C19");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(16,8), "S2863C19");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(16,8), "S2863C19");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2863C10_nt*), ABISELECT(16,8), "S2863C19");
    test_class_info(&lv, &cd_S2863C19);
    dp->~S2863C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C19(Test_S2863C19, "S2863C19", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S2863C19C1Ev();
extern void _ZN8S2863C19D2Ev();
Name_Map name_map_S2863C19[] = {
  NSPAIR(_ZN8S2863C19C1Ev),
  NSPAIR(_ZN8S2863C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
static Base_Class bases_S2863C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C23,    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, 1},
  {&cd_S2123C30,    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
    8, //immediately_derived
  0, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2123C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C11_nt,    ABISELECT(40,20), //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C8,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C30,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C27,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C10_nt,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2863C19[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C19D1Ev();
extern void _ZN8S2863C19D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev)();
extern void ABISELECT(_ZThn40_N8S2863C19D1Ev,_ZThn20_N8S2863C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev)();
extern void ABISELECT(_ZThn40_N8S2863C19D0Ev,_ZThn20_N8S2863C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C19[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C19D0Ev,
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev),
};
extern VTBL_ENTRY _ZTV8S2863C19[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C19[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__8S2863C19[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__8S2863C19[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S2863C8D1Ev,_ZThn20_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S2863C8D0Ev,_ZThn20_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__8S2863C19[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__A__8S2863C19[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C19[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTT_ENTRY vtt_S2863C19[] = {
  {&(_ZTV8S2863C19[7]),  7,21},
  {&(_tg__ZTV7S2863C8__8S2863C19[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__8S2863C19[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__8S2863C19[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__8S2863C19[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__A__8S2863C19[3]),  3,3},
  {&(_ZTV8S2863C19[16]),  16,21},
  {&(_ZTV8S2863C19[19]),  19,21},
  {&(_ZTV8S2863C19[13]),  13,21},
  {&(_tg__ZTV11S2863C10_nt__8S2863C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2863C19[];
extern  VTBL_ENTRY _ZTV8S2863C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C19[];
static VTBL_ENTRY alt_thunk_names124[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2863C8D0Ev,_ZThn20_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2863C8D1Ev,_ZThn20_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C19D0Ev,_ZThn20_N8S2863C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C19D1Ev,_ZThn20_N8S2863C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C19 = {  "S2863C19", // class name
  bases_S2863C19, 15,
  &(vtc_S2863C19[0]), // expected_vtbl_contents
  &(vtt_S2863C19[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S2863C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2863C19),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2863C19),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names124,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C18  : virtual S2123C27 , virtual S2863C19 , S2863C10_nt , S2123C23 {
  virtual  ~S2863C18(); // _ZN8S2863C18D2Ev
  S2863C18(); // tgen
};
//SIG(-1 S2863C18) C1{ VBC2{ m} VBC3{ VBC4{ m} BC5{ VBC6{ m} BC4 BC7{ BC6 VBC4 VBC2 v1} VBC8{ VBC6 BC2 BC4} VBC9{ vd m} vd Fc} BC6 BC8 vd} BC8 BC4 vd}


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

static void Test_S2863C18()
{
  extern Class_Descriptor cd_S2863C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S2863C18, buf);
    S2863C18 *dp, &lv = *(dp=new (buf) S2863C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S2863C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C18)");
    /*is_ambiguous_... S2863C18::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*), ABISELECT(8,4), "S2863C18");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(8,4), "S2863C18");
    /*is_ambiguous_... S2863C19::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C19*), ABISELECT(40,20), "S2863C18");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(40,20), "S2863C18");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C19*), 0, "S2863C18");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), 0, "S2863C18");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*)(S2863C19*), 0, "S2863C18");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), 0, "S2863C18");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C19*), ABISELECT(16,8), "S2863C18");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(16,8), "S2863C18");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(16,8), "S2863C18");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(48,24), "S2863C18");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(48,24), "S2863C18");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C19*), ABISELECT(48,24), "S2863C18");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C19*), ABISELECT(56,28), "S2863C18");
    check_base_class_offset(lv, (S2863C8*)(S2863C19*), ABISELECT(16,8), "S2863C18");
    /*is_ambiguous_... S2863C19::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C19*), ABISELECT(25,13), "S2863C18");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*)(S2863C19*), ABISELECT(32,16), "S2863C18");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*)(S2863C19*), ABISELECT(32,16), "S2863C18");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C19*), ABISELECT(32,16), "S2863C18");
    check_base_class_offset(lv, (S2863C19*), ABISELECT(16,8), "S2863C18");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), 0, "S2863C18");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), 0, "S2863C18");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2863C10_nt*), 0, "S2863C18");
    /*is_ambiguous_... S2863C18::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*), ABISELECT(8,4), "S2863C18");
    test_class_info(&lv, &cd_S2863C18);
    dp->~S2863C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C18(Test_S2863C18, "S2863C18", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S2863C18C1Ev();
extern void _ZN8S2863C18D2Ev();
Name_Map name_map_S2863C18[] = {
  NSPAIR(_ZN8S2863C18C1Ev),
  NSPAIR(_ZN8S2863C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C19;
extern VTBL_ENTRY _ZTI8S2863C19[];
extern  VTBL_ENTRY _ZTV8S2863C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C19[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
static Base_Class bases_S2863C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C27,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C23,    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
    5, //immediately_derived
  0, 1},
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2123C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(48,24), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C11_nt,    ABISELECT(56,28), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C8,    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
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2123C30,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2863C19,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //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},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C10_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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2863C18[];
extern void _ZN8S2863C18D1Ev();
extern void _ZN8S2863C18D0Ev();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S2863C18D1Ev,_ZThn8_N8S2863C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev)();
extern void ABISELECT(_ZThn16_N8S2863C18D0Ev,_ZThn8_N8S2863C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C18D1Ev,_ZTv0_n12_N8S2863C18D1Ev)();
extern void ABISELECT(_ZThn56_N8S2863C18D1Ev,_ZThn28_N8S2863C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C18D0Ev,_ZTv0_n12_N8S2863C18D0Ev)();
extern void ABISELECT(_ZThn56_N8S2863C18D0Ev,_ZThn28_N8S2863C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C18[] = {
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&_ZN8S2863C18D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C18D0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C18D1Ev,_ZTv0_n12_N8S2863C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C18D0Ev,_ZTv0_n12_N8S2863C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S2863C18[];
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__A__8S2863C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C19D1Ev();
extern void _ZN8S2863C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C19__8S2863C18[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C19D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C88S2863C19__8S2863C18[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C88S2863C19__8S2863C18[] = {
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C88S2863C19__8S2863C18[] = {
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S2863C8D1Ev,_ZThn20_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S2863C8D0Ev,_ZThn20_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C88S2863C19__8S2863C18[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt8S2863C19__A1__8S2863C18[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C19__8S2863C18[] = {
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev)();
extern void ABISELECT(_ZThn40_N8S2863C19D1Ev,_ZThn20_N8S2863C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev)();
extern void ABISELECT(_ZThn40_N8S2863C19D0Ev,_ZThn20_N8S2863C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C19__8S2863C18[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__A__8S2863C19__8S2863C18[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C18[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTT_ENTRY vtt_S2863C18[] = {
  {&(_ZTV8S2863C18[8]),  8,33},
  {&(_tg__ZTV11S2863C10_nt__A__8S2863C18[3]),  3,3},
  {&(_ZTV8S2863C18[19]),  19,33},
  {&(_ZTV8S2863C18[28]),  28,33},
  {&(_ZTV8S2863C18[31]),  31,33},
  {&(_ZTV8S2863C18[25]),  25,33},
  {&(_tg__ZTV8S2863C19__8S2863C18[7]),  7,10},
  {&(_tg__ZTV7S2863C88S2863C19__8S2863C18[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C88S2863C19__8S2863C18[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C88S2863C19__8S2863C18[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C88S2863C19__8S2863C18[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt8S2863C19__A1__8S2863C18[3]),  3,3},
  {&(_tg__ZTV11S2863C10_nt__8S2863C19__8S2863C18[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C19__8S2863C18[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__A__8S2863C19__8S2863C18[3]),  3,3},
  {&(_tg__ZTV11S2863C10_nt__8S2863C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2863C18[];
extern  VTBL_ENTRY _ZTV8S2863C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C18[];
static VTBL_ENTRY alt_thunk_names125[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C19D0Ev,_ZThn20_N8S2863C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C19D1Ev,_ZThn20_N8S2863C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2863C8D0Ev,_ZThn20_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2863C8D1Ev,_ZThn20_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C18D0Ev,_ZTv0_n12_N8S2863C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C18D0Ev,_ZThn28_N8S2863C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C18D1Ev,_ZTv0_n12_N8S2863C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C18D1Ev,_ZThn28_N8S2863C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2863C18D0Ev,_ZThn8_N8S2863C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2863C18D1Ev,_ZThn8_N8S2863C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C18 = {  "S2863C18", // class name
  bases_S2863C18, 20,
  &(vtc_S2863C18[0]), // expected_vtbl_contents
  &(vtt_S2863C18[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S2863C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2863C18),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2863C18),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names125,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C6  : S2863C7 , S2863C13 , S2863C16 , virtual S2863C18 {
  virtual  ~S2863C6(); // _ZN7S2863C6D2Ev
  S2863C6(); // tgen
};
//SIG(-1 S2863C6) C1{ BC2{ BC3{ VBC4{ m} BC5{ m} BC6{ BC4 VBC5 VBC7{ m} v1} VBC8{ VBC4 BC7 BC5} VBC9{ vd m} vd Fc} BC7 VBC10{ VBC8 BC3 vd FC9} BC5 v2} BC11{ BC7 VBC8 BC12{ VBC3 BC6 FC13{}}} BC14{ VBC4 BC3 VBC15{ BC11 vd Fp} vd FL} VBC16{ VBC7 VBC17{ VBC5 BC3 BC4 BC8 vd} BC8 BC5 vd} vd}


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

static void Test_S2863C6()
{
  extern Class_Descriptor cd_S2863C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,25)];
    init_test(&cd_S2863C6, buf);
    S2863C6 *dp, &lv = *(dp=new (buf) S2863C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,96), "sizeof(S2863C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C6)");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C7*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C12*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C16::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C16*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C16*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C19*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*)(S2863C19*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*)(S2863C18*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C7*), 0, "S2863C6");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C7*), 0, "S2863C6");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C7*), ABISELECT(56,32), "S2863C6");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C14*)(S2863C13*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C16*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C19::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C19*), ABISELECT(56,32), "S2863C6");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C7*), ABISELECT(56,32), "S2863C6");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C14*)(S2863C13*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C16*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C18::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C18*), ABISELECT(56,32), "S2863C6");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(56,32), "S2863C6");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C7*), 0, "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(64,36), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(64,36), "S2863C6");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C7*), ABISELECT(64,36), "S2863C6");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C12*), ABISELECT(64,36), "S2863C6");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C12*), ABISELECT(64,36), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C13*), ABISELECT(64,36), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(64,36), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C16*), ABISELECT(64,36), "S2863C6");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C13*)(S2863C17*), ABISELECT(64,36), "S2863C6");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C19*), ABISELECT(64,36), "S2863C6");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C7*), ABISELECT(72,40), "S2863C6");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C12*), ABISELECT(72,40), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(72,40), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C16*), ABISELECT(72,40), "S2863C6");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C19*), ABISELECT(72,40), "S2863C6");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C8*)(S2863C7*), 0, "S2863C6");
    /*is_ambiguous_... S2863C7::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C7*), 0, "S2863C6");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C12*), ABISELECT(80,44), "S2863C6");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(80,44), "S2863C6");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(80,44), "S2863C6");
    check_base_class_offset(lv, (S2863C8*)(S2863C12*), ABISELECT(80,44), "S2863C6");
    check_base_class_offset(lv, (S2863C12*)(S2863C7*), ABISELECT(80,44), "S2863C6");
    /*is_ambiguous_... S2863C7::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C7*), ABISELECT(9,5), "S2863C6");
    check_base_class_offset(lv, (S2863C7*), 0, "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C13*), ABISELECT(16,8), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), ABISELECT(104,56), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), ABISELECT(104,56), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*), ABISELECT(104,56), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C8*)(S2863C14*)(S2863C13*), ABISELECT(104,56), "S2863C6");
    check_base_class_offset(lv, (S2863C8*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(104,56), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C14*)(S2863C13*), ABISELECT(16,8), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C14*)(S2863C13*), ABISELECT(16,8), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C14*)(S2863C13*), ABISELECT(16,8), "S2863C6");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C13*), ABISELECT(16,8), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C16*), ABISELECT(32,16), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C16*), ABISELECT(32,16), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C16*), ABISELECT(32,16), "S2863C6");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C8*)(S2863C16*), ABISELECT(32,16), "S2863C6");
    /*is_ambiguous_... S2863C13::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C13*)(S2863C17*), ABISELECT(120,64), "S2863C6");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(120,64), "S2863C6");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(120,64), "S2863C6");
    check_base_class_offset(lv, (S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(120,64), "S2863C6");
    check_base_class_offset(lv, (S2863C13*)(S2863C17*), ABISELECT(120,64), "S2863C6");
    check_base_class_offset(lv, (S2863C17*)(S2863C16*), ABISELECT(120,64), "S2863C6");
    check_base_class_offset(lv, (S2863C16*), ABISELECT(32,16), "S2863C6");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C19*), ABISELECT(160,84), "S2863C6");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(160,84), "S2863C6");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(160,84), "S2863C6");
    check_base_class_offset(lv, (S2863C8*)(S2863C19*), ABISELECT(160,84), "S2863C6");
    /*is_ambiguous_... S2863C19::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C19*), ABISELECT(169,89), "S2863C6");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*)(S2863C19*), ABISELECT(176,92), "S2863C6");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*)(S2863C19*), ABISELECT(176,92), "S2863C6");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C19*), ABISELECT(176,92), "S2863C6");
    check_base_class_offset(lv, (S2863C19*)(S2863C18*), ABISELECT(160,84), "S2863C6");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*)(S2863C18*), ABISELECT(144,76), "S2863C6");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*)(S2863C18*), ABISELECT(144,76), "S2863C6");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C18*), ABISELECT(144,76), "S2863C6");
    /*is_ambiguous_... S2863C18::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C18*), ABISELECT(152,80), "S2863C6");
    check_base_class_offset(lv, (S2863C18*), ABISELECT(144,76), "S2863C6");
    test_class_info(&lv, &cd_S2863C6);
    dp->~S2863C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C6(Test_S2863C6, "S2863C6", ABISELECT(184,96));

#else // __cplusplus

extern void _ZN7S2863C6C1Ev();
extern void _ZN7S2863C6D2Ev();
Name_Map name_map_S2863C6[] = {
  NSPAIR(_ZN7S2863C6C1Ev),
  NSPAIR(_ZN7S2863C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2863C12;
extern VTBL_ENTRY _ZTI8S2863C12[];
extern  VTBL_ENTRY _ZTV8S2863C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C12[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C7;
extern VTBL_ENTRY _ZTI7S2863C7[];
extern  VTBL_ENTRY _ZTV7S2863C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C7[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C14;
extern VTBL_ENTRY _ZTI8S2863C14[];
extern  VTBL_ENTRY _ZTV8S2863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C14[];
extern Class_Descriptor cd_S2863C13;
extern VTBL_ENTRY _ZTI8S2863C13[];
extern  VTBL_ENTRY _ZTV8S2863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C13[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C14;
extern VTBL_ENTRY _ZTI8S2863C14[];
extern  VTBL_ENTRY _ZTV8S2863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C14[];
extern Class_Descriptor cd_S2863C13;
extern VTBL_ENTRY _ZTI8S2863C13[];
extern  VTBL_ENTRY _ZTV8S2863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C13[];
extern Class_Descriptor cd_S2863C17;
extern VTBL_ENTRY _ZTI8S2863C17[];
extern  VTBL_ENTRY _ZTV8S2863C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C17[];
extern Class_Descriptor cd_S2863C16;
extern VTBL_ENTRY _ZTI8S2863C16[];
extern  VTBL_ENTRY _ZTV8S2863C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C16[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C19;
extern VTBL_ENTRY _ZTI8S2863C19[];
extern  VTBL_ENTRY _ZTV8S2863C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C19[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C18;
extern VTBL_ENTRY _ZTI8S2863C18[];
extern  VTBL_ENTRY _ZTV8S2863C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C18[];
static Base_Class bases_S2863C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    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
    8, //immediately_derived
  0, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2123C27,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2863C9,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2123C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(64,36), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C11_nt,    ABISELECT(72,40), //bcp->offset
    42, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2863C8,    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
    19, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2123C30,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2863C9,    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
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2863C8,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2863C12,    ABISELECT(80,44), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2123C23,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C7,    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
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C27,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    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
    23, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    22, //immediately_derived
  0, 0},
  {&cd_S2863C9,    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
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2863C8,    ABISELECT(104,56), //bcp->offset
    59, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2123C30,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2863C14,    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
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2863C13,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    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
    31, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    30, //immediately_derived
  0, 0},
  {&cd_S2863C9,    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
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2863C8,    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
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2123C27,    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
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2863C9,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2863C14,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2863C13,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2863C17,    ABISELECT(120,64), //bcp->offset
    71, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S2863C16,    ABISELECT(32,16), //bcp->offset
    27, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    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
    42, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    41, //immediately_derived
  0, 0},
  {&cd_S2863C9,    ABISELECT(160,84), //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
    12, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2863C8,    ABISELECT(160,84), //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
    13, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S2123C30,    ABISELECT(169,89), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    ABISELECT(176,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
    46, //immediately_derived
  0, 0},
  {&cd_S2123C23,    ABISELECT(176,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
    46, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(176,92), //bcp->offset
    107, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S2863C19,    ABISELECT(160,84), //bcp->offset
    95, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    52, //immediately_derived
  0, 1},
  {&cd_S2123C27,    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
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(144,76), //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
    16, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S2863C18,    ABISELECT(144,76), //bcp->offset
    84, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2863C6[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C6D1Ev();
extern void _ZN7S2863C6D0Ev();
extern void _ZN7S2863C72v3Ev();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZThn16_N7S2863C6D1Ev,_ZThn8_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S2863C6D0Ev,_ZThn8_N7S2863C6D0Ev)();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZThn32_N7S2863C6D1Ev,_ZThn16_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S2863C6D0Ev,_ZThn16_N7S2863C6D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C6D1Ev,_ZTv0_n12_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn72_N7S2863C6D1Ev,_ZThn40_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C6D0Ev,_ZTv0_n12_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn72_N7S2863C6D0Ev,_ZThn40_N7S2863C6D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn80_N7S2863C6D1Ev,_ZThn44_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn80_N7S2863C6D0Ev,_ZThn44_N7S2863C6D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S2863C6D1Ev,_ZThn56_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S2863C6D0Ev,_ZThn56_N7S2863C6D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S2863C6D1Ev,_ZTv0_n40_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn120_N7S2863C6D1Ev,_ZThn64_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S2863C6D0Ev,_ZTv0_n40_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn120_N7S2863C6D0Ev,_ZThn64_N7S2863C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn144_N7S2863C6D1Ev,_ZThn76_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn144_N7S2863C6D0Ev,_ZThn76_N7S2863C6D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn160_N7S2863C6D1Ev,_ZThn84_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn160_N7S2863C6D0Ev,_ZThn84_N7S2863C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C6[] = {
  ABISELECT(160,84),
  ABISELECT(144,76),
  ABISELECT(120,64),
  ABISELECT(104,56),
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2863C72v3Ev,
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(88,48),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2863C6D1Ev,_ZThn8_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2863C6D0Ev,_ZThn8_N7S2863C6D0Ev),
  ABISELECT(72,40),
  ABISELECT(88,48),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S2863C6D1Ev,_ZThn16_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S2863C6D0Ev,_ZThn16_N7S2863C6D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C6D1Ev,_ZTv0_n12_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C6D0Ev,_ZTv0_n12_N7S2863C6D0Ev),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev),
  ABISELECT(-104,-56),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev),
  ABISELECT(-120,-64),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2863C6D1Ev,_ZTv0_n40_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2863C6D0Ev,_ZTv0_n40_N7S2863C6D0Ev),
  ABISELECT(-144,-76),
  ABISELECT(-72,-36),
  ABISELECT(-80,-40),
  ABISELECT(-88,-44),
  ABISELECT(16,8),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev),
  ABISELECT(-160,-84),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev),
  ABISELECT(-120,-60),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
};
extern VTBL_ENTRY _ZTV7S2863C6[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C7D1Ev();
extern void _ZN7S2863C7D0Ev();
extern void _ZN7S2863C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C7__7S2863C6[] = {
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2863C72v3Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C87S2863C7__7S2863C6[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C87S2863C7__7S2863C6[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C87S2863C7__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn72_N7S2863C8D1Ev,_ZThn40_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn72_N7S2863C8D0Ev,_ZThn40_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C87S2863C7__7S2863C6[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C7__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev)();
extern void ABISELECT(_ZThn72_N7S2863C7D1Ev,_ZThn40_N7S2863C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev)();
extern void ABISELECT(_ZThn72_N7S2863C7D0Ev,_ZThn40_N7S2863C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C7__7S2863C6[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S2863C7D1Ev,_ZThn44_N7S2863C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S2863C7D0Ev,_ZThn44_N7S2863C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C12__7S2863C7__7S2863C6[] = {
  ABISELECT(-80,-44),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C13D1Ev();
extern void _ZN8S2863C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C13__7S2863C6[] = {
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(88,48),
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C14D1Ev();
extern void _ZN8S2863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C148S2863C13__7S2863C6[] = {
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(88,48),
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C98S2863C148S2863C13__A3__7S2863C6[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn88_N8S2863C14D1Ev,_ZThn48_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn88_N8S2863C14D0Ev,_ZThn48_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C148S2863C13__7S2863C6[] = {
  ABISELECT(-88,-48),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C148S2863C13__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn56_N8S2863C14D1Ev,_ZThn32_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn56_N8S2863C14D0Ev,_ZThn32_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C148S2863C13__7S2863C6[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C13__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn88_N8S2863C13D1Ev,_ZThn48_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn88_N8S2863C13D0Ev,_ZThn48_N8S2863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C13__7S2863C6[] = {
  ABISELECT(-88,-48),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S2863C13D1Ev,_ZThn32_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S2863C13D0Ev,_ZThn32_N8S2863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C13__7S2863C6[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C16D1Ev();
extern void _ZN8S2863C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C16__7S2863C6[] = {
  ABISELECT(72,40),
  ABISELECT(88,48),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C16D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C88S2863C16__A3__7S2863C6[] = {
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C88S2863C16__A4__7S2863C6[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C88S2863C16__A3__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S2863C8D1Ev,_ZThn24_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S2863C8D0Ev,_ZThn24_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C88S2863C16__A3__7S2863C6[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C16__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn40_N8S2863C16D1Ev,_ZThn24_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn40_N8S2863C16D0Ev,_ZThn24_N8S2863C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C16__7S2863C6[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn88_N8S2863C16D1Ev,_ZThn48_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn88_N8S2863C16D0Ev,_ZThn48_N8S2863C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C17__8S2863C16__7S2863C6[] = {
  ABISELECT(-88,-48),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S2863C16D1Ev,_ZThn40_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S2863C16D0Ev,_ZThn40_N8S2863C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__A1__8S2863C16__7S2863C6[] = {
  ABISELECT(-72,-40),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C6[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C12D1Ev();
extern void _ZN8S2863C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C12__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C12D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C88S2863C12__A1__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C88S2863C12__A1__7S2863C6[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C88S2863C12__A1__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C88S2863C12__A1__7S2863C6[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C12__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C12__7S2863C6[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__A2__7S2863C6[] = {
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__A2__7S2863C6[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__A2__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__A2__7S2863C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C17D1Ev();
extern void _ZN8S2863C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C17__7S2863C6[] = {
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C17D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C13D1Ev();
extern void _ZN8S2863C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C138S2863C17__A1__7S2863C6[] = {
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C14D1Ev();
extern void _ZN8S2863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C148S2863C138S2863C17__A1__7S2863C6[] = {
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C98S2863C148S2863C138S2863C17__A5__7S2863C6[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C148S2863C138S2863C17__A1__7S2863C6[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C148S2863C138S2863C17__A1__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C148S2863C138S2863C17__A1__7S2863C6[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C138S2863C17__A1__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C138S2863C17__A1__7S2863C6[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C138S2863C17__A1__7S2863C6[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C17__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C17__7S2863C6[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C17__7S2863C6[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev),
};
extern void _ZN8S2863C18D1Ev();
extern void _ZN8S2863C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C18__7S2863C6[] = {
  ABISELECT(-72,-36),
  ABISELECT(-80,-40),
  ABISELECT(-88,-44),
  ABISELECT(16,8),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&_ZN8S2863C18D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt8S2863C18__A2__7S2863C6[] = {
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S2863C18D1Ev,_ZThn8_N8S2863C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev)();
extern void ABISELECT(_ZThn16_N8S2863C18D0Ev,_ZThn8_N8S2863C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C19__8S2863C18__7S2863C6[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C18__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C18D1Ev,_ZTv0_n12_N8S2863C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C18D0Ev,_ZTv0_n12_N8S2863C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C18__7S2863C6[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C18D1Ev,_ZTv0_n12_N8S2863C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C18D0Ev,_ZTv0_n12_N8S2863C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt8S2863C19__A1__8S2863C18__7S2863C6[] = {
  ABISELECT(-120,-60),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C19D1Ev();
extern void _ZN8S2863C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C19__7S2863C6[] = {
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C19D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C88S2863C19__A4__7S2863C6[] = {
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C88S2863C19__A6__7S2863C6[] = {
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C88S2863C19__A4__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C88S2863C19__A4__7S2863C6[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt8S2863C19__A1__7S2863C6[] = {
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C19__7S2863C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C19__7S2863C6[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__A__8S2863C19__7S2863C6[] = {
  ABISELECT(-120,-60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
};
static  VTT_ENTRY vtt_S2863C6[] = {
  {&(_ZTV7S2863C6[12]),  12,110},
  {&(_tg__ZTV7S2863C7__7S2863C6[8]),  8,12},
  {&(_tg__ZTV7S2863C87S2863C7__7S2863C6[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C87S2863C7__7S2863C6[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C87S2863C7__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C87S2863C7__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C7__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C7__7S2863C6[3]),  3,5},
  {&(_tg__ZTV8S2863C12__7S2863C7__7S2863C6[9]),  9,12},
  {&(_tg__ZTV8S2863C13__7S2863C6[8]),  8,11},
  {&(_tg__ZTV8S2863C148S2863C13__7S2863C6[8]),  8,11},
  {&(_tg__ZTV7S2863C98S2863C148S2863C13__A3__7S2863C6[4]),  4,5},
  {&(_tg__ZTV7S2863C8__8S2863C148S2863C13__7S2863C6[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C148S2863C13__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C148S2863C13__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C13__7S2863C6[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C13__7S2863C6[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C13__7S2863C6[3]),  3,5},
  {&(_tg__ZTV8S2863C16__7S2863C6[9]),  9,12},
  {&(_tg__ZTV7S2863C88S2863C16__A3__7S2863C6[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C88S2863C16__A4__7S2863C6[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C88S2863C16__A3__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C88S2863C16__A3__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C16__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C16__7S2863C6[3]),  3,5},
  {&(_tg__ZTV8S2863C17__8S2863C16__7S2863C6[10]),  10,13},
  {&(_tg__ZTV7S2863C8__A1__8S2863C16__7S2863C6[9]),  9,12},
  {&(_ZTV7S2863C6[42]),  42,110},
  {&(_ZTV7S2863C6[45]),  45,110},
  {&(_ZTV7S2863C6[56]),  56,110},
  {&(_ZTV7S2863C6[24]),  24,110},
  {&(_ZTV7S2863C6[68]),  68,110},
  {&(_ZTV7S2863C6[36]),  36,110},
  {&(_ZTV7S2863C6[81]),  81,110},
  {&(_ZTV7S2863C6[93]),  93,110},
  {&(_ZTV7S2863C6[104]),  104,110},
  {&(_ZTV7S2863C6[110]),  110,110},
  {&(_tg__ZTV11S2863C10_nt__7S2863C6[3]),  3,3},
  {&(_tg__ZTV8S2863C12__7S2863C6[7]),  7,10},
  {&(_tg__ZTV7S2863C88S2863C12__A1__7S2863C6[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C88S2863C12__A1__7S2863C6[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C88S2863C12__A1__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C88S2863C12__A1__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C12__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C12__7S2863C6[3]),  3,5},
  {&(_tg__ZTV7S2863C8__A2__7S2863C6[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__A2__7S2863C6[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__A2__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__A2__7S2863C6[3]),  3,5},
  {&(_tg__ZTV8S2863C17__7S2863C6[8]),  8,11},
  {&(_tg__ZTV8S2863C138S2863C17__A1__7S2863C6[8]),  8,11},
  {&(_tg__ZTV8S2863C148S2863C138S2863C17__A1__7S2863C6[8]),  8,11},
  {&(_tg__ZTV7S2863C98S2863C148S2863C138S2863C17__A5__7S2863C6[4]),  4,5},
  {&(_tg__ZTV7S2863C8__8S2863C148S2863C138S2863C17__A1__7S2863C6[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C148S2863C138S2863C17__A1__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C148S2863C138S2863C17__A1__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C138S2863C17__A1__7S2863C6[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C138S2863C17__A1__7S2863C6[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C138S2863C17__A1__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C17__7S2863C6[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C17__7S2863C6[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C17__7S2863C6[3]),  3,5},
  {&(_tg__ZTV8S2863C18__7S2863C6[8]),  8,10},
  {&(_tg__ZTV11S2863C10_nt8S2863C18__A2__7S2863C6[3]),  3,3},
  {&(_tg__ZTV8S2863C19__8S2863C18__7S2863C6[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C18__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C18__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt8S2863C19__A1__8S2863C18__7S2863C6[3]),  3,3},
  {&(_tg__ZTV8S2863C19__7S2863C6[7]),  7,10},
  {&(_tg__ZTV7S2863C88S2863C19__A4__7S2863C6[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C88S2863C19__A6__7S2863C6[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C88S2863C19__A4__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C88S2863C19__A4__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt8S2863C19__A1__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C10_nt__8S2863C19__7S2863C6[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C19__7S2863C6[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__A__8S2863C19__7S2863C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2863C6[];
extern  VTBL_ENTRY _ZTV7S2863C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C6[];
static VTBL_ENTRY alt_thunk_names126[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2863C18D0Ev,_ZThn8_N8S2863C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2863C18D1Ev,_ZThn8_N8S2863C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S2863C16D0Ev,_ZThn40_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S2863C16D1Ev,_ZThn40_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2863C16D0Ev,_ZThn48_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2863C16D1Ev,_ZThn48_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C16D0Ev,_ZThn24_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S2863C16D1Ev,_ZThn24_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C13D0Ev,_ZThn32_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C13D1Ev,_ZThn32_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2863C13D0Ev,_ZThn48_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2863C13D1Ev,_ZThn48_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C14D0Ev,_ZThn32_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S2863C14D1Ev,_ZThn32_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2863C14D0Ev,_ZThn48_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2863C14D1Ev,_ZThn48_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2863C7D0Ev,_ZThn44_N7S2863C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2863C7D1Ev,_ZThn44_N7S2863C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C7D0Ev,_ZThn40_N7S2863C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C7D1Ev,_ZThn40_N7S2863C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2863C8D0Ev,_ZThn24_N7S2863C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C8D0Ev,_ZThn40_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S2863C8D1Ev,_ZThn24_N7S2863C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C8D1Ev,_ZThn40_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2863C6D0Ev,_ZTv0_n40_N7S2863C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S2863C6D0Ev,_ZThn64_N7S2863C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2863C6D1Ev,_ZTv0_n40_N7S2863C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S2863C6D1Ev,_ZThn64_N7S2863C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S2863C6D0Ev,_ZThn84_N7S2863C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S2863C6D0Ev,_ZThn76_N7S2863C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2863C6D0Ev,_ZThn56_N7S2863C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2863C6D0Ev,_ZThn44_N7S2863C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S2863C6D1Ev,_ZThn84_N7S2863C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S2863C6D1Ev,_ZThn76_N7S2863C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2863C6D1Ev,_ZThn56_N7S2863C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2863C6D1Ev,_ZThn44_N7S2863C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C6D0Ev,_ZTv0_n12_N7S2863C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C6D0Ev,_ZThn40_N7S2863C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C6D1Ev,_ZTv0_n12_N7S2863C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C6D1Ev,_ZThn40_N7S2863C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C6 = {  "S2863C6", // class name
  bases_S2863C6, 53,
  &(vtc_S2863C6[0]), // expected_vtbl_contents
  &(vtt_S2863C6[0]), // expected_vtt_contents
  ABISELECT(184,96), // object size
  NSPAIRA(_ZTI7S2863C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2863C6),110, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2863C6),77, //virtual table table var
  26, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names126,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2863C1  : S2863C2 , virtual S2123C27 , virtual S2123C23 , virtual S2863C6 {
  virtual  ~S2863C1(); // _ZN7S2863C1D2Ev
  virtual void  v1(); // _ZN7S2863C12v1Ev
  S2863C1(); // tgen
};
//SIG(1 S2863C1) C1{ BC2{ BC3{ m} vd Fc:5} VBC4{ m} VBC5{ m} VBC6{ BC7{ BC8{ VBC3 BC5 BC9{ BC3 VBC5 VBC4 v2} VBC10{ VBC3 BC4 BC5} VBC11{ vd m} vd Fc} BC4 VBC12{ VBC10 BC8 vd FC11} BC5 v3} BC13{ BC4 VBC10 BC14{ VBC8 BC9 FC15{}}} BC16{ VBC3 BC8 VBC17{ BC13 vd Fp} vd FL} VBC18{ VBC4 VBC19{ VBC5 BC8 BC3 BC10 vd} BC10 BC5 vd} vd} vd v1}


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

static void Test_S2863C1()
{
  extern Class_Descriptor cd_S2863C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,26)];
    init_test(&cd_S2863C1, buf);
    S2863C1 *dp, &lv = *(dp=new (buf) S2863C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,100), "sizeof(S2863C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2863C1)");
    check_base_class_offset(lv, (S2123C30*)(S2863C2*), 0, "S2863C1");
    check_base_class_offset(lv, (S2863C2*), 0, "S2863C1");
    /*is_ambiguous_... S2863C1::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*), 0, "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C7*)(S2863C6*), 0, "S2863C1");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C12*), 0, "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*), 0, "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C6*), 0, "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C16*)(S2863C6*), 0, "S2863C1");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), 0, "S2863C1");
    /*is_ambiguous_... S2863C18::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C18*), 0, "S2863C1");
    check_base_class_offset(lv, (S2123C27*)(S2863C9*)(S2863C8*)(S2863C19*), 0, "S2863C1");
    /*is_ambiguous_... S2863C1::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*), 0, "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C7*)(S2863C6*), 0, "S2863C1");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C12*), 0, "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*), 0, "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C6*), 0, "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C16*)(S2863C6*), 0, "S2863C1");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), 0, "S2863C1");
    /*is_ambiguous_... S2863C19::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C19*), 0, "S2863C1");
    check_base_class_offset(lv, (S2123C23*)(S2863C9*)(S2863C8*)(S2863C19*), 0, "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C7*)(S2863C6*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C12*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C16::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C16*)(S2863C6*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C16*)(S2863C6*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C8*)(S2863C19*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*)(S2863C19*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C10_nt*)(S2863C18*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C7*)(S2863C6*), ABISELECT(16,8), "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C7*)(S2863C6*), ABISELECT(16,8), "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C7*)(S2863C6*), ABISELECT(16,8), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C7*)(S2863C6*), ABISELECT(72,40), "S2863C1");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C12*), ABISELECT(72,40), "S2863C1");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C12*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C13*)(S2863C6*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C16*)(S2863C6*), ABISELECT(72,40), "S2863C1");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C13*)(S2863C17*), ABISELECT(72,40), "S2863C1");
    check_base_class_offset(lv, (S2863C10_nt*)(S2863C8*)(S2863C19*), ABISELECT(72,40), "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C7*)(S2863C6*), ABISELECT(80,44), "S2863C1");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C12*), ABISELECT(80,44), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*), ABISELECT(80,44), "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C16*)(S2863C6*), ABISELECT(80,44), "S2863C1");
    check_base_class_offset(lv, (S2863C11_nt*)(S2863C8*)(S2863C19*), ABISELECT(80,44), "S2863C1");
    /*is_ambiguous_... S2863C7::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C8*)(S2863C7*)(S2863C6*), ABISELECT(16,8), "S2863C1");
    /*is_ambiguous_... S2863C7::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C7*)(S2863C6*), ABISELECT(16,8), "S2863C1");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C12*), ABISELECT(88,48), "S2863C1");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(88,48), "S2863C1");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C12*), ABISELECT(88,48), "S2863C1");
    check_base_class_offset(lv, (S2863C8*)(S2863C12*), ABISELECT(88,48), "S2863C1");
    check_base_class_offset(lv, (S2863C12*)(S2863C7*)(S2863C6*), ABISELECT(88,48), "S2863C1");
    /*is_ambiguous_... S2863C7::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C7*)(S2863C6*), ABISELECT(25,13), "S2863C1");
    check_base_class_offset(lv, (S2863C7*)(S2863C6*), ABISELECT(16,8), "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C13*)(S2863C6*), ABISELECT(32,16), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*), ABISELECT(112,60), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*), ABISELECT(112,60), "S2863C1");
    /*is_ambiguous_... S2863C1::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*), ABISELECT(112,60), "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C8*)(S2863C14*)(S2863C13*)(S2863C6*), ABISELECT(112,60), "S2863C1");
    check_base_class_offset(lv, (S2863C8*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(112,60), "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C6*), ABISELECT(32,16), "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C14*)(S2863C13*)(S2863C6*), ABISELECT(32,16), "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C14*)(S2863C13*)(S2863C6*), ABISELECT(32,16), "S2863C1");
    /*is_ambiguous_... S2863C6::S2863C13 */ AMB_check_base_class_offset(lv, (S2863C13*)(S2863C6*), ABISELECT(32,16), "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C16*)(S2863C6*), ABISELECT(48,24), "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C16*)(S2863C6*), ABISELECT(48,24), "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C16*)(S2863C6*), ABISELECT(48,24), "S2863C1");
    /*is_ambiguous_... S2863C16::S2863C8 */ AMB_check_base_class_offset(lv, (S2863C8*)(S2863C16*)(S2863C6*), ABISELECT(48,24), "S2863C1");
    /*is_ambiguous_... S2863C13::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C13*)(S2863C17*), ABISELECT(128,68), "S2863C1");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(128,68), "S2863C1");
    /*is_ambiguous_... S2863C14::S2863C9 */ AMB_check_base_class_offset(lv, (S2863C9*)(S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(128,68), "S2863C1");
    check_base_class_offset(lv, (S2863C14*)(S2863C13*)(S2863C17*), ABISELECT(128,68), "S2863C1");
    check_base_class_offset(lv, (S2863C13*)(S2863C17*), ABISELECT(128,68), "S2863C1");
    check_base_class_offset(lv, (S2863C17*)(S2863C16*)(S2863C6*), ABISELECT(128,68), "S2863C1");
    check_base_class_offset(lv, (S2863C16*)(S2863C6*), ABISELECT(48,24), "S2863C1");
    /*is_ambiguous_... S2863C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C8*)(S2863C19*), ABISELECT(168,88), "S2863C1");
    check_base_class_offset(lv, (S2123C30*)(S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(168,88), "S2863C1");
    check_base_class_offset(lv, (S2863C9*)(S2863C8*)(S2863C19*), ABISELECT(168,88), "S2863C1");
    check_base_class_offset(lv, (S2863C8*)(S2863C19*), ABISELECT(168,88), "S2863C1");
    /*is_ambiguous_... S2863C19::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S2863C19*), ABISELECT(177,93), "S2863C1");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*)(S2863C19*), ABISELECT(184,96), "S2863C1");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*)(S2863C19*), ABISELECT(184,96), "S2863C1");
    /*is_ambiguous_... S2863C19::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C19*), ABISELECT(184,96), "S2863C1");
    check_base_class_offset(lv, (S2863C19*)(S2863C18*), ABISELECT(168,88), "S2863C1");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C27*)(S2863C10_nt*)(S2863C18*), ABISELECT(152,80), "S2863C1");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C10_nt*)(S2863C18*), ABISELECT(152,80), "S2863C1");
    /*is_ambiguous_... S2863C18::S2863C10_nt */ AMB_check_base_class_offset(lv, (S2863C10_nt*)(S2863C18*), ABISELECT(152,80), "S2863C1");
    /*is_ambiguous_... S2863C18::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S2863C18*), ABISELECT(160,84), "S2863C1");
    check_base_class_offset(lv, (S2863C18*)(S2863C6*), ABISELECT(152,80), "S2863C1");
    check_base_class_offset(lv, (S2863C6*), ABISELECT(16,8), "S2863C1");
    test_class_info(&lv, &cd_S2863C1);
    dp->~S2863C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2863C1(Test_S2863C1, "S2863C1", ABISELECT(192,100));

#else // __cplusplus

extern void _ZN7S2863C1C1Ev();
extern void _ZN7S2863C1D2Ev();
Name_Map name_map_S2863C1[] = {
  NSPAIR(_ZN7S2863C1C1Ev),
  NSPAIR(_ZN7S2863C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C2;
extern VTBL_ENTRY _ZTI7S2863C2[];
extern  VTBL_ENTRY _ZTV7S2863C2[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2863C12;
extern VTBL_ENTRY _ZTI8S2863C12[];
extern  VTBL_ENTRY _ZTV8S2863C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C12[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C7;
extern VTBL_ENTRY _ZTI7S2863C7[];
extern  VTBL_ENTRY _ZTV7S2863C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C7[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C14;
extern VTBL_ENTRY _ZTI8S2863C14[];
extern  VTBL_ENTRY _ZTV8S2863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C14[];
extern Class_Descriptor cd_S2863C13;
extern VTBL_ENTRY _ZTI8S2863C13[];
extern  VTBL_ENTRY _ZTV8S2863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C13[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C14;
extern VTBL_ENTRY _ZTI8S2863C14[];
extern  VTBL_ENTRY _ZTV8S2863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C14[];
extern Class_Descriptor cd_S2863C13;
extern VTBL_ENTRY _ZTI8S2863C13[];
extern  VTBL_ENTRY _ZTV8S2863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C13[];
extern Class_Descriptor cd_S2863C17;
extern VTBL_ENTRY _ZTI8S2863C17[];
extern  VTBL_ENTRY _ZTV8S2863C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C17[];
extern Class_Descriptor cd_S2863C16;
extern VTBL_ENTRY _ZTI8S2863C16[];
extern  VTBL_ENTRY _ZTV8S2863C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C16[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2863C9;
extern VTBL_ENTRY _ZTI7S2863C9[];
extern  VTBL_ENTRY _ZTV7S2863C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C9[];
extern Class_Descriptor cd_S2863C8;
extern VTBL_ENTRY _ZTI7S2863C8[];
extern  VTBL_ENTRY _ZTV7S2863C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C8[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2863C19;
extern VTBL_ENTRY _ZTI8S2863C19[];
extern  VTBL_ENTRY _ZTV8S2863C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C19[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C10_nt;
extern VTBL_ENTRY _ZTI11S2863C10_nt[];
extern  VTBL_ENTRY _ZTV11S2863C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S2863C10_nt[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2863C18;
extern VTBL_ENTRY _ZTI8S2863C18[];
extern  VTBL_ENTRY _ZTV8S2863C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2863C18[];
extern Class_Descriptor cd_S2863C6;
extern VTBL_ENTRY _ZTI7S2863C6[];
extern  VTBL_ENTRY _ZTV7S2863C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C6[];
static Base_Class bases_S2863C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2863C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C30,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C9,    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
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2123C27,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2123C23,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(72,40), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2863C11_nt,    ABISELECT(80,44), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2863C8,    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
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2123C27,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    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
    17, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    16, //immediately_derived
  0, 0},
  {&cd_S2863C9,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2863C8,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2863C12,    ABISELECT(88,48), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2123C23,    ABISELECT(25,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2863C7,    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
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S2123C27,    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
    29, //immediately_derived
  0, 0},
  {&cd_S2123C23,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2123C30,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2863C9,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2863C8,    ABISELECT(112,60), //bcp->offset
    78, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2123C30,    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
    27, //immediately_derived
  0, 0},
  {&cd_S2863C9,    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
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2863C14,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2863C13,    ABISELECT(32,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    33, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    32, //immediately_derived
  0, 0},
  {&cd_S2863C9,    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
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2863C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S2123C27,    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
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2863C9,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2863C14,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2863C13,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2863C17,    ABISELECT(128,68), //bcp->offset
    90, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S2863C16,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2123C30,    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
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S2863C9,    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
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2863C8,    ABISELECT(168,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S2123C30,    ABISELECT(177,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
    49, //immediately_derived
  0, 0},
  {&cd_S2123C27,    ABISELECT(184,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
    48, //immediately_derived
  0, 0},
  {&cd_S2123C23,    ABISELECT(184,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
    48, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(184,96), //bcp->offset
    126, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S2863C19,    ABISELECT(168,88), //bcp->offset
    114, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    54, //immediately_derived
  0, 1},
  {&cd_S2123C27,    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
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S2863C10_nt,    ABISELECT(152,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S2123C23,    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
    54, //immediately_derived
  0, 0},
  {&cd_S2863C18,    ABISELECT(152,80), //bcp->offset
    103, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    55, //immediately_derived
  0, 1},
  {&cd_S2863C6,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2863C1[];
extern void _ZN7S2863C1D1Ev();
extern void _ZN7S2863C1D0Ev();
extern void _ZN7S2863C12v1Ev();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n112_N7S2863C1D1Ev,_ZTv0_n56_N7S2863C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2863C1D1Ev,_ZThn8_N7S2863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S2863C1D0Ev,_ZTv0_n56_N7S2863C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S2863C1D0Ev,_ZThn8_N7S2863C1D0Ev)() __attribute__((weak));
extern void _ZN7S2863C72v3Ev();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTvn16_n112_N7S2863C1D1Ev,_ZTvn8_n56_N7S2863C1D1Ev)();
extern void ABISELECT(_ZTvn16_n112_N7S2863C1D0Ev,_ZTvn8_n56_N7S2863C1D0Ev)();
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTvn32_n112_N7S2863C1D1Ev,_ZTvn16_n56_N7S2863C1D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N7S2863C1D0Ev,_ZTvn16_n56_N7S2863C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C1D1Ev,_ZTv0_n12_N7S2863C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S2863C1D1Ev,_ZThn44_N7S2863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C1D0Ev,_ZTv0_n12_N7S2863C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S2863C1D0Ev,_ZThn44_N7S2863C1D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S2863C1D1Ev,_ZThn48_N7S2863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S2863C1D0Ev,_ZThn48_N7S2863C1D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S2863C1D1Ev,_ZThn60_N7S2863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S2863C1D0Ev,_ZThn60_N7S2863C1D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S2863C1D1Ev,_ZTv0_n40_N7S2863C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S2863C1D1Ev,_ZThn68_N7S2863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S2863C1D0Ev,_ZTv0_n40_N7S2863C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S2863C1D0Ev,_ZThn68_N7S2863C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev)();
extern void ABISELECT(_ZThn152_N7S2863C1D1Ev,_ZThn80_N7S2863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev)();
extern void ABISELECT(_ZThn152_N7S2863C1D0Ev,_ZThn80_N7S2863C1D0Ev)() __attribute__((weak));
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S2863C1D1Ev,_ZThn88_N7S2863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev)();
extern void ABISELECT(_ZThn168_N7S2863C1D0Ev,_ZThn88_N7S2863C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2863C1[] = {
  ABISELECT(168,88),
  ABISELECT(152,80),
  ABISELECT(128,68),
  ABISELECT(112,60),
  ABISELECT(88,48),
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(72,40),
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&_ZN7S2863C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2863C12v1Ev,
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(152,80),
  ABISELECT(136,72),
  ABISELECT(112,60),
  ABISELECT(96,52),
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S2863C1D1Ev,_ZTv0_n56_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S2863C1D0Ev,_ZTv0_n56_N7S2863C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2863C72v3Ev,
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(80,44),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n112_N7S2863C1D1Ev,_ZTvn8_n56_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n112_N7S2863C1D0Ev,_ZTvn8_n56_N7S2863C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(80,44),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N7S2863C1D1Ev,_ZTvn16_n56_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N7S2863C1D0Ev,_ZTvn16_n56_N7S2863C1D0Ev),
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C1D1Ev,_ZTv0_n12_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C1D0Ev,_ZTv0_n12_N7S2863C1D0Ev),
  ABISELECT(-88,-48),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev),
  ABISELECT(-112,-60),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev),
  ABISELECT(-128,-68),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2863C1D1Ev,_ZTv0_n40_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2863C1D0Ev,_ZTv0_n40_N7S2863C1D0Ev),
  ABISELECT(-152,-80),
  ABISELECT(-72,-36),
  ABISELECT(-80,-40),
  ABISELECT(-152,-80),
  ABISELECT(16,8),
  ABISELECT(-152,-80),
  ABISELECT(-80,-40),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev),
  ABISELECT(-168,-88),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI7S2863C1[0]),
};
extern VTBL_ENTRY _ZTV7S2863C1[];
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C6D1Ev();
extern void _ZN7S2863C6D0Ev();
extern void _ZN7S2863C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C6__7S2863C1[] = {
  ABISELECT(152,80),
  ABISELECT(136,72),
  ABISELECT(112,60),
  ABISELECT(96,52),
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C6D0Ev,
  (VTBL_ENTRY)&_ZN7S2863C72v3Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C7D1Ev();
extern void _ZN7S2863C7D0Ev();
extern void _ZN7S2863C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C77S2863C6__7S2863C1[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2863C72v3Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C87S2863C77S2863C6__7S2863C1[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C87S2863C77S2863C6__7S2863C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C87S2863C77S2863C6__7S2863C1[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn64_N7S2863C8D1Ev,_ZThn36_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn64_N7S2863C8D0Ev,_ZThn36_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C87S2863C77S2863C6__7S2863C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C77S2863C6__7S2863C1[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S2863C7D1Ev,_ZThn36_N7S2863C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S2863C7D0Ev,_ZThn36_N7S2863C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C77S2863C6__7S2863C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev)();
extern void ABISELECT(_ZThn72_N7S2863C7D1Ev,_ZThn40_N7S2863C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev)();
extern void ABISELECT(_ZThn72_N7S2863C7D0Ev,_ZThn40_N7S2863C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C12__7S2863C77S2863C6__7S2863C1[] = {
  ABISELECT(-72,-40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2863C7[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C13D1Ev();
extern void _ZN8S2863C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C137S2863C6__7S2863C1[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(80,44),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C14D1Ev();
extern void _ZN8S2863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C148S2863C137S2863C6__7S2863C1[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(80,44),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C98S2863C148S2863C137S2863C6__A3__7S2863C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn80_N8S2863C14D1Ev,_ZThn44_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn80_N8S2863C14D0Ev,_ZThn44_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C148S2863C137S2863C6__7S2863C1[] = {
  ABISELECT(-80,-44),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C148S2863C137S2863C6__7S2863C1[] = {
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev)();
extern void ABISELECT(_ZThn48_N8S2863C14D1Ev,_ZThn28_N8S2863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev)();
extern void ABISELECT(_ZThn48_N8S2863C14D0Ev,_ZThn28_N8S2863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C148S2863C137S2863C6__7S2863C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C137S2863C6__7S2863C1[] = {
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn80_N8S2863C13D1Ev,_ZThn44_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn80_N8S2863C13D0Ev,_ZThn44_N8S2863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C137S2863C6__7S2863C1[] = {
  ABISELECT(-80,-44),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S2863C13D1Ev,_ZThn28_N8S2863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S2863C13D0Ev,_ZThn28_N8S2863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C137S2863C6__7S2863C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C16D1Ev();
extern void _ZN8S2863C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C167S2863C6__7S2863C1[] = {
  ABISELECT(64,36),
  ABISELECT(80,44),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C16D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C16D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C88S2863C167S2863C6__A3__7S2863C1[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C88S2863C167S2863C6__A4__7S2863C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C88S2863C167S2863C6__A3__7S2863C1[] = {
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S2863C8D1Ev,_ZThn20_N7S2863C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S2863C8D0Ev,_ZThn20_N7S2863C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C88S2863C167S2863C6__A3__7S2863C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C167S2863C6__7S2863C1[] = {
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn32_N8S2863C16D1Ev,_ZThn20_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn32_N8S2863C16D0Ev,_ZThn20_N8S2863C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C167S2863C6__7S2863C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn80_N8S2863C16D1Ev,_ZThn44_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn80_N8S2863C16D0Ev,_ZThn44_N8S2863C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C17__8S2863C167S2863C6__7S2863C1[] = {
  ABISELECT(-80,-44),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev)();
extern void ABISELECT(_ZThn64_N8S2863C16D1Ev,_ZThn36_N8S2863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev)();
extern void ABISELECT(_ZThn64_N8S2863C16D0Ev,_ZThn36_N8S2863C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__A1__8S2863C167S2863C6__7S2863C1[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S2863C16[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C6__7S2863C1[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C6D1Ev,_ZTv0_n12_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S2863C6D1Ev,_ZThn36_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2863C6D0Ev,_ZTv0_n12_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S2863C6D0Ev,_ZThn36_N7S2863C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C6__7S2863C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C6D1Ev,_ZTv0_n12_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C6D0Ev,_ZTv0_n12_N7S2863C6D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn72_N7S2863C6D1Ev,_ZThn40_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn72_N7S2863C6D0Ev,_ZThn40_N7S2863C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C12__7S2863C6__7S2863C1[] = {
  ABISELECT(-72,-40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZThn16_N7S2863C6D1Ev,_ZThn8_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S2863C6D0Ev,_ZThn8_N7S2863C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2863C13__7S2863C6__7S2863C1[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(80,44),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2863C6D1Ev,_ZThn8_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2863C6D0Ev,_ZThn8_N7S2863C6D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn96_N7S2863C6D1Ev,_ZThn52_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn96_N7S2863C6D0Ev,_ZThn52_N7S2863C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2863C8__A2__7S2863C6__7S2863C1[] = {
  ABISELECT(-96,-52),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZThn32_N7S2863C6D1Ev,_ZThn16_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S2863C6D0Ev,_ZThn16_N7S2863C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2863C16__7S2863C6__7S2863C1[] = {
  ABISELECT(64,36),
  ABISELECT(80,44),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S2863C6D1Ev,_ZThn16_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S2863C6D0Ev,_ZThn16_N7S2863C6D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S2863C6D1Ev,_ZTv0_n40_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S2863C6D1Ev,_ZThn60_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S2863C6D0Ev,_ZTv0_n40_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S2863C6D0Ev,_ZThn60_N7S2863C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C17__7S2863C6__7S2863C1[] = {
  ABISELECT(-112,-60),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2863C6D1Ev,_ZTv0_n40_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2863C6D0Ev,_ZTv0_n40_N7S2863C6D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn136_N7S2863C6D1Ev,_ZThn72_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn136_N7S2863C6D0Ev,_ZThn72_N7S2863C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C18__7S2863C6__7S2863C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(-72,-36),
  ABISELECT(-80,-40),
  ABISELECT(-152,-80),
  ABISELECT(16,8),
  ABISELECT(-152,-80),
  ABISELECT(-80,-40),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev)();
extern void ABISELECT(_ZThn152_N7S2863C6D1Ev,_ZThn80_N7S2863C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev)();
extern void ABISELECT(_ZThn152_N7S2863C6D0Ev,_ZThn80_N7S2863C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C19__7S2863C6__7S2863C1[] = {
  ABISELECT(-152,-80),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt8S2863C19__A1__7S2863C6__7S2863C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI7S2863C6[0]),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C12D1Ev();
extern void _ZN8S2863C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C12__7S2863C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C12D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C88S2863C12__A1__7S2863C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C88S2863C12__A1__7S2863C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C88S2863C12__A1__7S2863C1[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C88S2863C12__A1__7S2863C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C12__7S2863C1[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C12__7S2863C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S2863C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C12D1Ev,_ZTv0_n12_N8S2863C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C12D0Ev,_ZTv0_n12_N8S2863C12D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C8__A2__7S2863C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C8__A2__7S2863C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C8__A2__7S2863C1[] = {
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C8__A2__7S2863C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C17D1Ev();
extern void _ZN8S2863C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C17__7S2863C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C17D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C17D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C13D1Ev();
extern void _ZN8S2863C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C138S2863C17__A1__7S2863C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C13D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C14D1Ev();
extern void _ZN8S2863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C148S2863C138S2863C17__A1__7S2863C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C14D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C98S2863C148S2863C138S2863C17__A5__7S2863C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C148S2863C138S2863C17__A1__7S2863C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C148S2863C138S2863C17__A1__7S2863C1[] = {
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C148S2863C138S2863C17__A1__7S2863C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S2863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C138S2863C17__A1__7S2863C1[] = {
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C138S2863C17__A1__7S2863C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C138S2863C17__A1__7S2863C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S2863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C17__7S2863C1[] = {
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S2863C8__8S2863C17__7S2863C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C17D1Ev,_ZTv0_n36_N8S2863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C17D0Ev,_ZTv0_n36_N8S2863C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C17__7S2863C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S2863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C17D1Ev,_ZTv0_n12_N8S2863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C17D0Ev,_ZTv0_n12_N8S2863C17D0Ev),
};
extern void _ZN8S2863C18D1Ev();
extern void _ZN8S2863C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C18__7S2863C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-80,-40),
  ABISELECT(-152,-80),
  ABISELECT(16,8),
  ABISELECT(-152,-80),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&_ZN8S2863C18D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt8S2863C18__A2__7S2863C1[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S2863C18D1Ev,_ZThn8_N8S2863C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev)();
extern void ABISELECT(_ZThn16_N8S2863C18D0Ev,_ZThn8_N8S2863C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2863C19__8S2863C18__7S2863C1[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C18__7S2863C1[] = {
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C18D1Ev,_ZTv0_n12_N8S2863C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C18D0Ev,_ZTv0_n12_N8S2863C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C18__7S2863C1[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C18D1Ev,_ZTv0_n12_N8S2863C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C18D0Ev,_ZTv0_n12_N8S2863C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt8S2863C19__A1__8S2863C18__7S2863C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2863C18[0]),
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN8S2863C19D1Ev();
extern void _ZN8S2863C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2863C19__7S2863C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN8S2863C19D1Ev,
  (VTBL_ENTRY)&_ZN8S2863C19D0Ev,
};
extern void _ZN7S2863C92v2Ev();
extern void _ZN7S2863C8D1Ev();
extern void _ZN7S2863C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C88S2863C19__A4__7S2863C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2863C8D0Ev,
};
extern void _ZN7S2863C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2863C97S2863C88S2863C19__A6__7S2863C1[] = {
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S2863C9[0]),
  (VTBL_ENTRY)&_ZN7S2863C92v2Ev,
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__7S2863C88S2863C19__A4__7S2863C1[] = {
  0,
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S2863C88S2863C19__A4__7S2863C1[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI7S2863C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt8S2863C19__A1__7S2863C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI11S2863C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__8S2863C19__7S2863C1[] = {
  0,
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S2863C19__7S2863C1[] = {
  ABISELECT(88,44),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C19D1Ev,_ZTv0_n12_N8S2863C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S2863C19D0Ev,_ZTv0_n12_N8S2863C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S2863C10_nt__A__8S2863C19__7S2863C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2863C19[0]),
};
static  VTT_ENTRY vtt_S2863C1[] = {
  {&(_ZTV7S2863C1[13]),  13,129},
  {&(_ZTV7S2863C1[31]),  31,129},
  {&(_ZTV7S2863C1[61]),  61,129},
  {&(_ZTV7S2863C1[64]),  64,129},
  {&(_ZTV7S2863C1[75]),  75,129},
  {&(_ZTV7S2863C1[43]),  43,129},
  {&(_ZTV7S2863C1[87]),  87,129},
  {&(_ZTV7S2863C1[55]),  55,129},
  {&(_ZTV7S2863C1[100]),  100,129},
  {&(_ZTV7S2863C1[112]),  112,129},
  {&(_ZTV7S2863C1[123]),  123,129},
  {&(_ZTV7S2863C1[129]),  129,129},
  {&(_tg__ZTV7S2863C6__7S2863C1[12]),  12,16},
  {&(_tg__ZTV7S2863C77S2863C6__7S2863C1[8]),  8,12},
  {&(_tg__ZTV7S2863C87S2863C77S2863C6__7S2863C1[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C87S2863C77S2863C6__7S2863C1[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C87S2863C77S2863C6__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C87S2863C77S2863C6__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C77S2863C6__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C77S2863C6__7S2863C1[3]),  3,5},
  {&(_tg__ZTV8S2863C12__7S2863C77S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV8S2863C137S2863C6__7S2863C1[8]),  8,11},
  {&(_tg__ZTV8S2863C148S2863C137S2863C6__7S2863C1[8]),  8,11},
  {&(_tg__ZTV7S2863C98S2863C148S2863C137S2863C6__A3__7S2863C1[4]),  4,5},
  {&(_tg__ZTV7S2863C8__8S2863C148S2863C137S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C148S2863C137S2863C6__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C148S2863C137S2863C6__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C137S2863C6__7S2863C1[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C137S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C137S2863C6__7S2863C1[3]),  3,5},
  {&(_tg__ZTV8S2863C167S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV7S2863C88S2863C167S2863C6__A3__7S2863C1[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C88S2863C167S2863C6__A4__7S2863C1[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C88S2863C167S2863C6__A3__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C88S2863C167S2863C6__A3__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C167S2863C6__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C167S2863C6__7S2863C1[3]),  3,5},
  {&(_tg__ZTV8S2863C17__8S2863C167S2863C6__7S2863C1[10]),  10,13},
  {&(_tg__ZTV7S2863C8__A1__8S2863C167S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__7S2863C6__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C6__7S2863C1[3]),  3,5},
  {&(_tg__ZTV8S2863C12__7S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV8S2863C13__7S2863C6__7S2863C1[8]),  8,11},
  {&(_tg__ZTV7S2863C8__A2__7S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV8S2863C16__7S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV8S2863C17__7S2863C6__7S2863C1[10]),  10,13},
  {&(_tg__ZTV8S2863C18__7S2863C6__7S2863C1[9]),  9,11},
  {&(_tg__ZTV8S2863C19__7S2863C6__7S2863C1[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt8S2863C19__A1__7S2863C6__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C10_nt__7S2863C1[3]),  3,3},
  {&(_tg__ZTV8S2863C12__7S2863C1[7]),  7,10},
  {&(_tg__ZTV7S2863C88S2863C12__A1__7S2863C1[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C88S2863C12__A1__7S2863C1[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C88S2863C12__A1__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C88S2863C12__A1__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C12__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C12__7S2863C1[3]),  3,5},
  {&(_tg__ZTV7S2863C8__A2__7S2863C1[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C8__A2__7S2863C1[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C8__A2__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C8__A2__7S2863C1[3]),  3,5},
  {&(_tg__ZTV8S2863C17__7S2863C1[8]),  8,11},
  {&(_tg__ZTV8S2863C138S2863C17__A1__7S2863C1[8]),  8,11},
  {&(_tg__ZTV8S2863C148S2863C138S2863C17__A1__7S2863C1[8]),  8,11},
  {&(_tg__ZTV7S2863C98S2863C148S2863C138S2863C17__A5__7S2863C1[4]),  4,5},
  {&(_tg__ZTV7S2863C8__8S2863C148S2863C138S2863C17__A1__7S2863C1[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C148S2863C138S2863C17__A1__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C148S2863C138S2863C17__A1__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C138S2863C17__A1__7S2863C1[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C138S2863C17__A1__7S2863C1[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C138S2863C17__A1__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__8S2863C17__7S2863C1[3]),  3,3},
  {&(_tg__ZTV7S2863C8__8S2863C17__7S2863C1[9]),  9,12},
  {&(_tg__ZTV11S2863C11_nt__8S2863C17__7S2863C1[3]),  3,5},
  {&(_tg__ZTV8S2863C18__7S2863C1[8]),  8,10},
  {&(_tg__ZTV11S2863C10_nt8S2863C18__A2__7S2863C1[3]),  3,3},
  {&(_tg__ZTV8S2863C19__8S2863C18__7S2863C1[9]),  9,12},
  {&(_tg__ZTV11S2863C10_nt__8S2863C18__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C18__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt8S2863C19__A1__8S2863C18__7S2863C1[3]),  3,3},
  {&(_tg__ZTV8S2863C19__7S2863C1[7]),  7,10},
  {&(_tg__ZTV7S2863C88S2863C19__A4__7S2863C1[7]),  7,10},
  {&(_tg__ZTV7S2863C97S2863C88S2863C19__A6__7S2863C1[4]),  4,5},
  {&(_tg__ZTV11S2863C10_nt__7S2863C88S2863C19__A4__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S2863C88S2863C19__A4__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt8S2863C19__A1__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C10_nt__8S2863C19__7S2863C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S2863C19__7S2863C1[3]),  3,5},
  {&(_tg__ZTV11S2863C10_nt__A__8S2863C19__7S2863C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2863C1[];
extern  VTBL_ENTRY _ZTV7S2863C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2863C1[];
static VTBL_ENTRY alt_thunk_names127[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C18D0Ev,_ZTv0_n36_N8S2863C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2863C18D0Ev,_ZThn8_N8S2863C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C18D1Ev,_ZTv0_n36_N8S2863C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S2863C18D1Ev,_ZThn8_N8S2863C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2863C6D0Ev,_ZTv0_n40_N7S2863C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S2863C6D0Ev,_ZThn60_N7S2863C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2863C6D1Ev,_ZTv0_n40_N7S2863C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S2863C6D1Ev,_ZThn60_N7S2863C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C6D0Ev,_ZTv0_n36_N7S2863C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S2863C6D0Ev,_ZThn80_N7S2863C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S2863C6D0Ev,_ZThn72_N7S2863C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S2863C6D0Ev,_ZThn52_N7S2863C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C6D0Ev,_ZThn40_N7S2863C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C6D1Ev,_ZTv0_n36_N7S2863C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S2863C6D1Ev,_ZThn80_N7S2863C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S2863C6D1Ev,_ZThn72_N7S2863C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S2863C6D1Ev,_ZThn52_N7S2863C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C6D1Ev,_ZThn40_N7S2863C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C6D0Ev,_ZTv0_n12_N7S2863C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2863C6D0Ev,_ZThn36_N7S2863C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C6D1Ev,_ZTv0_n12_N7S2863C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2863C6D1Ev,_ZThn36_N7S2863C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C16D0Ev,_ZTv0_n36_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S2863C16D0Ev,_ZThn36_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C16D1Ev,_ZTv0_n36_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S2863C16D1Ev,_ZThn36_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2863C16D0Ev,_ZTv0_n40_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S2863C16D0Ev,_ZThn44_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S2863C16D1Ev,_ZTv0_n40_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S2863C16D1Ev,_ZThn44_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C16D0Ev,_ZTv0_n12_N8S2863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S2863C16D0Ev,_ZThn20_N8S2863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C16D1Ev,_ZTv0_n12_N8S2863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S2863C16D1Ev,_ZThn20_N8S2863C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C13D0Ev,_ZTv0_n12_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C13D0Ev,_ZThn28_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C13D1Ev,_ZTv0_n12_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C13D1Ev,_ZThn28_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D0Ev,_ZTv0_n36_N8S2863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S2863C13D0Ev,_ZThn44_N8S2863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C13D1Ev,_ZTv0_n36_N8S2863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S2863C13D1Ev,_ZThn44_N8S2863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D0Ev,_ZTv0_n12_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C14D0Ev,_ZThn28_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S2863C14D1Ev,_ZTv0_n12_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S2863C14D1Ev,_ZThn28_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D0Ev,_ZTv0_n36_N8S2863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S2863C14D0Ev,_ZThn44_N8S2863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S2863C14D1Ev,_ZTv0_n36_N8S2863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S2863C14D1Ev,_ZThn44_N8S2863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C7D0Ev,_ZTv0_n36_N7S2863C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C7D0Ev,_ZThn40_N7S2863C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C7D1Ev,_ZTv0_n36_N7S2863C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S2863C7D1Ev,_ZThn40_N7S2863C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C7D0Ev,_ZTv0_n12_N7S2863C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2863C7D0Ev,_ZThn36_N7S2863C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C7D1Ev,_ZTv0_n12_N7S2863C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2863C7D1Ev,_ZThn36_N7S2863C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D0Ev,_ZTv0_n12_N7S2863C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2863C8D0Ev,_ZThn20_N7S2863C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2863C8D0Ev,_ZThn36_N7S2863C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C8D1Ev,_ZTv0_n12_N7S2863C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2863C8D1Ev,_ZThn20_N7S2863C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2863C8D1Ev,_ZThn36_N7S2863C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2863C1D0Ev,_ZTv0_n40_N7S2863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S2863C1D0Ev,_ZThn68_N7S2863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2863C1D1Ev,_ZTv0_n40_N7S2863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S2863C1D1Ev,_ZThn68_N7S2863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C1D0Ev,_ZTv0_n36_N7S2863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S2863C1D0Ev,_ZThn88_N7S2863C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S2863C1D0Ev,_ZThn80_N7S2863C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S2863C1D0Ev,_ZThn60_N7S2863C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S2863C1D0Ev,_ZThn48_N7S2863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S2863C1D1Ev,_ZTv0_n36_N7S2863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S2863C1D1Ev,_ZThn88_N7S2863C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S2863C1D1Ev,_ZThn80_N7S2863C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S2863C1D1Ev,_ZThn60_N7S2863C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S2863C1D1Ev,_ZThn48_N7S2863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C1D0Ev,_ZTv0_n12_N7S2863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2863C1D0Ev,_ZThn44_N7S2863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2863C1D1Ev,_ZTv0_n12_N7S2863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2863C1D1Ev,_ZThn44_N7S2863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S2863C1D0Ev,_ZTv0_n56_N7S2863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2863C1D0Ev,_ZThn8_N7S2863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S2863C1D1Ev,_ZTv0_n56_N7S2863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2863C1D1Ev,_ZThn8_N7S2863C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2863C1 = {  "S2863C1", // class name
  bases_S2863C1, 56,
  &(vtc_S2863C1[0]), // expected_vtbl_contents
  &(vtt_S2863C1[0]), // expected_vtt_contents
  ABISELECT(192,100), // object size
  NSPAIRA(_ZTI7S2863C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2863C1),129, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2863C1),89, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names127,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21777C3_nt  {
  virtual  ~S21777C3_nt(); // _ZN11S21777C3_ntD1Ev
  virtual void  v9(); // _ZN11S21777C3_nt2v9Ev
  virtual void  v10(); // _ZN11S21777C3_nt3v10Ev
  virtual void  v11(); // _ZN11S21777C3_nt3v11Ev
  virtual void  v12(); // _ZN11S21777C3_nt3v12Ev
  virtual void  v13(); // _ZN11S21777C3_nt3v13Ev
  virtual void  v14(); // _ZN11S21777C3_nt3v14Ev
  virtual void  v15(); // _ZN11S21777C3_nt3v15Ev
  virtual void  v16(); // _ZN11S21777C3_nt3v16Ev
  S21777C3_nt(); // tgen
};
//SIG(-1 S21777C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8}


 S21777C3_nt ::~S21777C3_nt(){ note_dtor("S21777C3_nt", this);}
void  S21777C3_nt ::v9(){vfunc_called(this, "_ZN11S21777C3_nt2v9Ev");}
void  S21777C3_nt ::v10(){vfunc_called(this, "_ZN11S21777C3_nt3v10Ev");}
void  S21777C3_nt ::v11(){vfunc_called(this, "_ZN11S21777C3_nt3v11Ev");}
void  S21777C3_nt ::v12(){vfunc_called(this, "_ZN11S21777C3_nt3v12Ev");}
void  S21777C3_nt ::v13(){vfunc_called(this, "_ZN11S21777C3_nt3v13Ev");}
void  S21777C3_nt ::v14(){vfunc_called(this, "_ZN11S21777C3_nt3v14Ev");}
void  S21777C3_nt ::v15(){vfunc_called(this, "_ZN11S21777C3_nt3v15Ev");}
void  S21777C3_nt ::v16(){vfunc_called(this, "_ZN11S21777C3_nt3v16Ev");}
S21777C3_nt ::S21777C3_nt(){ note_ctor("S21777C3_nt", this);} // tgen

//skip512 S21777C3_nt

#else // __cplusplus

extern void _ZN11S21777C3_ntC1Ev();
extern void _ZN11S21777C3_ntD1Ev();
Name_Map name_map_S21777C3_nt[] = {
  NSPAIR(_ZN11S21777C3_ntC1Ev),
  NSPAIR(_ZN11S21777C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S21777C3_nt[];
extern void _ZN11S21777C3_ntD1Ev();
extern void _ZN11S21777C3_ntD0Ev();
extern void _ZN11S21777C3_nt2v9Ev();
extern void _ZN11S21777C3_nt3v10Ev();
extern void _ZN11S21777C3_nt3v11Ev();
extern void _ZN11S21777C3_nt3v12Ev();
extern void _ZN11S21777C3_nt3v13Ev();
extern void _ZN11S21777C3_nt3v14Ev();
extern void _ZN11S21777C3_nt3v15Ev();
extern void _ZN11S21777C3_nt3v16Ev();
static  VTBL_ENTRY vtc_S21777C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S21777C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S21777C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI11S21777C3_nt[];
VTBL_ENTRY *P__ZTI11S21777C3_nt = _ZTI11S21777C3_nt; 
extern  VTBL_ENTRY _ZTV11S21777C3_nt[];
Class_Descriptor cd_S21777C3_nt = {  "S21777C3_nt", // class name
  0,0,//no base classes
  &(vtc_S21777C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S21777C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S21777C3_nt),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21777C5_nt  {
  void *s21777c5f0;
  int s21777c5f1;
  void  mf21777c5(); // _ZN11S21777C5_nt9mf21777c5Ev
};
//SIG(-1 S21777C5_nt) C1{ m Fp Fi}


void  S21777C5_nt ::mf21777c5(){}

//skip512 S21777C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21777C7_nt  {
  int s21777c7f0;
  __tsi64 s21777c7f1;
  int s21777c7f2[27];
  __tsi64 s21777c7f3[3];
  char s21777c7f4[512];
  void  mf21777c7(); // _ZN11S21777C7_nt9mf21777c7Ev
};
//SIG(-1 S21777C7_nt) C1{ m Fi FL Fi[27] FL[3] Fc[512]}


void  S21777C7_nt ::mf21777c7(){}

//skip512 S21777C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21777C4  {
  ::S21777C5_nt s21777c4f0;
  ::S21777C5_nt s21777c4f1;
  ::S21777C7_nt s21777c4f2;
  __tsi64 s21777c4f3[3];
  char s21777c4f4[2];
};
//SIG(-1 S21777C4) C1{ FC2{ m Fp Fi} FC2 FC3{ m Fi FL Fi[27] FL[3] Fc[512]} FL[3] Fc[2]}



static void Test_S21777C4()
{
  {
    init_simple_test("S21777C4");
    S21777C4 lv;
    check2(sizeof(lv), ABISELECT(728,700), "sizeof(S21777C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21777C4)");
    check_field_offset(lv, s21777c4f0, 0, "S21777C4.s21777c4f0");
    check_field_offset(lv, s21777c4f1, ABISELECT(16,8), "S21777C4.s21777c4f1");
    check_field_offset(lv, s21777c4f2, ABISELECT(32,16), "S21777C4.s21777c4f2");
    check_field_offset(lv, s21777c4f3, ABISELECT(696,672), "S21777C4.s21777c4f3");
    check_field_offset(lv, s21777c4f4, ABISELECT(720,696), "S21777C4.s21777c4f4");
  }
}
static Arrange_To_Call_Me vS21777C4(Test_S21777C4, "S21777C4", ABISELECT(728,700));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21777C2  : S21777C3_nt {
  ::S21777C4 s21777c2f0;
  char s21777c2f1[4];
  __tsi64 s21777c2f2;
  int s21777c2f3[3];
  virtual  ~S21777C2(); // _ZN8S21777C2D1Ev
  virtual void  v1(); // _ZN8S21777C22v1Ev
  virtual void  v2(); // _ZN8S21777C22v2Ev
  virtual void  v3(); // _ZN8S21777C22v3Ev
  virtual void  v4(); // _ZN8S21777C22v4Ev
  virtual void  v5(); // _ZN8S21777C22v5Ev
  virtual void  v6(); // _ZN8S21777C22v6Ev
  virtual void  v7(); // _ZN8S21777C22v7Ev
  virtual void  v8(); // _ZN8S21777C22v8Ev
  S21777C2(); // tgen
};
//SIG(-1 S21777C2) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3{ FC4{ m Fp Fi} FC4 FC5{ m Fi FL Fi[27] FL[3] Fc[512]} FL[3] Fc[2]} Fc[4] FL Fi[3]}


 S21777C2 ::~S21777C2(){ note_dtor("S21777C2", this);}
void  S21777C2 ::v1(){vfunc_called(this, "_ZN8S21777C22v1Ev");}
void  S21777C2 ::v2(){vfunc_called(this, "_ZN8S21777C22v2Ev");}
void  S21777C2 ::v3(){vfunc_called(this, "_ZN8S21777C22v3Ev");}
void  S21777C2 ::v4(){vfunc_called(this, "_ZN8S21777C22v4Ev");}
void  S21777C2 ::v5(){vfunc_called(this, "_ZN8S21777C22v5Ev");}
void  S21777C2 ::v6(){vfunc_called(this, "_ZN8S21777C22v6Ev");}
void  S21777C2 ::v7(){vfunc_called(this, "_ZN8S21777C22v7Ev");}
void  S21777C2 ::v8(){vfunc_called(this, "_ZN8S21777C22v8Ev");}
S21777C2 ::S21777C2(){ note_ctor("S21777C2", this);} // tgen

static void Test_S21777C2()
{
  extern Class_Descriptor cd_S21777C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(97,183)];
    init_test(&cd_S21777C2, buf);
    S21777C2 *dp, &lv = *(dp=new (buf) S21777C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,728), "sizeof(S21777C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21777C2)");
    check_base_class_offset(lv, (S21777C3_nt*), 0, "S21777C2");
    check_field_offset(lv, s21777c2f0, ABISELECT(8,4), "S21777C2.s21777c2f0");
    check_field_offset(lv, s21777c2f1, ABISELECT(736,704), "S21777C2.s21777c2f1");
    check_field_offset(lv, s21777c2f2, ABISELECT(744,708), "S21777C2.s21777c2f2");
    check_field_offset(lv, s21777c2f3, ABISELECT(752,716), "S21777C2.s21777c2f3");
    test_class_info(&lv, &cd_S21777C2);
    dp->~S21777C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21777C2(Test_S21777C2, "S21777C2", ABISELECT(768,728));

#else // __cplusplus

extern void _ZN8S21777C2C1Ev();
extern void _ZN8S21777C2D1Ev();
Name_Map name_map_S21777C2[] = {
  NSPAIR(_ZN8S21777C2C1Ev),
  NSPAIR(_ZN8S21777C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21777C3_nt;
extern VTBL_ENTRY _ZTI11S21777C3_nt[];
extern  VTBL_ENTRY _ZTV11S21777C3_nt[];
static Base_Class bases_S21777C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21777C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21777C2[];
extern void _ZN8S21777C2D1Ev();
extern void _ZN8S21777C2D0Ev();
extern void _ZN11S21777C3_nt2v9Ev();
extern void _ZN11S21777C3_nt3v10Ev();
extern void _ZN11S21777C3_nt3v11Ev();
extern void _ZN11S21777C3_nt3v12Ev();
extern void _ZN11S21777C3_nt3v13Ev();
extern void _ZN11S21777C3_nt3v14Ev();
extern void _ZN11S21777C3_nt3v15Ev();
extern void _ZN11S21777C3_nt3v16Ev();
extern void _ZN8S21777C22v1Ev();
extern void _ZN8S21777C22v2Ev();
extern void _ZN8S21777C22v3Ev();
extern void _ZN8S21777C22v4Ev();
extern void _ZN8S21777C22v5Ev();
extern void _ZN8S21777C22v6Ev();
extern void _ZN8S21777C22v7Ev();
extern void _ZN8S21777C22v8Ev();
static  VTBL_ENTRY vtc_S21777C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21777C2[0]),
  (VTBL_ENTRY)&_ZN8S21777C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21777C2D0Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S21777C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S21777C22v1Ev,
  (VTBL_ENTRY)&_ZN8S21777C22v2Ev,
  (VTBL_ENTRY)&_ZN8S21777C22v3Ev,
  (VTBL_ENTRY)&_ZN8S21777C22v4Ev,
  (VTBL_ENTRY)&_ZN8S21777C22v5Ev,
  (VTBL_ENTRY)&_ZN8S21777C22v6Ev,
  (VTBL_ENTRY)&_ZN8S21777C22v7Ev,
  (VTBL_ENTRY)&_ZN8S21777C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S21777C2[];
extern  VTBL_ENTRY _ZTV8S21777C2[];
Class_Descriptor cd_S21777C2 = {  "S21777C2", // class name
  bases_S21777C2, 1,
  &(vtc_S21777C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(768,728), // object size
  NSPAIRA(_ZTI8S21777C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21777C2),20, //virtual function table var
  2, // 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  S21777C9_nt  {
  virtual  ~S21777C9_nt(); // _ZN11S21777C9_ntD1Ev
  virtual void  v19(); // _ZN11S21777C9_nt3v19Ev
  virtual void  v20(); // _ZN11S21777C9_nt3v20Ev
  S21777C9_nt(); // tgen
};
//SIG(-1 S21777C9_nt) C1{ vd v1 v2}


 S21777C9_nt ::~S21777C9_nt(){ note_dtor("S21777C9_nt", this);}
void  S21777C9_nt ::v19(){vfunc_called(this, "_ZN11S21777C9_nt3v19Ev");}
void  S21777C9_nt ::v20(){vfunc_called(this, "_ZN11S21777C9_nt3v20Ev");}
S21777C9_nt ::S21777C9_nt(){ note_ctor("S21777C9_nt", this);} // tgen

//skip512 S21777C9_nt

#else // __cplusplus

extern void _ZN11S21777C9_ntC1Ev();
extern void _ZN11S21777C9_ntD1Ev();
Name_Map name_map_S21777C9_nt[] = {
  NSPAIR(_ZN11S21777C9_ntC1Ev),
  NSPAIR(_ZN11S21777C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S21777C9_nt[];
extern void _ZN11S21777C9_ntD1Ev();
extern void _ZN11S21777C9_ntD0Ev();
extern void _ZN11S21777C9_nt3v19Ev();
extern void _ZN11S21777C9_nt3v20Ev();
static  VTBL_ENTRY vtc_S21777C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S21777C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S21777C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S21777C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S21777C9_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S21777C9_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI11S21777C9_nt[];
VTBL_ENTRY *P__ZTI11S21777C9_nt = _ZTI11S21777C9_nt; 
extern  VTBL_ENTRY _ZTV11S21777C9_nt[];
Class_Descriptor cd_S21777C9_nt = {  "S21777C9_nt", // class name
  0,0,//no base classes
  &(vtc_S21777C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S21777C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S21777C9_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  S21777C8  : S21777C9_nt {
  virtual void  v17(); // _ZN8S21777C83v17Ev
  virtual void  v18(); // _ZN8S21777C83v18Ev
  ~S21777C8(); // tgen
  S21777C8(); // tgen
};
//SIG(-1 S21777C8) C1{ BC2{ vd v3 v4} v1 v2}


void  S21777C8 ::v17(){vfunc_called(this, "_ZN8S21777C83v17Ev");}
void  S21777C8 ::v18(){vfunc_called(this, "_ZN8S21777C83v18Ev");}
S21777C8 ::~S21777C8(){ note_dtor("S21777C8", this);} // tgen
S21777C8 ::S21777C8(){ note_ctor("S21777C8", this);} // tgen

static void Test_S21777C8()
{
  extern Class_Descriptor cd_S21777C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21777C8, buf);
    S21777C8 *dp, &lv = *(dp=new (buf) S21777C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21777C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21777C8)");
    check_base_class_offset(lv, (S21777C9_nt*), 0, "S21777C8");
    test_class_info(&lv, &cd_S21777C8);
    dp->~S21777C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21777C8(Test_S21777C8, "S21777C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S21777C8C1Ev();
extern void _ZN8S21777C8D1Ev();
Name_Map name_map_S21777C8[] = {
  NSPAIR(_ZN8S21777C8C1Ev),
  NSPAIR(_ZN8S21777C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21777C9_nt;
extern VTBL_ENTRY _ZTI11S21777C9_nt[];
extern  VTBL_ENTRY _ZTV11S21777C9_nt[];
static Base_Class bases_S21777C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21777C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21777C8[];
extern void _ZN8S21777C8D1Ev();
extern void _ZN8S21777C8D0Ev();
extern void _ZN11S21777C9_nt3v19Ev();
extern void _ZN11S21777C9_nt3v20Ev();
extern void _ZN8S21777C83v17Ev();
extern void _ZN8S21777C83v18Ev();
static  VTBL_ENTRY vtc_S21777C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21777C8[0]),
  (VTBL_ENTRY)&_ZN8S21777C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21777C8D0Ev,
  (VTBL_ENTRY)&_ZN11S21777C9_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S21777C9_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S21777C83v17Ev,
  (VTBL_ENTRY)&_ZN8S21777C83v18Ev,
};
extern VTBL_ENTRY _ZTI8S21777C8[];
extern  VTBL_ENTRY _ZTV8S21777C8[];
Class_Descriptor cd_S21777C8 = {  "S21777C8", // class name
  bases_S21777C8, 1,
  &(vtc_S21777C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21777C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21777C8),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  S21777C10  {
  void *s21777c10f0[2];
  int s21777c10f1[4];
  void  mf21777c10(); // _ZN9S21777C1010mf21777c10Ev
};
//SIG(-1 S21777C10) C1{ m Fp[2] Fi[4]}


void  S21777C10 ::mf21777c10(){}

static void Test_S21777C10()
{
  {
    init_simple_test("S21777C10");
    S21777C10 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S21777C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21777C10)");
    check_field_offset(lv, s21777c10f0, 0, "S21777C10.s21777c10f0");
    check_field_offset(lv, s21777c10f1, ABISELECT(16,8), "S21777C10.s21777c10f1");
  }
}
static Arrange_To_Call_Me vS21777C10(Test_S21777C10, "S21777C10", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21777C11_nt  {
  void *s21777c11f0;
  void  mf21777c11(); // _ZN12S21777C11_nt10mf21777c11Ev
};
//SIG(-1 S21777C11_nt) C1{ m Fp}


void  S21777C11_nt ::mf21777c11(){}

//skip512 S21777C11_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S21777C11_nt[];
VTBL_ENTRY *P__ZTI12S21777C11_nt = _ZTI12S21777C11_nt; 
Class_Descriptor cd_S21777C11_nt = {  "S21777C11_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S21777C11_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  S21777C1  {
  void *s21777c1f0[2];
  ::S21777C2 s21777c1f1;
  ::S21777C8 s21777c1f2;
  ::S21777C10 s21777c1f3;
  ::S21777C11_nt s21777c1f4;
  ::S21777C7_nt s21777c1f5;
  char s21777c1f6;
  __tsi64 s21777c1f7[3];
  void *s21777c1f8;
  int s21777c1f9[2];
  void *s21777c1f10;
  char s21777c1f11;
  int s21777c1f12[2];
  void *s21777c1f13[2];
  long s21777c1f14[3];
  void *s21777c1f15[2];
  void  mf21777c1(); // _ZN8S21777C19mf21777c1Ev
  virtual  ~S21777C1(); // _ZN8S21777C1D1Ev
  S21777C1(); // tgen
};
//SIG(1 S21777C1) C1{ vd m Fp[2] FC2{ BC3{ vd v9 v10 v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 FC4{ FC5{ m Fp Fi} FC5 FC6{ m Fi FL Fi[27] FL[3] Fc[512]} FL[3] Fc[2]} Fc[4] FL Fi[3]} FC7{ BC8{ vd v19 v20} v17 v18} FC9{ m Fp[2] Fi[4]} FC10{ m Fp} FC6 Fc FL[3] Fp Fi[2] Fp Fc Fi[2] Fp[2] Fl[3] Fp[2]}


void  S21777C1 ::mf21777c1(){}
 S21777C1 ::~S21777C1(){ note_dtor("S21777C1", this);}
S21777C1 ::S21777C1(){ note_ctor("S21777C1", this);} // tgen

static void Test_S21777C1()
{
  extern Class_Descriptor cd_S21777C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(205,379)];
    init_test(&cd_S21777C1, buf);
    S21777C1 *dp, &lv = *(dp=new (buf) S21777C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,1512), "sizeof(S21777C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21777C1)");
    check_field_offset(lv, s21777c1f0, ABISELECT(8,4), "S21777C1.s21777c1f0");
    check_field_offset(lv, s21777c1f1, ABISELECT(24,12), "S21777C1.s21777c1f1");
    check_field_offset(lv, s21777c1f2, ABISELECT(792,740), "S21777C1.s21777c1f2");
    check_field_offset(lv, s21777c1f3, ABISELECT(800,744), "S21777C1.s21777c1f3");
    check_field_offset(lv, s21777c1f4, ABISELECT(832,768), "S21777C1.s21777c1f4");
    check_field_offset(lv, s21777c1f5, ABISELECT(840,772), "S21777C1.s21777c1f5");
    check_field_offset(lv, s21777c1f6, ABISELECT(1504,1428), "S21777C1.s21777c1f6");
    check_field_offset(lv, s21777c1f7, ABISELECT(1512,1432), "S21777C1.s21777c1f7");
    check_field_offset(lv, s21777c1f8, ABISELECT(1536,1456), "S21777C1.s21777c1f8");
    check_field_offset(lv, s21777c1f9, ABISELECT(1544,1460), "S21777C1.s21777c1f9");
    check_field_offset(lv, s21777c1f10, ABISELECT(1552,1468), "S21777C1.s21777c1f10");
    check_field_offset(lv, s21777c1f11, ABISELECT(1560,1472), "S21777C1.s21777c1f11");
    check_field_offset(lv, s21777c1f12, ABISELECT(1564,1476), "S21777C1.s21777c1f12");
    check_field_offset(lv, s21777c1f13, ABISELECT(1576,1484), "S21777C1.s21777c1f13");
    check_field_offset(lv, s21777c1f14, ABISELECT(1592,1492), "S21777C1.s21777c1f14");
    check_field_offset(lv, s21777c1f15, ABISELECT(1616,1504), "S21777C1.s21777c1f15");
    test_class_info(&lv, &cd_S21777C1);
    dp->~S21777C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21777C1(Test_S21777C1, "S21777C1", ABISELECT(1632,1512));

#else // __cplusplus

extern void _ZN8S21777C1C1Ev();
extern void _ZN8S21777C1D1Ev();
Name_Map name_map_S21777C1[] = {
  NSPAIR(_ZN8S21777C1C1Ev),
  NSPAIR(_ZN8S21777C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21777C1[];
extern void _ZN8S21777C1D1Ev();
extern void _ZN8S21777C1D0Ev();
static  VTBL_ENTRY vtc_S21777C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21777C1[0]),
  (VTBL_ENTRY)&_ZN8S21777C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21777C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21777C1[];
extern  VTBL_ENTRY _ZTV8S21777C1[];
Class_Descriptor cd_S21777C1 = {  "S21777C1", // class name
  0,0,//no base classes
  &(vtc_S21777C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,1512), // object size
  NSPAIRA(_ZTI8S21777C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21777C1),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  S10155C2_nt  {
  virtual  ~S10155C2_nt(); // _ZN11S10155C2_ntD1Ev
  virtual void  v7(); // _ZN11S10155C2_nt2v7Ev
  virtual void  v8(); // _ZN11S10155C2_nt2v8Ev
  virtual void  v9(); // _ZN11S10155C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10155C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10155C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10155C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10155C2_nt3v13Ev
  S10155C2_nt(); // tgen
};
//SIG(-1 S10155C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10155C2_nt ::~S10155C2_nt(){ note_dtor("S10155C2_nt", this);}
void  S10155C2_nt ::v7(){vfunc_called(this, "_ZN11S10155C2_nt2v7Ev");}
void  S10155C2_nt ::v8(){vfunc_called(this, "_ZN11S10155C2_nt2v8Ev");}
void  S10155C2_nt ::v9(){vfunc_called(this, "_ZN11S10155C2_nt2v9Ev");}
void  S10155C2_nt ::v10(){vfunc_called(this, "_ZN11S10155C2_nt3v10Ev");}
void  S10155C2_nt ::v11(){vfunc_called(this, "_ZN11S10155C2_nt3v11Ev");}
void  S10155C2_nt ::v12(){vfunc_called(this, "_ZN11S10155C2_nt3v12Ev");}
void  S10155C2_nt ::v13(){vfunc_called(this, "_ZN11S10155C2_nt3v13Ev");}
S10155C2_nt ::S10155C2_nt(){ note_ctor("S10155C2_nt", this);} // tgen

//skip512 S10155C2_nt

#else // __cplusplus

extern void _ZN11S10155C2_ntC1Ev();
extern void _ZN11S10155C2_ntD1Ev();
Name_Map name_map_S10155C2_nt[] = {
  NSPAIR(_ZN11S10155C2_ntC1Ev),
  NSPAIR(_ZN11S10155C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10155C2_nt[];
extern void _ZN11S10155C2_ntD1Ev();
extern void _ZN11S10155C2_ntD0Ev();
extern void _ZN11S10155C2_nt2v7Ev();
extern void _ZN11S10155C2_nt2v8Ev();
extern void _ZN11S10155C2_nt2v9Ev();
extern void _ZN11S10155C2_nt3v10Ev();
extern void _ZN11S10155C2_nt3v11Ev();
extern void _ZN11S10155C2_nt3v12Ev();
extern void _ZN11S10155C2_nt3v13Ev();
static  VTBL_ENTRY vtc_S10155C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10155C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10155C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI11S10155C2_nt[];
VTBL_ENTRY *P__ZTI11S10155C2_nt = _ZTI11S10155C2_nt; 
extern  VTBL_ENTRY _ZTV11S10155C2_nt[];
Class_Descriptor cd_S10155C2_nt = {  "S10155C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10155C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10155C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10155C2_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  S10155C4_nt  {
  __tsi64 s10155c4f0[4];
};
//SIG(-1 S10155C4_nt) C1{ FL[4]}



//skip512 S10155C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10155C9  {
  int s10155c9f0[4];
  char s10155c9f1[64];
  int s10155c9f2[2];
  char s10155c9f3[8];
  int s10155c9f4;
};
//SIG(-1 S10155C9) C1{ Fi[4] Fc[64] Fi[2] Fc[8] Fi}



static void Test_S10155C9()
{
  {
    init_simple_test("S10155C9");
    S10155C9 lv;
    check2(sizeof(lv), 100, "sizeof(S10155C9)");
    check2(__alignof__(lv), 4, "__alignof__(S10155C9)");
    check_field_offset(lv, s10155c9f0, 0, "S10155C9.s10155c9f0");
    check_field_offset(lv, s10155c9f1, 16, "S10155C9.s10155c9f1");
    check_field_offset(lv, s10155c9f2, 80, "S10155C9.s10155c9f2");
    check_field_offset(lv, s10155c9f3, 88, "S10155C9.s10155c9f3");
    check_field_offset(lv, s10155c9f4, 96, "S10155C9.s10155c9f4");
  }
}
static Arrange_To_Call_Me vS10155C9(Test_S10155C9, "S10155C9", 100);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10155C5  {
  void *s10155c5f0;
  ::S2123C26 s10155c5f1;
  char s10155c5f2;
  int s10155c5f3;
  char s10155c5f4[2];
  ::S10155C9 s10155c5f5;
  char s10155c5f6[2];
  int s10155c5f7;
};
//SIG(1 S10155C5) C1{ Fp FC2{ m Fp Fi FC3{ m} FC3} Fc Fi Fc[2] FC4{ Fi[4] Fc[64] Fi[2] Fc[8] Fi} Fc[2] Fi}



static void Test_S10155C5()
{
  {
    init_simple_test("S10155C5");
    S10155C5 lv;
    check2(sizeof(lv), ABISELECT(144,136), "sizeof(S10155C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10155C5)");
    check_field_offset(lv, s10155c5f0, 0, "S10155C5.s10155c5f0");
    check_field_offset(lv, s10155c5f1, ABISELECT(8,4), "S10155C5.s10155c5f1");
    check_field_offset(lv, s10155c5f2, ABISELECT(24,16), "S10155C5.s10155c5f2");
    check_field_offset(lv, s10155c5f3, ABISELECT(28,20), "S10155C5.s10155c5f3");
    check_field_offset(lv, s10155c5f4, ABISELECT(32,24), "S10155C5.s10155c5f4");
    check_field_offset(lv, s10155c5f5, ABISELECT(36,28), "S10155C5.s10155c5f5");
    check_field_offset(lv, s10155c5f6, ABISELECT(136,128), "S10155C5.s10155c5f6");
    check_field_offset(lv, s10155c5f7, ABISELECT(140,132), "S10155C5.s10155c5f7");
  }
}
static Arrange_To_Call_Me vS10155C5(Test_S10155C5, "S10155C5", ABISELECT(144,136));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10155C3  {
  ::S10155C4_nt s10155c3f0;
  ::S10155C5 s10155c3f1[8];
  void  mf10155c3(); // _ZN8S10155C39mf10155c3Ev
};
//SIG(-1 S10155C3) C1{ m FC2{ FL[4]} FC3{ Fp FC4{ m Fp Fi FC5{ m} FC5} Fc Fi Fc[2] FC6{ Fi[4] Fc[64] Fi[2] Fc[8] Fi} Fc[2] Fi}[8]}


void  S10155C3 ::mf10155c3(){}

static void Test_S10155C3()
{
  {
    init_simple_test("S10155C3");
    S10155C3 lv;
    check2(sizeof(lv), ABISELECT(1184,1120), "sizeof(S10155C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10155C3)");
    check_field_offset(lv, s10155c3f0, 0, "S10155C3.s10155c3f0");
    check_field_offset(lv, s10155c3f1, 32, "S10155C3.s10155c3f1");
  }
}
static Arrange_To_Call_Me vS10155C3(Test_S10155C3, "S10155C3", ABISELECT(1184,1120));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10155C10  {
  ::S10155C4_nt s10155c10f0;
  char s10155c10f1[2];
  void  mf10155c10(); // _ZN9S10155C1010mf10155c10Ev
};
//SIG(-1 S10155C10) C1{ m FC2{ FL[4]} Fc[2]}


void  S10155C10 ::mf10155c10(){}

static void Test_S10155C10()
{
  {
    init_simple_test("S10155C10");
    S10155C10 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S10155C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10155C10)");
    check_field_offset(lv, s10155c10f0, 0, "S10155C10.s10155c10f0");
    check_field_offset(lv, s10155c10f1, 32, "S10155C10.s10155c10f1");
  }
}
static Arrange_To_Call_Me vS10155C10(Test_S10155C10, "S10155C10", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10155C12  {
  void *s10155c12f0;
  int s10155c12f1[3];
  void *s10155c12f2;
  int s10155c12f3;
  char s10155c12f4[2];
};
//SIG(-1 S10155C12) C1{ Fp Fi[3] Fp Fi Fc[2]}



static void Test_S10155C12()
{
  {
    init_simple_test("S10155C12");
    S10155C12 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10155C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10155C12)");
    check_field_offset(lv, s10155c12f0, 0, "S10155C12.s10155c12f0");
    check_field_offset(lv, s10155c12f1, ABISELECT(8,4), "S10155C12.s10155c12f1");
    check_field_offset(lv, s10155c12f2, ABISELECT(24,16), "S10155C12.s10155c12f2");
    check_field_offset(lv, s10155c12f3, ABISELECT(32,20), "S10155C12.s10155c12f3");
    check_field_offset(lv, s10155c12f4, ABISELECT(36,24), "S10155C12.s10155c12f4");
  }
}
static Arrange_To_Call_Me vS10155C12(Test_S10155C12, "S10155C12", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10155C13_nt  {
  int s10155c13f0[4];
};
//SIG(-1 S10155C13_nt) C1{ Fi[4]}



//skip512 S10155C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10155C11  {
  ::S10155C4_nt s10155c11f0;
  ::S10155C12 s10155c11f1;
  int s10155c11f2;
  ::S10155C13_nt s10155c11f3;
  int s10155c11f4;
  void  mf10155c11(); // _ZN9S10155C1110mf10155c11Ev
};
//SIG(-1 S10155C11) C1{ m FC2{ FL[4]} FC3{ Fp Fi[3] Fp Fi Fc[2]} Fi FC4{ Fi[4]} Fi}


void  S10155C11 ::mf10155c11(){}

static void Test_S10155C11()
{
  {
    init_simple_test("S10155C11");
    S10155C11 lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S10155C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10155C11)");
    check_field_offset(lv, s10155c11f0, 0, "S10155C11.s10155c11f0");
    check_field_offset(lv, s10155c11f1, 32, "S10155C11.s10155c11f1");
    check_field_offset(lv, s10155c11f2, ABISELECT(72,60), "S10155C11.s10155c11f2");
    check_field_offset(lv, s10155c11f3, ABISELECT(76,64), "S10155C11.s10155c11f3");
    check_field_offset(lv, s10155c11f4, ABISELECT(92,80), "S10155C11.s10155c11f4");
  }
}
static Arrange_To_Call_Me vS10155C11(Test_S10155C11, "S10155C11", ABISELECT(96,84));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10155C1  : S10155C2_nt {
  void *s10155c1f0[2];
  ::S10155C3 s10155c1f1;
  ::S10155C10 s10155c1f2;
  ::S10155C11 s10155c1f3;
  int s10155c1f4[3];
  void *s10155c1f5[2];
  int s10155c1f6;
  char s10155c1f7;
  void *s10155c1f8[3];
  char s10155c1f9;
  int s10155c1f10[2];
  virtual  ~S10155C1(); // _ZN8S10155C1D1Ev
  virtual void  v1(); // _ZN8S10155C12v1Ev
  virtual void  v2(); // _ZN8S10155C12v2Ev
  virtual void  v3(); // _ZN8S10155C12v3Ev
  virtual void  v4(); // _ZN8S10155C12v4Ev
  virtual void  v5(); // _ZN8S10155C12v5Ev
  virtual void  v6(); // _ZN8S10155C12v6Ev
  S10155C1(); // tgen
};
//SIG(1 S10155C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13} vd v1 v2 v3 v4 v5 v6 Fp[2] FC3{ m FC4{ FL[4]} FC5{ Fp FC6{ m Fp Fi FC7{ m} FC7} Fc Fi Fc[2] FC8{ Fi[4] Fc[64] Fi[2] Fc[8] Fi} Fc[2] Fi}[8]} FC9{ m FC4 Fc[2]} FC10{ m FC4 FC11{ Fp Fi[3] Fp Fi Fc[2]} Fi FC12{ Fi[4]} Fi} Fi[3] Fp[2] Fi Fc Fp[3] Fc Fi[2]}


 S10155C1 ::~S10155C1(){ note_dtor("S10155C1", this);}
void  S10155C1 ::v1(){vfunc_called(this, "_ZN8S10155C12v1Ev");}
void  S10155C1 ::v2(){vfunc_called(this, "_ZN8S10155C12v2Ev");}
void  S10155C1 ::v3(){vfunc_called(this, "_ZN8S10155C12v3Ev");}
void  S10155C1 ::v4(){vfunc_called(this, "_ZN8S10155C12v4Ev");}
void  S10155C1 ::v5(){vfunc_called(this, "_ZN8S10155C12v5Ev");}
void  S10155C1 ::v6(){vfunc_called(this, "_ZN8S10155C12v6Ev");}
S10155C1 ::S10155C1(){ note_ctor("S10155C1", this);} // tgen

static void Test_S10155C1()
{
  extern Class_Descriptor cd_S10155C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(179,327)];
    init_test(&cd_S10155C1, buf);
    S10155C1 *dp, &lv = *(dp=new (buf) S10155C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1304), "sizeof(S10155C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10155C1)");
    check_base_class_offset(lv, (S10155C2_nt*), 0, "S10155C1");
    check_field_offset(lv, s10155c1f0, ABISELECT(8,4), "S10155C1.s10155c1f0");
    check_field_offset(lv, s10155c1f1, ABISELECT(24,12), "S10155C1.s10155c1f1");
    check_field_offset(lv, s10155c1f2, ABISELECT(1208,1132), "S10155C1.s10155c1f2");
    check_field_offset(lv, s10155c1f3, ABISELECT(1248,1168), "S10155C1.s10155c1f3");
    check_field_offset(lv, s10155c1f4, ABISELECT(1344,1252), "S10155C1.s10155c1f4");
    check_field_offset(lv, s10155c1f5, ABISELECT(1360,1264), "S10155C1.s10155c1f5");
    check_field_offset(lv, s10155c1f6, ABISELECT(1376,1272), "S10155C1.s10155c1f6");
    check_field_offset(lv, s10155c1f7, ABISELECT(1380,1276), "S10155C1.s10155c1f7");
    check_field_offset(lv, s10155c1f8, ABISELECT(1384,1280), "S10155C1.s10155c1f8");
    check_field_offset(lv, s10155c1f9, ABISELECT(1408,1292), "S10155C1.s10155c1f9");
    check_field_offset(lv, s10155c1f10, ABISELECT(1412,1296), "S10155C1.s10155c1f10");
    test_class_info(&lv, &cd_S10155C1);
    dp->~S10155C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10155C1(Test_S10155C1, "S10155C1", ABISELECT(1424,1304));

#else // __cplusplus

extern void _ZN8S10155C1C1Ev();
extern void _ZN8S10155C1D1Ev();
Name_Map name_map_S10155C1[] = {
  NSPAIR(_ZN8S10155C1C1Ev),
  NSPAIR(_ZN8S10155C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10155C2_nt;
extern VTBL_ENTRY _ZTI11S10155C2_nt[];
extern  VTBL_ENTRY _ZTV11S10155C2_nt[];
static Base_Class bases_S10155C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10155C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10155C1[];
extern void _ZN8S10155C1D1Ev();
extern void _ZN8S10155C1D0Ev();
extern void _ZN11S10155C2_nt2v7Ev();
extern void _ZN11S10155C2_nt2v8Ev();
extern void _ZN11S10155C2_nt2v9Ev();
extern void _ZN11S10155C2_nt3v10Ev();
extern void _ZN11S10155C2_nt3v11Ev();
extern void _ZN11S10155C2_nt3v12Ev();
extern void _ZN11S10155C2_nt3v13Ev();
extern void _ZN8S10155C12v1Ev();
extern void _ZN8S10155C12v2Ev();
extern void _ZN8S10155C12v3Ev();
extern void _ZN8S10155C12v4Ev();
extern void _ZN8S10155C12v5Ev();
extern void _ZN8S10155C12v6Ev();
static  VTBL_ENTRY vtc_S10155C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10155C1[0]),
  (VTBL_ENTRY)&_ZN8S10155C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10155C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10155C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S10155C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10155C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10155C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10155C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10155C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10155C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10155C1[];
extern  VTBL_ENTRY _ZTV8S10155C1[];
Class_Descriptor cd_S10155C1 = {  "S10155C1", // class name
  bases_S10155C1, 1,
  &(vtc_S10155C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1424,1304), // object size
  NSPAIRA(_ZTI8S10155C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10155C1),17, //virtual function table var
  2, // 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  S10154C2  {
  virtual  ~S10154C2(); // _ZN8S10154C2D1Ev
  virtual void  v7(); // _ZN8S10154C22v7Ev
  virtual void  v8(); // _ZN8S10154C22v8Ev
  virtual void  v9(); // _ZN8S10154C22v9Ev
  virtual void  v10(); // _ZN8S10154C23v10Ev
  virtual void  v11(); // _ZN8S10154C23v11Ev
  virtual void  v12(); // _ZN8S10154C23v12Ev
  virtual void  v13(); // _ZN8S10154C23v13Ev
  S10154C2(); // tgen
};
//SIG(-1 S10154C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10154C2 ::~S10154C2(){ note_dtor("S10154C2", this);}
void  S10154C2 ::v7(){vfunc_called(this, "_ZN8S10154C22v7Ev");}
void  S10154C2 ::v8(){vfunc_called(this, "_ZN8S10154C22v8Ev");}
void  S10154C2 ::v9(){vfunc_called(this, "_ZN8S10154C22v9Ev");}
void  S10154C2 ::v10(){vfunc_called(this, "_ZN8S10154C23v10Ev");}
void  S10154C2 ::v11(){vfunc_called(this, "_ZN8S10154C23v11Ev");}
void  S10154C2 ::v12(){vfunc_called(this, "_ZN8S10154C23v12Ev");}
void  S10154C2 ::v13(){vfunc_called(this, "_ZN8S10154C23v13Ev");}
S10154C2 ::S10154C2(){ note_ctor("S10154C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10154C2C1Ev();
extern void _ZN8S10154C2D1Ev();
Name_Map name_map_S10154C2[] = {
  NSPAIR(_ZN8S10154C2C1Ev),
  NSPAIR(_ZN8S10154C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10154C2[];
extern void _ZN8S10154C2D1Ev();
extern void _ZN8S10154C2D0Ev();
extern void _ZN8S10154C22v7Ev();
extern void _ZN8S10154C22v8Ev();
extern void _ZN8S10154C22v9Ev();
extern void _ZN8S10154C23v10Ev();
extern void _ZN8S10154C23v11Ev();
extern void _ZN8S10154C23v12Ev();
extern void _ZN8S10154C23v13Ev();
static  VTBL_ENTRY vtc_S10154C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10154C2[0]),
  (VTBL_ENTRY)&_ZN8S10154C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10154C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10154C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10154C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10154C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10154C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10154C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10154C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10154C23v13Ev,
};
extern VTBL_ENTRY _ZTI8S10154C2[];
extern  VTBL_ENTRY _ZTV8S10154C2[];
Class_Descriptor cd_S10154C2 = {  "S10154C2", // class name
  0,0,//no base classes
  &(vtc_S10154C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10154C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10154C2),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  S10154C4_nt  {
  long s10154c4f0[4];
};
//SIG(-1 S10154C4_nt) C1{ Fl[4]}



//skip512 S10154C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10154C3  {
  ::S10154C4_nt s10154c3f0;
  ::S10155C5 s10154c3f1[8];
  void  mf10154c3(); // _ZN8S10154C39mf10154c3Ev
};
//SIG(-1 S10154C3) C1{ m FC2{ Fl[4]} FC3{ Fp FC4{ m Fp Fi FC5{ m} FC5} Fc Fi Fc[2] FC6{ Fi[4] Fc[64] Fi[2] Fc[8] Fi} Fc[2] Fi}[8]}


void  S10154C3 ::mf10154c3(){}

static void Test_S10154C3()
{
  {
    init_simple_test("S10154C3");
    S10154C3 lv;
    check2(sizeof(lv), ABISELECT(1184,1104), "sizeof(S10154C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10154C3)");
    check_field_offset(lv, s10154c3f0, 0, "S10154C3.s10154c3f0");
    check_field_offset(lv, s10154c3f1, ABISELECT(32,16), "S10154C3.s10154c3f1");
  }
}
static Arrange_To_Call_Me vS10154C3(Test_S10154C3, "S10154C3", ABISELECT(1184,1104));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10154C10  {
  ::S10154C4_nt s10154c10f0;
  char s10154c10f1[2];
  void  mf10154c10(); // _ZN9S10154C1010mf10154c10Ev
};
//SIG(-1 S10154C10) C1{ m FC2{ Fl[4]} Fc[2]}


void  S10154C10 ::mf10154c10(){}

static void Test_S10154C10()
{
  {
    init_simple_test("S10154C10");
    S10154C10 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S10154C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10154C10)");
    check_field_offset(lv, s10154c10f0, 0, "S10154C10.s10154c10f0");
    check_field_offset(lv, s10154c10f1, ABISELECT(32,16), "S10154C10.s10154c10f1");
  }
}
static Arrange_To_Call_Me vS10154C10(Test_S10154C10, "S10154C10", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10154C11  {
  ::S10154C4_nt s10154c11f0;
  ::S10155C12 s10154c11f1;
  int s10154c11f2;
  ::S10155C13_nt s10154c11f3;
  int s10154c11f4;
  void  mf10154c11(); // _ZN9S10154C1110mf10154c11Ev
};
//SIG(-1 S10154C11) C1{ m FC2{ Fl[4]} FC3{ Fp Fi[3] Fp Fi Fc[2]} Fi FC4{ Fi[4]} Fi}


void  S10154C11 ::mf10154c11(){}

static void Test_S10154C11()
{
  {
    init_simple_test("S10154C11");
    S10154C11 lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S10154C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10154C11)");
    check_field_offset(lv, s10154c11f0, 0, "S10154C11.s10154c11f0");
    check_field_offset(lv, s10154c11f1, ABISELECT(32,16), "S10154C11.s10154c11f1");
    check_field_offset(lv, s10154c11f2, ABISELECT(72,44), "S10154C11.s10154c11f2");
    check_field_offset(lv, s10154c11f3, ABISELECT(76,48), "S10154C11.s10154c11f3");
    check_field_offset(lv, s10154c11f4, ABISELECT(92,64), "S10154C11.s10154c11f4");
  }
}
static Arrange_To_Call_Me vS10154C11(Test_S10154C11, "S10154C11", ABISELECT(96,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10154C1  : S10154C2 {
  void *s10154c1f0[2];
  ::S10154C3 s10154c1f1;
  ::S10154C10 s10154c1f2;
  ::S10154C11 s10154c1f3;
  int s10154c1f4[3];
  void *s10154c1f5[2];
  int s10154c1f6;
  char s10154c1f7;
  void *s10154c1f8[3];
  char s10154c1f9;
  int s10154c1f10[2];
  virtual  ~S10154C1(); // _ZN8S10154C1D1Ev
  virtual void  v1(); // _ZN8S10154C12v1Ev
  virtual void  v2(); // _ZN8S10154C12v2Ev
  virtual void  v3(); // _ZN8S10154C12v3Ev
  virtual void  v4(); // _ZN8S10154C12v4Ev
  virtual void  v5(); // _ZN8S10154C12v5Ev
  virtual void  v6(); // _ZN8S10154C12v6Ev
  S10154C1(); // tgen
};
//SIG(1 S10154C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13} vd v1 v2 v3 v4 v5 v6 Fp[2] FC3{ m FC4{ Fl[4]} FC5{ Fp FC6{ m Fp Fi FC7{ m} FC7} Fc Fi Fc[2] FC8{ Fi[4] Fc[64] Fi[2] Fc[8] Fi} Fc[2] Fi}[8]} FC9{ m FC4 Fc[2]} FC10{ m FC4 FC11{ Fp Fi[3] Fp Fi Fc[2]} Fi FC12{ Fi[4]} Fi} Fi[3] Fp[2] Fi Fc Fp[3] Fc Fi[2]}


 S10154C1 ::~S10154C1(){ note_dtor("S10154C1", this);}
void  S10154C1 ::v1(){vfunc_called(this, "_ZN8S10154C12v1Ev");}
void  S10154C1 ::v2(){vfunc_called(this, "_ZN8S10154C12v2Ev");}
void  S10154C1 ::v3(){vfunc_called(this, "_ZN8S10154C12v3Ev");}
void  S10154C1 ::v4(){vfunc_called(this, "_ZN8S10154C12v4Ev");}
void  S10154C1 ::v5(){vfunc_called(this, "_ZN8S10154C12v5Ev");}
void  S10154C1 ::v6(){vfunc_called(this, "_ZN8S10154C12v6Ev");}
S10154C1 ::S10154C1(){ note_ctor("S10154C1", this);} // tgen

static void Test_S10154C1()
{
  extern Class_Descriptor cd_S10154C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(179,315)];
    init_test(&cd_S10154C1, buf);
    S10154C1 *dp, &lv = *(dp=new (buf) S10154C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,1256), "sizeof(S10154C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10154C1)");
    check_base_class_offset(lv, (S10154C2*), 0, "S10154C1");
    check_field_offset(lv, s10154c1f0, ABISELECT(8,4), "S10154C1.s10154c1f0");
    check_field_offset(lv, s10154c1f1, ABISELECT(24,12), "S10154C1.s10154c1f1");
    check_field_offset(lv, s10154c1f2, ABISELECT(1208,1116), "S10154C1.s10154c1f2");
    check_field_offset(lv, s10154c1f3, ABISELECT(1248,1136), "S10154C1.s10154c1f3");
    check_field_offset(lv, s10154c1f4, ABISELECT(1344,1204), "S10154C1.s10154c1f4");
    check_field_offset(lv, s10154c1f5, ABISELECT(1360,1216), "S10154C1.s10154c1f5");
    check_field_offset(lv, s10154c1f6, ABISELECT(1376,1224), "S10154C1.s10154c1f6");
    check_field_offset(lv, s10154c1f7, ABISELECT(1380,1228), "S10154C1.s10154c1f7");
    check_field_offset(lv, s10154c1f8, ABISELECT(1384,1232), "S10154C1.s10154c1f8");
    check_field_offset(lv, s10154c1f9, ABISELECT(1408,1244), "S10154C1.s10154c1f9");
    check_field_offset(lv, s10154c1f10, ABISELECT(1412,1248), "S10154C1.s10154c1f10");
    test_class_info(&lv, &cd_S10154C1);
    dp->~S10154C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10154C1(Test_S10154C1, "S10154C1", ABISELECT(1424,1256));

#else // __cplusplus

extern void _ZN8S10154C1C1Ev();
extern void _ZN8S10154C1D1Ev();
Name_Map name_map_S10154C1[] = {
  NSPAIR(_ZN8S10154C1C1Ev),
  NSPAIR(_ZN8S10154C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10154C2;
extern VTBL_ENTRY _ZTI8S10154C2[];
extern  VTBL_ENTRY _ZTV8S10154C2[];
static Base_Class bases_S10154C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10154C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10154C1[];
extern void _ZN8S10154C1D1Ev();
extern void _ZN8S10154C1D0Ev();
extern void _ZN8S10154C22v7Ev();
extern void _ZN8S10154C22v8Ev();
extern void _ZN8S10154C22v9Ev();
extern void _ZN8S10154C23v10Ev();
extern void _ZN8S10154C23v11Ev();
extern void _ZN8S10154C23v12Ev();
extern void _ZN8S10154C23v13Ev();
extern void _ZN8S10154C12v1Ev();
extern void _ZN8S10154C12v2Ev();
extern void _ZN8S10154C12v3Ev();
extern void _ZN8S10154C12v4Ev();
extern void _ZN8S10154C12v5Ev();
extern void _ZN8S10154C12v6Ev();
static  VTBL_ENTRY vtc_S10154C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10154C1[0]),
  (VTBL_ENTRY)&_ZN8S10154C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10154C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10154C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10154C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10154C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10154C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10154C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10154C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10154C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10154C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10154C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10154C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10154C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10154C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10154C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10154C1[];
extern  VTBL_ENTRY _ZTV8S10154C1[];
Class_Descriptor cd_S10154C1 = {  "S10154C1", // class name
  bases_S10154C1, 1,
  &(vtc_S10154C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1424,1256), // object size
  NSPAIRA(_ZTI8S10154C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10154C1),17, //virtual function table var
  2, // 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  S20079C3  : virtual S7394C3 {
  __tsi64 s20079c3f0[4];
  ::S7394C3 s20079c3f1;
  int s20079c3f2;
  ::S7394C3 s20079c3f3;
  __tsi64 s20079c3f4;
  void *s20079c3f5;
  ::S7394C3 s20079c3f6;
  void *s20079c3f7[4];
  ~S20079C3(); // tgen
  S20079C3(); // tgen
};
//SIG(-1 S20079C3) C1{ VBC2{ m FD[2] Fc[8]} FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]}


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

static void Test_S20079C3()
{
  extern Class_Descriptor cd_S20079C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S20079C3, buf);
    S20079C3 *dp, &lv = *(dp=new (buf) S20079C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S20079C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20079C3)");
    check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S20079C3");
    check_field_offset(lv, s20079c3f0, ABISELECT(8,4), "S20079C3.s20079c3f0");
    check_field_offset(lv, s20079c3f1, ABISELECT(48,36), "S20079C3.s20079c3f1");
    check_field_offset(lv, s20079c3f2, ABISELECT(96,68), "S20079C3.s20079c3f2");
    check_field_offset(lv, s20079c3f3, ABISELECT(112,72), "S20079C3.s20079c3f3");
    check_field_offset(lv, s20079c3f4, ABISELECT(160,104), "S20079C3.s20079c3f4");
    check_field_offset(lv, s20079c3f5, ABISELECT(168,112), "S20079C3.s20079c3f5");
    check_field_offset(lv, s20079c3f6, ABISELECT(176,116), "S20079C3.s20079c3f6");
    check_field_offset(lv, s20079c3f7, ABISELECT(224,148), "S20079C3.s20079c3f7");
    test_class_info(&lv, &cd_S20079C3);
    dp->~S20079C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20079C3(Test_S20079C3, "S20079C3", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN8S20079C3C1Ev();
extern void _ZN8S20079C3D1Ev();
Name_Map name_map_S20079C3[] = {
  NSPAIR(_ZN8S20079C3C1Ev),
  NSPAIR(_ZN8S20079C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
static Base_Class bases_S20079C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20079C3[];
static  VTBL_ENTRY vtc_S20079C3[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20079C3[0]),
};
extern VTBL_ENTRY _ZTV8S20079C3[];
static  VTT_ENTRY vtt_S20079C3[] = {
  {&(_ZTV8S20079C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20079C3[];
extern  VTBL_ENTRY _ZTV8S20079C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20079C3[];
Class_Descriptor cd_S20079C3 = {  "S20079C3", // class name
  bases_S20079C3, 1,
  &(vtc_S20079C3[0]), // expected_vtbl_contents
  &(vtt_S20079C3[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI8S20079C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20079C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20079C3),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  S20079C2  {
  ::S20079C3 s20079c2f0;
  void *s20079c2f1;
  __tsi64 s20079c2f2;
  int s20079c2f3;
  void *s20079c2f4;
  ::S7394C6 s20079c2f5[8];
  char s20079c2f6;
  void *s20079c2f7;
  virtual  ~S20079C2(); // _ZN8S20079C2D1Ev
  virtual void  v2(); // _ZN8S20079C22v2Ev
  virtual void  v3(); // _ZN8S20079C22v3Ev
  S20079C2(); // tgen
};
//SIG(-1 S20079C2) C1{ vd v1 v2 FC2{ VBC3{ m FD[2] Fc[8]} FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} Fp FL Fi Fp FU4{ m FD FL FD FL Fi}[8] Fc Fp}


 S20079C2 ::~S20079C2(){ note_dtor("S20079C2", this);}
void  S20079C2 ::v2(){vfunc_called(this, "_ZN8S20079C22v2Ev");}
void  S20079C2 ::v3(){vfunc_called(this, "_ZN8S20079C22v3Ev");}
S20079C2 ::S20079C2(){ note_ctor("S20079C2", this);} // tgen

static void Test_S20079C2()
{
  extern Class_Descriptor cd_S20079C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,82)];
    init_test(&cd_S20079C2, buf);
    S20079C2 *dp, &lv = *(dp=new (buf) S20079C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,324), "sizeof(S20079C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20079C2)");
    check_field_offset(lv, s20079c2f0, ABISELECT(16,4), "S20079C2.s20079c2f0");
    check_field_offset(lv, s20079c2f1, ABISELECT(320,200), "S20079C2.s20079c2f1");
    check_field_offset(lv, s20079c2f2, ABISELECT(328,204), "S20079C2.s20079c2f2");
    check_field_offset(lv, s20079c2f3, ABISELECT(336,212), "S20079C2.s20079c2f3");
    check_field_offset(lv, s20079c2f4, ABISELECT(344,216), "S20079C2.s20079c2f4");
    check_field_offset(lv, s20079c2f5, ABISELECT(352,220), "S20079C2.s20079c2f5");
    check_field_offset(lv, s20079c2f6, ABISELECT(480,316), "S20079C2.s20079c2f6");
    check_field_offset(lv, s20079c2f7, ABISELECT(488,320), "S20079C2.s20079c2f7");
    test_class_info(&lv, &cd_S20079C2);
    dp->~S20079C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20079C2(Test_S20079C2, "S20079C2", ABISELECT(496,324));

#else // __cplusplus

extern void _ZN8S20079C2C1Ev();
extern void _ZN8S20079C2D1Ev();
Name_Map name_map_S20079C2[] = {
  NSPAIR(_ZN8S20079C2C1Ev),
  NSPAIR(_ZN8S20079C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20079C2[];
extern void _ZN8S20079C2D1Ev();
extern void _ZN8S20079C2D0Ev();
extern void _ZN8S20079C22v2Ev();
extern void _ZN8S20079C22v3Ev();
static  VTBL_ENTRY vtc_S20079C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20079C2[0]),
  (VTBL_ENTRY)&_ZN8S20079C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20079C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20079C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20079C22v3Ev,
};
extern VTBL_ENTRY _ZTI8S20079C2[];
extern  VTBL_ENTRY _ZTV8S20079C2[];
Class_Descriptor cd_S20079C2 = {  "S20079C2", // class name
  0,0,//no base classes
  &(vtc_S20079C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,324), // object size
  NSPAIRA(_ZTI8S20079C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20079C2),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  S20079C1  : virtual S20079C2 {
  ::S19148C10 s20079c1f0;
  __tsi64 s20079c1f1;
  short s20079c1f2;
  __tsi64 s20079c1f3;
  int s20079c1f4;
  virtual  ~S20079C1(); // _ZN8S20079C1D2Ev
  virtual void  v1(); // _ZN8S20079C12v1Ev
  S20079C1(); // tgen
};
//SIG(1 S20079C1) C1{ VBC2{ vd v2 v3 FC3{ VBC4{ m FD[2] Fc[8]} FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} Fp FL Fi Fp FU5{ m FD FL FD FL Fi}[8] Fc Fp} vd v1 FC6{ VBC7{ BC4 BC8{ VBC4 FL[4] FC4 Fi FC4 FL Fp FC4 Fp[4]} VBC9{ vd v5 v6 FC8 Fp FL Fi Fp FU5[8] Fc Fp} vd v7 Fp[4] FL Fp[3] FU5 FC9 FD Fs:0 FC4 FD Fp} vd v4 Fs FL FC9 FC4[5] FC7[8] FC8[5] FC8 Fp FL FL Fi[2]} FL Fs FL Fi}


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

static void Test_S20079C1()
{
  extern Class_Descriptor cd_S20079C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1054,2729)];
    init_test(&cd_S20079C1, buf);
    S20079C1 *dp, &lv = *(dp=new (buf) S20079C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16848,10912), "sizeof(S20079C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20079C1)");
    check_base_class_offset(lv, (S20079C2*), ABISELECT(16352,10588), "S20079C1");
    check_field_offset(lv, s20079c1f0, ABISELECT(16,4), "S20079C1.s20079c1f0");
    check_field_offset(lv, s20079c1f1, ABISELECT(16320,10564), "S20079C1.s20079c1f1");
    check_field_offset(lv, s20079c1f2, ABISELECT(16328,10572), "S20079C1.s20079c1f2");
    check_field_offset(lv, s20079c1f3, ABISELECT(16336,10576), "S20079C1.s20079c1f3");
    check_field_offset(lv, s20079c1f4, ABISELECT(16344,10584), "S20079C1.s20079c1f4");
    test_class_info(&lv, &cd_S20079C1);
    dp->~S20079C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20079C1(Test_S20079C1, "S20079C1", ABISELECT(16848,10912));

#else // __cplusplus

extern void _ZN8S20079C1C1Ev();
extern void _ZN8S20079C1D2Ev();
Name_Map name_map_S20079C1[] = {
  NSPAIR(_ZN8S20079C1C1Ev),
  NSPAIR(_ZN8S20079C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20079C2;
extern VTBL_ENTRY _ZTI8S20079C2[];
extern  VTBL_ENTRY _ZTV8S20079C2[];
static Base_Class bases_S20079C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20079C2,    ABISELECT(16352,10588), //bcp->offset
    6, //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 _ZTI8S20079C1[];
extern void _ZN8S20079C1D1Ev();
extern void _ZN8S20079C1D0Ev();
extern void _ZN8S20079C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S20079C1D1Ev,_ZTv0_n12_N8S20079C1D1Ev)();
extern void ABISELECT(_ZThn16352_N8S20079C1D1Ev,_ZThn10588_N8S20079C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20079C1D0Ev,_ZTv0_n12_N8S20079C1D0Ev)();
extern void ABISELECT(_ZThn16352_N8S20079C1D0Ev,_ZThn10588_N8S20079C1D0Ev)() __attribute__((weak));
extern void _ZN8S20079C22v2Ev();
extern void _ZN8S20079C22v3Ev();
static  VTBL_ENTRY vtc_S20079C1[] = {
  ABISELECT(16352,10588),
  0,
  (VTBL_ENTRY)&(_ZTI8S20079C1[0]),
  (VTBL_ENTRY)&_ZN8S20079C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20079C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20079C12v1Ev,
  0,
  0,
  ABISELECT(-16352,-10588),
  ABISELECT(-16352,-10588),
  (VTBL_ENTRY)&(_ZTI8S20079C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20079C1D1Ev,_ZTv0_n12_N8S20079C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20079C1D0Ev,_ZTv0_n12_N8S20079C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20079C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20079C22v3Ev,
};
extern VTBL_ENTRY _ZTV8S20079C1[];
static  VTT_ENTRY vtt_S20079C1[] = {
  {&(_ZTV8S20079C1[3]),  3,15},
  {&(_ZTV8S20079C1[11]),  11,15},
};
extern VTBL_ENTRY _ZTI8S20079C1[];
extern  VTBL_ENTRY _ZTV8S20079C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20079C1[];
static VTBL_ENTRY alt_thunk_names128[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20079C1D0Ev,_ZTv0_n12_N8S20079C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16352_N8S20079C1D0Ev,_ZThn10588_N8S20079C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20079C1D1Ev,_ZTv0_n12_N8S20079C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16352_N8S20079C1D1Ev,_ZThn10588_N8S20079C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20079C1 = {  "S20079C1", // class name
  bases_S20079C1, 1,
  &(vtc_S20079C1[0]), // expected_vtbl_contents
  &(vtt_S20079C1[0]), // expected_vtt_contents
  ABISELECT(16848,10912), // object size
  NSPAIRA(_ZTI8S20079C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20079C1),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20079C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names128,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19737C2  {
  __tsi64 s19737c2f0;
  void *s19737c2f1[8];
  void  mf19737c2(); // _ZN8S19737C29mf19737c2Ev
};
//SIG(-1 S19737C2) C1{ m FL Fp[8]}


void  S19737C2 ::mf19737c2(){}

static void Test_S19737C2()
{
  {
    init_simple_test("S19737C2");
    S19737C2 lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S19737C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19737C2)");
    check_field_offset(lv, s19737c2f0, 0, "S19737C2.s19737c2f0");
    check_field_offset(lv, s19737c2f1, 8, "S19737C2.s19737c2f1");
  }
}
static Arrange_To_Call_Me vS19737C2(Test_S19737C2, "S19737C2", ABISELECT(72,40));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19737C2[];
VTBL_ENTRY *P__ZTI8S19737C2 = _ZTI8S19737C2; 
Class_Descriptor cd_S19737C2 = {  "S19737C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S19737C2),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  S19737C4  {
  short s19737c4f0;
  virtual void  v2(); // _ZN8S19737C42v2Ev
  ~S19737C4(); // tgen
  S19737C4(); // tgen
};
//SIG(-1 S19737C4) C1{ v1 Fs}


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

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

#else // __cplusplus

extern void _ZN8S19737C4C1Ev();
extern void _ZN8S19737C4D1Ev();
Name_Map name_map_S19737C4[] = {
  NSPAIR(_ZN8S19737C4C1Ev),
  NSPAIR(_ZN8S19737C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19737C4[];
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY vtc_S19737C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C4[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
Class_Descriptor cd_S19737C4 = {  "S19737C4", // class name
  0,0,//no base classes
  &(vtc_S19737C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19737C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19737C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19737C5  {
  char s19737c5f0;
  int s19737c5f1;
  void *s19737c5f2[2];
  void  mf19737c5(); // _ZN8S19737C59mf19737c5Ev
};
//SIG(-1 S19737C5) C1{ m Fc Fi Fp[2]}


void  S19737C5 ::mf19737c5(){}

static void Test_S19737C5()
{
  {
    init_simple_test("S19737C5");
    S19737C5 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19737C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19737C5)");
    check_field_offset(lv, s19737c5f0, 0, "S19737C5.s19737c5f0");
    check_field_offset(lv, s19737c5f1, 4, "S19737C5.s19737c5f1");
    check_field_offset(lv, s19737c5f2, 8, "S19737C5.s19737c5f2");
  }
}
static Arrange_To_Call_Me vS19737C5(Test_S19737C5, "S19737C5", ABISELECT(24,16));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19737C5[];
VTBL_ENTRY *P__ZTI8S19737C5 = _ZTI8S19737C5; 
Class_Descriptor cd_S19737C5 = {  "S19737C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19737C5),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  S19737C8  : virtual S19737C4 {
  int s19737c8f0;
  virtual void  v3(); // _ZN8S19737C82v3Ev
  ~S19737C8(); // tgen
  S19737C8(); // tgen
};
//SIG(-1 S19737C8) C1{ VBC2{ v2 Fs} v1 Fi}


void  S19737C8 ::v3(){vfunc_called(this, "_ZN8S19737C82v3Ev");}
S19737C8 ::~S19737C8(){ note_dtor("S19737C8", this);} // tgen
S19737C8 ::S19737C8(){ note_ctor("S19737C8", this);} // tgen

static void Test_S19737C8()
{
  extern Class_Descriptor cd_S19737C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19737C8, buf);
    S19737C8 *dp, &lv = *(dp=new (buf) S19737C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19737C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19737C8)");
    check_base_class_offset(lv, (S19737C4*), ABISELECT(16,8), "S19737C8");
    check_field_offset(lv, s19737c8f0, ABISELECT(8,4), "S19737C8.s19737c8f0");
    test_class_info(&lv, &cd_S19737C8);
    dp->~S19737C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19737C8(Test_S19737C8, "S19737C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19737C8C1Ev();
extern void _ZN8S19737C8D1Ev();
Name_Map name_map_S19737C8[] = {
  NSPAIR(_ZN8S19737C8C1Ev),
  NSPAIR(_ZN8S19737C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
static Base_Class bases_S19737C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C4,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19737C8[];
extern void _ZN8S19737C82v3Ev();
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY vtc_S19737C8[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19737C8[];
static  VTT_ENTRY vtt_S19737C8[] = {
  {&(_ZTV8S19737C8[3]),  3,8},
  {&(_ZTV8S19737C8[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19737C8[];
extern  VTBL_ENTRY _ZTV8S19737C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C8[];
Class_Descriptor cd_S19737C8 = {  "S19737C8", // class name
  bases_S19737C8, 1,
  &(vtc_S19737C8[0]), // expected_vtbl_contents
  &(vtt_S19737C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19737C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19737C8),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19737C8),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  S19737C9  {
  ::S19737C2 s19737c9f0;
  int s19737c9f1;
  virtual void  v4(); // _ZN8S19737C92v4Ev
  ~S19737C9(); // tgen
  S19737C9(); // tgen
};
//SIG(-1 S19737C9) C1{ v1 FC2{ m FL Fp[8]} Fi}


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

static void Test_S19737C9()
{
  extern Class_Descriptor cd_S19737C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S19737C9, buf);
    S19737C9 *dp, &lv = *(dp=new (buf) S19737C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S19737C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19737C9)");
    check_field_offset(lv, s19737c9f0, ABISELECT(8,4), "S19737C9.s19737c9f0");
    check_field_offset(lv, s19737c9f1, ABISELECT(80,44), "S19737C9.s19737c9f1");
    test_class_info(&lv, &cd_S19737C9);
    dp->~S19737C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19737C9(Test_S19737C9, "S19737C9", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S19737C9C1Ev();
extern void _ZN8S19737C9D1Ev();
Name_Map name_map_S19737C9[] = {
  NSPAIR(_ZN8S19737C9C1Ev),
  NSPAIR(_ZN8S19737C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19737C9[];
extern void _ZN8S19737C92v4Ev();
static  VTBL_ENTRY vtc_S19737C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C9[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
};
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
Class_Descriptor cd_S19737C9 = {  "S19737C9", // class name
  0,0,//no base classes
  &(vtc_S19737C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S19737C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19737C9),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  S19737C7  : virtual S19737C4 , virtual S19737C8 , virtual S19737C5 , virtual S19737C9 , virtual S19737C2 {
  int s19737c7f0;
  long double s19737c7f1;
  int s19737c7f2;
  ~S19737C7(); // tgen
  S19737C7(); // tgen
};
//SIG(-1 S19737C7) C1{ VBC2{ v1 Fs} VBC3{ VBC2 v2 Fi} VBC4{ m Fc Fi Fp[2]} VBC5{ v3 FC6{ m FL Fp[8]} Fi} VBC6 Fi FD Fi}


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

static void Test_S19737C7()
{
  extern Class_Descriptor cd_S19737C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,37)];
    init_test(&cd_S19737C7, buf);
    S19737C7 *dp, &lv = *(dp=new (buf) S19737C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,144), "sizeof(S19737C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19737C7)");
    check_base_class_offset(lv, (S19737C4*), ABISELECT(40,24), "S19737C7");
    check_base_class_offset(lv, (S19737C4*)(S19737C8*), ABISELECT(40,24), "S19737C7");
    check_base_class_offset(lv, (S19737C8*), ABISELECT(56,32), "S19737C7");
    check_base_class_offset(lv, (S19737C5*), ABISELECT(72,40), "S19737C7");
    check_base_class_offset(lv, (S19737C9*), ABISELECT(96,56), "S19737C7");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(184,104), "S19737C7");
    check_field_offset(lv, s19737c7f0, ABISELECT(8,4), "S19737C7.s19737c7f0");
    check_field_offset(lv, s19737c7f1, ABISELECT(16,8), "S19737C7.s19737c7f1");
    check_field_offset(lv, s19737c7f2, ABISELECT(32,20), "S19737C7.s19737c7f2");
    test_class_info(&lv, &cd_S19737C7);
    dp->~S19737C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19737C7(Test_S19737C7, "S19737C7", ABISELECT(256,144));

#else // __cplusplus

extern void _ZN8S19737C7C1Ev();
extern void _ZN8S19737C7D1Ev();
Name_Map name_map_S19737C7[] = {
  NSPAIR(_ZN8S19737C7C1Ev),
  NSPAIR(_ZN8S19737C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
extern Class_Descriptor cd_S19737C8;
extern VTBL_ENTRY _ZTI8S19737C8[];
extern  VTBL_ENTRY _ZTV8S19737C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C8[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
static Base_Class bases_S19737C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C4,    ABISELECT(40,24), //bcp->offset
    7, //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_S19737C8,    ABISELECT(56,32), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C5,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C9,    ABISELECT(96,56), //bcp->offset
    16, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C2,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19737C7[];
extern void _ZN8S19737C42v2Ev();
extern void _ZN8S19737C82v3Ev();
extern void _ZN8S19737C92v4Ev();
static  VTBL_ENTRY vtc_S19737C7[] = {
  ABISELECT(184,104),
  ABISELECT(96,56),
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
};
extern VTBL_ENTRY _ZTV8S19737C7[];
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C8__8S19737C7[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
static  VTT_ENTRY vtt_S19737C7[] = {
  {&(_ZTV8S19737C7[7]),  7,20},
  {&(_ZTV8S19737C7[10]),  10,20},
  {&(_ZTV8S19737C7[15]),  15,20},
  {&(_ZTV8S19737C7[19]),  19,20},
  {&(_tg__ZTV8S19737C8__8S19737C7[3]),  3,4},
  {&(_tg__ZTV8S19737C4__8S19737C8__8S19737C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19737C7[];
extern  VTBL_ENTRY _ZTV8S19737C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C7[];
Class_Descriptor cd_S19737C7 = {  "S19737C7", // class name
  bases_S19737C7, 5,
  &(vtc_S19737C7[0]), // expected_vtbl_contents
  &(vtt_S19737C7[0]), // expected_vtt_contents
  ABISELECT(256,144), // object size
  NSPAIRA(_ZTI8S19737C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19737C7),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19737C7),6, //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

union  S19737C11  {
  long s19737c11f0[7];
  short s19737c11f1[8];
  __tsi64 s19737c11f2;
  void  mf19737c11(); // _ZN9S19737C1110mf19737c11Ev
};
//SIG(1 S19737C11) U1{ m Fl[7] Fs[8] FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19737C10  : S19737C9 , S19737C2 , virtual S19737C4 {
  char s19737c10f0[7];
  ::S19737C11 s19737c10f1[8];
  int s19737c10f2;
  virtual void  v5(); // _ZN9S19737C102v5Ev
  ~S19737C10(); // tgen
  S19737C10(); // tgen
};
//SIG(-1 S19737C10) C1{ BC2{ v2 FC3{ m FL Fp[8]} Fi} BC3 VBC4{ v3 Fs} v1 Fc[7] FU5{ m Fl[7] Fs[8] FL}[8] Fi}


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

static void Test_S19737C10()
{
  extern Class_Descriptor cd_S19737C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(81,84)];
    init_test(&cd_S19737C10, buf);
    S19737C10 *dp, &lv = *(dp=new (buf) S19737C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,332), "sizeof(S19737C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19737C10)");
    check_base_class_offset(lv, (S19737C9*), 0, "S19737C10");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(88,48), "S19737C10");
    check_base_class_offset(lv, (S19737C4*), ABISELECT(624,324), "S19737C10");
    check_field_offset(lv, s19737c10f0, ABISELECT(160,88), "S19737C10.s19737c10f0");
    check_field_offset(lv, s19737c10f1, ABISELECT(168,96), "S19737C10.s19737c10f1");
    check_field_offset(lv, s19737c10f2, ABISELECT(616,320), "S19737C10.s19737c10f2");
    test_class_info(&lv, &cd_S19737C10);
    dp->~S19737C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19737C10(Test_S19737C10, "S19737C10", ABISELECT(640,332));

#else // __cplusplus

extern void _ZN9S19737C10C1Ev();
extern void _ZN9S19737C10D1Ev();
Name_Map name_map_S19737C10[] = {
  NSPAIR(_ZN9S19737C10C1Ev),
  NSPAIR(_ZN9S19737C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
static Base_Class bases_S19737C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19737C2,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C4,    ABISELECT(624,324), //bcp->offset
    5, //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 _ZTI9S19737C10[];
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY vtc_S19737C10[] = {
  ABISELECT(624,324),
  0,
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
  0,
  ABISELECT(-624,-324),
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S19737C10[];
static  VTT_ENTRY vtt_S19737C10[] = {
  {&(_ZTV9S19737C10[3]),  3,9},
  {&(_ZTV9S19737C10[8]),  8,9},
};
extern VTBL_ENTRY _ZTI9S19737C10[];
extern  VTBL_ENTRY _ZTV9S19737C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19737C10[];
Class_Descriptor cd_S19737C10 = {  "S19737C10", // class name
  bases_S19737C10, 3,
  &(vtc_S19737C10[0]), // expected_vtbl_contents
  &(vtt_S19737C10[0]), // expected_vtt_contents
  ABISELECT(640,332), // object size
  NSPAIRA(_ZTI9S19737C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19737C10),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19737C10),2, //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  S19737C6  : S19737C5 , S19737C2 , S19737C7 , virtual S19737C10 , S19737C4 {
  long double s19737c6f0;
  int s19737c6f1;
  ::S19737C11 s19737c6f2;
  void *s19737c6f3[4];
  virtual void  v6(); // _ZN8S19737C62v6Ev
  virtual void  v7(); // _ZN8S19737C62v7Ev
  ~S19737C6(); // tgen
  S19737C6(); // tgen
};
//SIG(-1 S19737C6) C1{ BC2{ m Fc Fi Fp[2]} BC3{ m FL Fp[8]} BC4{ VBC5{ v3 Fs} VBC6{ VBC5 v4 Fi} VBC2 VBC7{ v5 FC3 Fi} VBC3 Fi FD Fi} VBC8{ BC7 BC3 VBC5 v6 Fc[7] FU9{ m Fl[7] Fs[8] FL}[8] Fi} BC5 v1 v2 FD Fi FU9 Fp[4]}


void  S19737C6 ::v6(){vfunc_called(this, "_ZN8S19737C62v6Ev");}
void  S19737C6 ::v7(){vfunc_called(this, "_ZN8S19737C62v7Ev");}
S19737C6 ::~S19737C6(){ note_dtor("S19737C6", this);} // tgen
S19737C6 ::S19737C6(){ note_ctor("S19737C6", this);} // tgen

static void Test_S19737C6()
{
  extern Class_Descriptor cd_S19737C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(71,149)];
    init_test(&cd_S19737C6, buf);
    S19737C6 *dp, &lv = *(dp=new (buf) S19737C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1120,592), "sizeof(S19737C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19737C6)");
    /*is_ambiguous_... S19737C6::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*), ABISELECT(40,24), "S19737C6");
    /*is_ambiguous_... S19737C6::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*), ABISELECT(64,40), "S19737C6");
    check_base_class_offset(lv, (S19737C4*)(S19737C7*), ABISELECT(272,148), "S19737C6");
    check_base_class_offset(lv, (S19737C4*)(S19737C8*), ABISELECT(272,148), "S19737C6");
    check_base_class_offset(lv, (S19737C4*)(S19737C10*), ABISELECT(272,148), "S19737C6");
    check_base_class_offset(lv, (S19737C8*)(S19737C7*), ABISELECT(288,156), "S19737C6");
    check_base_class_offset(lv, (S19737C5*)(S19737C7*), ABISELECT(304,164), "S19737C6");
    check_base_class_offset(lv, (S19737C9*)(S19737C7*), ABISELECT(328,180), "S19737C6");
    check_base_class_offset(lv, (S19737C2*)(S19737C7*), ABISELECT(416,228), "S19737C6");
    check_base_class_offset(lv, (S19737C7*), 0, "S19737C6");
    check_base_class_offset(lv, (S19737C9*)(S19737C10*), ABISELECT(488,268), "S19737C6");
    check_base_class_offset(lv, (S19737C2*)(S19737C10*), ABISELECT(576,316), "S19737C6");
    check_base_class_offset(lv, (S19737C10*), ABISELECT(488,268), "S19737C6");
    /*is_ambiguous_... S19737C6::S19737C4 */ AMB_check_base_class_offset(lv, (S19737C4*), ABISELECT(136,80), "S19737C6");
    check_field_offset(lv, s19737c6f0, ABISELECT(160,88), "S19737C6.s19737c6f0");
    check_field_offset(lv, s19737c6f1, ABISELECT(176,100), "S19737C6.s19737c6f1");
    check_field_offset(lv, s19737c6f2, ABISELECT(184,104), "S19737C6.s19737c6f2");
    check_field_offset(lv, s19737c6f3, ABISELECT(240,132), "S19737C6.s19737c6f3");
    test_class_info(&lv, &cd_S19737C6);
    dp->~S19737C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19737C6(Test_S19737C6, "S19737C6", ABISELECT(1120,592));

#else // __cplusplus

extern void _ZN8S19737C6C1Ev();
extern void _ZN8S19737C6D1Ev();
Name_Map name_map_S19737C6[] = {
  NSPAIR(_ZN8S19737C6C1Ev),
  NSPAIR(_ZN8S19737C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
extern Class_Descriptor cd_S19737C8;
extern VTBL_ENTRY _ZTI8S19737C8[];
extern  VTBL_ENTRY _ZTV8S19737C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C8[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C7;
extern VTBL_ENTRY _ZTI8S19737C7[];
extern  VTBL_ENTRY _ZTV8S19737C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C7[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C10;
extern VTBL_ENTRY _ZTI9S19737C10[];
extern  VTBL_ENTRY _ZTV9S19737C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19737C10[];
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
static Base_Class bases_S19737C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C5,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C2,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C4,    ABISELECT(272,148), //bcp->offset
    13, //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_S19737C8,    ABISELECT(288,156), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C5,    ABISELECT(304,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
    7, //immediately_derived
  0, 1},
  {&cd_S19737C9,    ABISELECT(328,180), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C2,    ABISELECT(416,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
    7, //immediately_derived
  0, 1},
  {&cd_S19737C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C9,    ABISELECT(488,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(576,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
    10, //immediately_derived
  0, 0},
  {&cd_S19737C10,    ABISELECT(488,268), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C4,    ABISELECT(136,80), //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 _ZTI8S19737C6[];
extern void _ZN8S19737C62v6Ev();
extern void _ZN8S19737C62v7Ev();
extern void _ZN8S19737C42v2Ev();
extern void _ZN8S19737C42v2Ev();
extern void _ZN8S19737C82v3Ev();
extern void _ZN8S19737C92v4Ev();
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY vtc_S19737C6[] = {
  ABISELECT(488,268),
  ABISELECT(416,228),
  ABISELECT(328,180),
  ABISELECT(304,164),
  ABISELECT(288,156),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19737C62v7Ev,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
  0,
  ABISELECT(-328,-180),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-488,-268),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19737C6[];
static  VTBL_ENTRY _tg__ZTV8S19737C7__8S19737C6[] = {
  ABISELECT(416,228),
  ABISELECT(328,180),
  ABISELECT(304,164),
  ABISELECT(288,156),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C7__8S19737C6[] = {
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C7__8S19737C6[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C9__8S19737C7__8S19737C6[] = {
  0,
  ABISELECT(-328,-180),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C8__8S19737C6[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__8S19737C6[] = {
  ABISELECT(-216,-120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__9S19737C10__8S19737C6[] = {
  0,
  ABISELECT(216,120),
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
static  VTT_ENTRY vtt_S19737C6[] = {
  {&(_ZTV8S19737C6[8]),  8,33},
  {&(_tg__ZTV8S19737C7__8S19737C6[7]),  7,7},
  {&(_tg__ZTV8S19737C4__8S19737C7__8S19737C6[3]),  3,4},
  {&(_tg__ZTV8S19737C8__8S19737C7__8S19737C6[4]),  4,5},
  {&(_tg__ZTV8S19737C9__8S19737C7__8S19737C6[3]),  3,4},
  {&(_ZTV8S19737C6[16]),  16,33},
  {&(_ZTV8S19737C6[21]),  21,33},
  {&(_ZTV8S19737C6[25]),  25,33},
  {&(_ZTV8S19737C6[31]),  31,33},
  {&(_tg__ZTV8S19737C8__8S19737C6[3]),  3,4},
  {&(_tg__ZTV8S19737C4__8S19737C8__8S19737C6[3]),  3,4},
  {&(_tg__ZTV9S19737C10__8S19737C6[3]),  3,5},
  {&(_tg__ZTV8S19737C4__9S19737C10__8S19737C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19737C6[];
extern  VTBL_ENTRY _ZTV8S19737C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C6[];
Class_Descriptor cd_S19737C6 = {  "S19737C6", // class name
  bases_S19737C6, 12,
  &(vtc_S19737C6[0]), // expected_vtbl_contents
  &(vtt_S19737C6[0]), // expected_vtt_contents
  ABISELECT(1120,592), // object size
  NSPAIRA(_ZTI8S19737C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19737C6),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19737C6),13, //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  S19737C3  : virtual S19737C4 , virtual S19737C5 , S19737C6 , S19737C10 , S19737C2 {
  char s19737c3f0;
  char  :0;
  ~S19737C3(); // tgen
  S19737C3(); // tgen
};
//SIG(-1 S19737C3) C1{ VBC2{ v1 Fs} VBC3{ m Fc Fi Fp[2]} BC4{ BC3 BC5{ m FL Fp[8]} BC6{ VBC2 VBC7{ VBC2 v2 Fi} VBC3 VBC8{ v3 FC5 Fi} VBC5 Fi FD Fi} VBC9{ BC8 BC5 VBC2 v4 Fc[7] FU10{ m Fl[7] Fs[8] FL}[8] Fi} BC2 v5 v6 FD Fi FU10 Fp[4]} BC9 BC5 Fc Fc:0}


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

static void Test_S19737C3()
{
  extern Class_Descriptor cd_S19737C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(115,241)];
    init_test(&cd_S19737C3, buf);
    S19737C3 *dp, &lv = *(dp=new (buf) S19737C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1824,960), "sizeof(S19737C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19737C3)");
    /*is_ambiguous_... S19737C3::S19737C4 */ AMB_check_base_class_offset(lv, (S19737C4*), ABISELECT(976,516), "S19737C3");
    check_base_class_offset(lv, (S19737C4*)(S19737C7*)(S19737C6*), ABISELECT(976,516), "S19737C3");
    check_base_class_offset(lv, (S19737C4*)(S19737C8*), ABISELECT(976,516), "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C4*)(S19737C10*), ABISELECT(976,516), "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C4*)(S19737C10*), ABISELECT(976,516), "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*), ABISELECT(992,524), "S19737C3");
    check_base_class_offset(lv, (S19737C5*)(S19737C7*)(S19737C6*), ABISELECT(992,524), "S19737C3");
    /*is_ambiguous_... S19737C6::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*)(S19737C6*), ABISELECT(40,24), "S19737C3");
    /*is_ambiguous_... S19737C6::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*)(S19737C6*), ABISELECT(64,40), "S19737C3");
    check_base_class_offset(lv, (S19737C8*)(S19737C7*)(S19737C6*), ABISELECT(1016,540), "S19737C3");
    check_base_class_offset(lv, (S19737C9*)(S19737C7*)(S19737C6*), ABISELECT(1032,548), "S19737C3");
    check_base_class_offset(lv, (S19737C2*)(S19737C7*)(S19737C6*), ABISELECT(1120,596), "S19737C3");
    check_base_class_offset(lv, (S19737C7*)(S19737C6*), 0, "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C9*)(S19737C10*), ABISELECT(1192,636), "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C2*)(S19737C10*), ABISELECT(1280,684), "S19737C3");
    check_base_class_offset(lv, (S19737C10*)(S19737C6*), ABISELECT(1192,636), "S19737C3");
    /*is_ambiguous_... S19737C6::S19737C4 */ AMB_check_base_class_offset(lv, (S19737C4*)(S19737C6*), ABISELECT(136,80), "S19737C3");
    check_base_class_offset(lv, (S19737C6*), 0, "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C9*)(S19737C10*), ABISELECT(272,148), "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C2*)(S19737C10*), ABISELECT(360,196), "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C10*), ABISELECT(272,148), "S19737C3");
    /*is_ambiguous_... S19737C3::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*), ABISELECT(896,472), "S19737C3");
    check_field_offset(lv, s19737c3f0, ABISELECT(968,512), "S19737C3.s19737c3f0");
    test_class_info(&lv, &cd_S19737C3);
    dp->~S19737C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19737C3(Test_S19737C3, "S19737C3", ABISELECT(1824,960));

#else // __cplusplus

extern void _ZN8S19737C3C1Ev();
extern void _ZN8S19737C3D1Ev();
Name_Map name_map_S19737C3[] = {
  NSPAIR(_ZN8S19737C3C1Ev),
  NSPAIR(_ZN8S19737C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C8;
extern VTBL_ENTRY _ZTI8S19737C8[];
extern  VTBL_ENTRY _ZTV8S19737C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C8[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C7;
extern VTBL_ENTRY _ZTI8S19737C7[];
extern  VTBL_ENTRY _ZTV8S19737C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C7[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C10;
extern VTBL_ENTRY _ZTI9S19737C10[];
extern  VTBL_ENTRY _ZTV9S19737C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19737C10[];
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
extern Class_Descriptor cd_S19737C6;
extern VTBL_ENTRY _ZTI8S19737C6[];
extern  VTBL_ENTRY _ZTV8S19737C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C6[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C10;
extern VTBL_ENTRY _ZTI9S19737C10[];
extern  VTBL_ENTRY _ZTV9S19737C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19737C10[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
static Base_Class bases_S19737C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C4,    ABISELECT(976,516), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C5,    ABISELECT(992,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C5,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19737C2,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19737C8,    ABISELECT(1016,540), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C9,    ABISELECT(1032,548), //bcp->offset
    27, //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
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C2,    ABISELECT(1120,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19737C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19737C9,    ABISELECT(1192,636), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(1280,684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19737C10,    ABISELECT(1192,636), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19737C4,    ABISELECT(136,80), //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
    12, //immediately_derived
  0, 0},
  {&cd_S19737C6,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C9,    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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(360,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
    15, //immediately_derived
  0, 0},
  {&cd_S19737C10,    ABISELECT(272,148), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C2,    ABISELECT(896,472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19737C3[];
extern void _ZN8S19737C62v6Ev();
extern void _ZN8S19737C62v7Ev();
extern void _ZN8S19737C42v2Ev();
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
extern void _ZN8S19737C42v2Ev();
extern void _ZN8S19737C82v3Ev();
extern void _ZN8S19737C92v4Ev();
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY vtc_S19737C3[] = {
  ABISELECT(1192,636),
  ABISELECT(1120,596),
  ABISELECT(1032,548),
  ABISELECT(992,524),
  ABISELECT(1016,540),
  ABISELECT(976,516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19737C62v7Ev,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
  ABISELECT(704,368),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
  0,
  ABISELECT(-976,-516),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-1016,-540),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
  0,
  ABISELECT(-1032,-548),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-1192,-636),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19737C3[];
extern void _ZN8S19737C62v6Ev();
extern void _ZN8S19737C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C6__8S19737C3[] = {
  ABISELECT(1192,636),
  ABISELECT(1120,596),
  ABISELECT(1032,548),
  ABISELECT(992,524),
  ABISELECT(1016,540),
  ABISELECT(976,516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19737C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19737C78S19737C6__8S19737C3[] = {
  ABISELECT(1120,596),
  ABISELECT(1032,548),
  ABISELECT(992,524),
  ABISELECT(1016,540),
  ABISELECT(976,516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C78S19737C6__8S19737C3[] = {
  0,
  ABISELECT(-976,-516),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C78S19737C6__8S19737C3[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-1016,-540),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C9__8S19737C78S19737C6__8S19737C3[] = {
  0,
  ABISELECT(-1032,-548),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C6__8S19737C3[] = {
  0,
  ABISELECT(-976,-516),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C6__8S19737C3[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-1016,-540),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C9__8S19737C6__8S19737C3[] = {
  0,
  ABISELECT(-1032,-548),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__8S19737C6__8S19737C3[] = {
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-1192,-636),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__A__8S19737C3[] = {
  ABISELECT(704,368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__9S19737C10__A__8S19737C3[] = {
  0,
  ABISELECT(-704,-368),
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C3[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C8__8S19737C3[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__8S19737C3[] = {
  ABISELECT(-216,-120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__9S19737C10__8S19737C3[] = {
  0,
  ABISELECT(216,120),
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
static  VTT_ENTRY vtt_S19737C3[] = {
  {&(_ZTV8S19737C3[8]),  8,38},
  {&(_tg__ZTV8S19737C6__8S19737C3[8]),  8,10},
  {&(_tg__ZTV8S19737C78S19737C6__8S19737C3[7]),  7,7},
  {&(_tg__ZTV8S19737C4__8S19737C78S19737C6__8S19737C3[3]),  3,4},
  {&(_tg__ZTV8S19737C8__8S19737C78S19737C6__8S19737C3[4]),  4,5},
  {&(_tg__ZTV8S19737C9__8S19737C78S19737C6__8S19737C3[3]),  3,4},
  {&(_tg__ZTV8S19737C4__8S19737C6__8S19737C3[3]),  3,4},
  {&(_tg__ZTV8S19737C8__8S19737C6__8S19737C3[4]),  4,5},
  {&(_tg__ZTV8S19737C9__8S19737C6__8S19737C3[3]),  3,4},
  {&(_tg__ZTV9S19737C10__8S19737C6__8S19737C3[5]),  5,7},
  {&(_tg__ZTV9S19737C10__A__8S19737C3[3]),  3,5},
  {&(_tg__ZTV8S19737C4__9S19737C10__A__8S19737C3[3]),  3,4},
  {&(_ZTV8S19737C3[21]),  21,38},
  {&(_ZTV8S19737C3[26]),  26,38},
  {&(_ZTV8S19737C3[30]),  30,38},
  {&(_ZTV8S19737C3[36]),  36,38},
  {&(_ZTV8S19737C3[16]),  16,38},
  {&(_tg__ZTV8S19737C8__8S19737C3[3]),  3,4},
  {&(_tg__ZTV8S19737C4__8S19737C8__8S19737C3[3]),  3,4},
  {&(_tg__ZTV9S19737C10__8S19737C3[3]),  3,5},
  {&(_tg__ZTV8S19737C4__9S19737C10__8S19737C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19737C3[];
extern  VTBL_ENTRY _ZTV8S19737C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C3[];
Class_Descriptor cd_S19737C3 = {  "S19737C3", // class name
  bases_S19737C3, 17,
  &(vtc_S19737C3[0]), // expected_vtbl_contents
  &(vtt_S19737C3[0]), // expected_vtt_contents
  ABISELECT(1824,960), // object size
  NSPAIRA(_ZTI8S19737C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19737C3),38, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19737C3),21, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19737C12_nt  {
  int s19737c12f0;
  char s19737c12f1;
  void  mf19737c12(); // _ZN12S19737C12_nt10mf19737c12Ev
};
//SIG(-1 S19737C12_nt) C1{ m Fi Fc}


void  S19737C12_nt ::mf19737c12(){}

//skip512 S19737C12_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S19737C12_nt[];
VTBL_ENTRY *P__ZTI12S19737C12_nt = _ZTI12S19737C12_nt; 
Class_Descriptor cd_S19737C12_nt = {  "S19737C12_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI12S19737C12_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  S19737C1  : virtual S19737C2 , virtual S19737C3 , virtual S19737C12_nt , S19737C10 {
  int s19737c1f0;
  virtual  ~S19737C1(); // _ZN8S19737C1D2Ev
  virtual void  v1(); // _ZN8S19737C12v1Ev
  S19737C1(); // tgen
};
//SIG(1 S19737C1) C1{ VBC2{ m FL Fp[8]} VBC3{ VBC4{ v2 Fs} VBC5{ m Fc Fi Fp[2]} BC6{ BC5 BC2 BC7{ VBC4 VBC8{ VBC4 v3 Fi} VBC5 VBC9{ v4 FC2 Fi} VBC2 Fi FD Fi} VBC10{ BC9 BC2 VBC4 v5 Fc[7] FU11{ m Fl[7] Fs[8] FL}[8] Fi} BC4 v6 v7 FD Fi FU11 Fp[4]} BC10 BC2 Fc Fc:0} VBC12{ m Fi Fc} BC10 vd v1 Fi}


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

static void Test_S19737C1()
{
  extern Class_Descriptor cd_S19737C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(155,325)];
    init_test(&cd_S19737C1, buf);
    S19737C1 *dp, &lv = *(dp=new (buf) S19737C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2464,1296), "sizeof(S19737C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19737C1)");
    /*is_ambiguous_... S19737C1::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*), ABISELECT(624,328), "S19737C1");
    check_base_class_offset(lv, (S19737C2*)(S19737C7*)(S19737C6*)(S19737C3*), ABISELECT(624,328), "S19737C1");
    /*is_ambiguous_... S19737C3::S19737C4 */ AMB_check_base_class_offset(lv, (S19737C4*)(S19737C3*), ABISELECT(1680,884), "S19737C1");
    check_base_class_offset(lv, (S19737C4*)(S19737C7*)(S19737C6*)(S19737C3*), ABISELECT(1680,884), "S19737C1");
    check_base_class_offset(lv, (S19737C4*)(S19737C8*), ABISELECT(1680,884), "S19737C1");
    /*is_ambiguous_... S19737C1::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C4*)(S19737C10*), ABISELECT(1680,884), "S19737C1");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C4*)(S19737C10*)(S19737C3*), ABISELECT(1680,884), "S19737C1");
    /*is_ambiguous_... S19737C1::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C4*)(S19737C10*), ABISELECT(1680,884), "S19737C1");
    /*is_ambiguous_... S19737C3::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*)(S19737C3*), ABISELECT(1696,892), "S19737C1");
    check_base_class_offset(lv, (S19737C5*)(S19737C7*)(S19737C6*)(S19737C3*), ABISELECT(1696,892), "S19737C1");
    /*is_ambiguous_... S19737C6::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*)(S19737C6*)(S19737C3*), ABISELECT(744,392), "S19737C1");
    /*is_ambiguous_... S19737C6::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*)(S19737C6*)(S19737C3*), ABISELECT(768,408), "S19737C1");
    check_base_class_offset(lv, (S19737C8*)(S19737C7*)(S19737C6*)(S19737C3*), ABISELECT(1720,908), "S19737C1");
    check_base_class_offset(lv, (S19737C9*)(S19737C7*)(S19737C6*)(S19737C3*), ABISELECT(1736,916), "S19737C1");
    check_base_class_offset(lv, (S19737C7*)(S19737C6*)(S19737C3*), ABISELECT(704,368), "S19737C1");
    /*is_ambiguous_... S19737C1::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C9*)(S19737C10*), ABISELECT(1824,964), "S19737C1");
    /*is_ambiguous_... S19737C1::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C2*)(S19737C10*), ABISELECT(1912,1012), "S19737C1");
    check_base_class_offset(lv, (S19737C10*)(S19737C6*)(S19737C3*), ABISELECT(1824,964), "S19737C1");
    /*is_ambiguous_... S19737C6::S19737C4 */ AMB_check_base_class_offset(lv, (S19737C4*)(S19737C6*)(S19737C3*), ABISELECT(840,448), "S19737C1");
    check_base_class_offset(lv, (S19737C6*)(S19737C3*), ABISELECT(704,368), "S19737C1");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C9*)(S19737C10*)(S19737C3*), ABISELECT(976,516), "S19737C1");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C2*)(S19737C10*)(S19737C3*), ABISELECT(1064,564), "S19737C1");
    /*is_ambiguous_... S19737C3::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C10*)(S19737C3*), ABISELECT(976,516), "S19737C1");
    /*is_ambiguous_... S19737C3::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*)(S19737C3*), ABISELECT(1600,840), "S19737C1");
    check_base_class_offset(lv, (S19737C3*), ABISELECT(704,368), "S19737C1");
    check_base_class_offset(lv, (S19737C12_nt*), ABISELECT(2444,1288), "S19737C1");
    /*is_ambiguous_... S19737C1::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C9*)(S19737C10*), 0, "S19737C1");
    /*is_ambiguous_... S19737C1::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C2*)(S19737C10*), ABISELECT(88,48), "S19737C1");
    /*is_ambiguous_... S19737C1::S19737C10 */ AMB_check_base_class_offset(lv, (S19737C10*), 0, "S19737C1");
    check_field_offset(lv, s19737c1f0, ABISELECT(620,324), "S19737C1.s19737c1f0");
    test_class_info(&lv, &cd_S19737C1);
    dp->~S19737C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19737C1(Test_S19737C1, "S19737C1", ABISELECT(2464,1296));

#else // __cplusplus

extern void _ZN8S19737C1C1Ev();
extern void _ZN8S19737C1D2Ev();
Name_Map name_map_S19737C1[] = {
  NSPAIR(_ZN8S19737C1C1Ev),
  NSPAIR(_ZN8S19737C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C8;
extern VTBL_ENTRY _ZTI8S19737C8[];
extern  VTBL_ENTRY _ZTV8S19737C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C8[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C7;
extern VTBL_ENTRY _ZTI8S19737C7[];
extern  VTBL_ENTRY _ZTV8S19737C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C7[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C10;
extern VTBL_ENTRY _ZTI9S19737C10[];
extern  VTBL_ENTRY _ZTV9S19737C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19737C10[];
extern Class_Descriptor cd_S19737C4;
extern VTBL_ENTRY _ZTI8S19737C4[];
extern  VTBL_ENTRY _ZTV8S19737C4[];
extern Class_Descriptor cd_S19737C6;
extern VTBL_ENTRY _ZTI8S19737C6[];
extern  VTBL_ENTRY _ZTV8S19737C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C6[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C10;
extern VTBL_ENTRY _ZTI9S19737C10[];
extern  VTBL_ENTRY _ZTV9S19737C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19737C10[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C3;
extern VTBL_ENTRY _ZTI8S19737C3[];
extern  VTBL_ENTRY _ZTV8S19737C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C3[];
extern Class_Descriptor cd_S19737C12_nt;
extern VTBL_ENTRY _ZTI12S19737C12_nt[];
extern Class_Descriptor cd_S19737C9;
extern VTBL_ENTRY _ZTI8S19737C9[];
extern  VTBL_ENTRY _ZTV8S19737C9[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C10;
extern VTBL_ENTRY _ZTI9S19737C10[];
extern  VTBL_ENTRY _ZTV9S19737C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19737C10[];
static Base_Class bases_S19737C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C2,    ABISELECT(624,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
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C4,    ABISELECT(1680,884), //bcp->offset
    38, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19737C5,    ABISELECT(1696,892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19737C5,    ABISELECT(744,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
    12, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(768,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
    12, //immediately_derived
  0, 0},
  {&cd_S19737C8,    ABISELECT(1720,908), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C9,    ABISELECT(1736,916), //bcp->offset
    47, //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
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C7,    ABISELECT(704,368), //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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19737C9,    ABISELECT(1824,964), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(1912,1012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19737C10,    ABISELECT(1824,964), //bcp->offset
    51, //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
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19737C4,    ABISELECT(840,448), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19737C6,    ABISELECT(704,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19737C9,    ABISELECT(976,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(1064,564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19737C10,    ABISELECT(976,516), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(1600,840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19737C3,    ABISELECT(704,368), //bcp->offset
    15, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C12_nt,    ABISELECT(2444,1288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19737C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S19737C2,    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
    21, //immediately_derived
  0, 0},
  {&cd_S19737C10,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19737C1[];
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
extern void _ZN8S19737C1D1Ev();
extern void _ZN8S19737C1D0Ev();
extern void _ZN8S19737C12v1Ev();
extern void _ZN8S19737C62v6Ev();
extern void _ZN8S19737C62v7Ev();
extern void _ZN8S19737C42v2Ev();
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
extern void _ZN8S19737C42v2Ev();
extern void _ZN8S19737C82v3Ev();
extern void _ZN8S19737C92v4Ev();
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY vtc_S19737C1[] = {
  ABISELECT(2444,1288),
  ABISELECT(1824,964),
  ABISELECT(1736,916),
  ABISELECT(1720,908),
  ABISELECT(1696,892),
  ABISELECT(704,368),
  ABISELECT(624,328),
  ABISELECT(1680,884),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C1[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
  (VTBL_ENTRY)&_ZN8S19737C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19737C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19737C12v1Ev,
  ABISELECT(272,148),
  ABISELECT(272,148),
  ABISELECT(136,80),
  0,
  0,
  ABISELECT(1120,596),
  ABISELECT(-80,-40),
  ABISELECT(1032,548),
  ABISELECT(992,524),
  ABISELECT(1016,540),
  ABISELECT(976,516),
  ABISELECT(-704,-368),
  (VTBL_ENTRY)&(_ZTI8S19737C1[0]),
  (VTBL_ENTRY)&_ZN8S19737C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19737C62v7Ev,
  ABISELECT(-840,-448),
  (VTBL_ENTRY)&(_ZTI8S19737C1[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
  ABISELECT(704,368),
  ABISELECT(-976,-516),
  (VTBL_ENTRY)&(_ZTI8S19737C1[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
  0,
  ABISELECT(-1680,-884),
  (VTBL_ENTRY)&(_ZTI8S19737C1[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-1720,-908),
  (VTBL_ENTRY)&(_ZTI8S19737C1[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
  0,
  ABISELECT(-1736,-916),
  (VTBL_ENTRY)&(_ZTI8S19737C1[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  0,
  0,
  ABISELECT(-144,-80),
  ABISELECT(-1824,-964),
  (VTBL_ENTRY)&(_ZTI8S19737C1[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S19737C1[];
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__A__8S19737C1[] = {
  ABISELECT(1680,884),
  0,
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__9S19737C10__A__8S19737C1[] = {
  0,
  ABISELECT(-1680,-884),
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C62v6Ev();
extern void _ZN8S19737C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C3__8S19737C1[] = {
  ABISELECT(1120,596),
  ABISELECT(-80,-40),
  ABISELECT(1032,548),
  ABISELECT(992,524),
  ABISELECT(1016,540),
  ABISELECT(976,516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19737C62v7Ev,
};
extern void _ZN8S19737C62v6Ev();
extern void _ZN8S19737C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C68S19737C3__8S19737C1[] = {
  ABISELECT(1120,596),
  ABISELECT(-80,-40),
  ABISELECT(1032,548),
  ABISELECT(992,524),
  ABISELECT(1016,540),
  ABISELECT(976,516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19737C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19737C78S19737C68S19737C3__8S19737C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(1032,548),
  ABISELECT(992,524),
  ABISELECT(1016,540),
  ABISELECT(976,516),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C78S19737C68S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-976,-516),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C78S19737C68S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-1016,-540),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C9__8S19737C78S19737C68S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-1032,-548),
  (VTBL_ENTRY)&(_ZTI8S19737C7[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C68S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-976,-516),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C68S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-1016,-540),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C9__8S19737C68S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-1032,-548),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__8S19737C68S19737C3__8S19737C1[] = {
  0,
  0,
  ABISELECT(-144,-80),
  ABISELECT(-1120,-596),
  (VTBL_ENTRY)&(_ZTI8S19737C6[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C108S19737C3__A1__8S19737C1[] = {
  ABISELECT(704,368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__9S19737C108S19737C3__A1__8S19737C1[] = {
  0,
  ABISELECT(-704,-368),
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-976,-516),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-1016,-540),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C9__8S19737C3__8S19737C1[] = {
  0,
  ABISELECT(-1032,-548),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__8S19737C3__8S19737C1[] = {
  0,
  0,
  ABISELECT(-144,-80),
  ABISELECT(-1120,-596),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__A__8S19737C3__8S19737C1[] = {
  ABISELECT(704,368),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S19737C3[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C8__8S19737C1[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C82v3Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__8S19737C8__8S19737C1[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19737C8[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
extern void _ZN8S19737C92v4Ev();
extern void _ZN9S19737C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19737C10__8S19737C1[] = {
  ABISELECT(-144,-80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C92v4Ev,
  (VTBL_ENTRY)&_ZN9S19737C102v5Ev,
};
extern void _ZN8S19737C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19737C4__9S19737C10__8S19737C1[] = {
  0,
  ABISELECT(144,80),
  (VTBL_ENTRY)&(_ZTI9S19737C10[0]),
  (VTBL_ENTRY)&_ZN8S19737C42v2Ev,
};
static  VTT_ENTRY vtt_S19737C1[] = {
  {&(_ZTV8S19737C1[10]),  10,58},
  {&(_tg__ZTV9S19737C10__A__8S19737C1[3]),  3,5},
  {&(_tg__ZTV8S19737C4__9S19737C10__A__8S19737C1[3]),  3,4},
  {&(_ZTV8S19737C1[28]),  28,58},
  {&(_ZTV8S19737C1[41]),  41,58},
  {&(_ZTV8S19737C1[46]),  46,58},
  {&(_ZTV8S19737C1[50]),  50,58},
  {&(_ZTV8S19737C1[56]),  56,58},
  {&(_ZTV8S19737C1[32]),  32,58},
  {&(_ZTV8S19737C1[36]),  36,58},
  {&(_tg__ZTV8S19737C3__8S19737C1[8]),  8,10},
  {&(_tg__ZTV8S19737C68S19737C3__8S19737C1[8]),  8,10},
  {&(_tg__ZTV8S19737C78S19737C68S19737C3__8S19737C1[7]),  7,7},
  {&(_tg__ZTV8S19737C4__8S19737C78S19737C68S19737C3__8S19737C1[3]),  3,4},
  {&(_tg__ZTV8S19737C8__8S19737C78S19737C68S19737C3__8S19737C1[4]),  4,5},
  {&(_tg__ZTV8S19737C9__8S19737C78S19737C68S19737C3__8S19737C1[3]),  3,4},
  {&(_tg__ZTV8S19737C4__8S19737C68S19737C3__8S19737C1[3]),  3,4},
  {&(_tg__ZTV8S19737C8__8S19737C68S19737C3__8S19737C1[4]),  4,5},
  {&(_tg__ZTV8S19737C9__8S19737C68S19737C3__8S19737C1[3]),  3,4},
  {&(_tg__ZTV9S19737C10__8S19737C68S19737C3__8S19737C1[5]),  5,7},
  {&(_tg__ZTV9S19737C108S19737C3__A1__8S19737C1[3]),  3,5},
  {&(_tg__ZTV8S19737C4__9S19737C108S19737C3__A1__8S19737C1[3]),  3,4},
  {&(_tg__ZTV8S19737C4__8S19737C3__8S19737C1[3]),  3,4},
  {&(_tg__ZTV8S19737C8__8S19737C3__8S19737C1[4]),  4,5},
  {&(_tg__ZTV8S19737C9__8S19737C3__8S19737C1[3]),  3,4},
  {&(_tg__ZTV9S19737C10__8S19737C3__8S19737C1[5]),  5,7},
  {&(_tg__ZTV9S19737C10__A__8S19737C3__8S19737C1[3]),  3,5},
  {&(_tg__ZTV8S19737C8__8S19737C1[3]),  3,4},
  {&(_tg__ZTV8S19737C4__8S19737C8__8S19737C1[3]),  3,4},
  {&(_tg__ZTV9S19737C10__8S19737C1[3]),  3,5},
  {&(_tg__ZTV8S19737C4__9S19737C10__8S19737C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19737C1[];
extern  VTBL_ENTRY _ZTV8S19737C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19737C1[];
Class_Descriptor cd_S19737C1 = {  "S19737C1", // class name
  bases_S19737C1, 22,
  &(vtc_S19737C1[0]), // expected_vtbl_contents
  &(vtt_S19737C1[0]), // expected_vtt_contents
  ABISELECT(2464,1296), // object size
  NSPAIRA(_ZTI8S19737C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19737C1),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19737C1),31, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3681C3_nt  {
  int s3681c3f0;
  void  mf3681c3(); // _ZN10S3681C3_nt8mf3681c3Ev
  virtual  ~S3681C3_nt(); // _ZN10S3681C3_ntD1Ev
  S3681C3_nt(); // tgen
};
//SIG(-1 S3681C3_nt) C1{ vd m Fi}


void  S3681C3_nt ::mf3681c3(){}
 S3681C3_nt ::~S3681C3_nt(){ note_dtor("S3681C3_nt", this);}
S3681C3_nt ::S3681C3_nt(){ note_ctor("S3681C3_nt", this);} // tgen

//skip512 S3681C3_nt

#else // __cplusplus

extern void _ZN10S3681C3_ntC1Ev();
extern void _ZN10S3681C3_ntD1Ev();
Name_Map name_map_S3681C3_nt[] = {
  NSPAIR(_ZN10S3681C3_ntC1Ev),
  NSPAIR(_ZN10S3681C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3681C3_nt[];
extern void _ZN10S3681C3_ntD1Ev();
extern void _ZN10S3681C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3681C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3681C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3681C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3681C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3681C3_nt[];
VTBL_ENTRY *P__ZTI10S3681C3_nt = _ZTI10S3681C3_nt; 
extern  VTBL_ENTRY _ZTV10S3681C3_nt[];
Class_Descriptor cd_S3681C3_nt = {  "S3681C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3681C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3681C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3681C3_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  S3681C2_nt  : S3681C3_nt {
  virtual void  v10(); // _ZN10S3681C2_nt3v10Ev
  virtual void  v11(); // _ZN10S3681C2_nt3v11Ev
  virtual void  v12(); // _ZN10S3681C2_nt3v12Ev
  virtual void  v13(); // _ZN10S3681C2_nt3v13Ev
  virtual void  v14(); // _ZN10S3681C2_nt3v14Ev
  virtual void  v15(); // _ZN10S3681C2_nt3v15Ev
  virtual void  v16(); // _ZN10S3681C2_nt3v16Ev
  virtual void  v17(); // _ZN10S3681C2_nt3v17Ev
  virtual void  v18(); // _ZN10S3681C2_nt3v18Ev
  virtual void  v19(); // _ZN10S3681C2_nt3v19Ev
  virtual void  v20(); // _ZN10S3681C2_nt3v20Ev
  virtual void  v21(); // _ZN10S3681C2_nt3v21Ev
  ~S3681C2_nt(); // tgen
  S3681C2_nt(); // tgen
};
//SIG(-1 S3681C2_nt) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


void  S3681C2_nt ::v10(){vfunc_called(this, "_ZN10S3681C2_nt3v10Ev");}
void  S3681C2_nt ::v11(){vfunc_called(this, "_ZN10S3681C2_nt3v11Ev");}
void  S3681C2_nt ::v12(){vfunc_called(this, "_ZN10S3681C2_nt3v12Ev");}
void  S3681C2_nt ::v13(){vfunc_called(this, "_ZN10S3681C2_nt3v13Ev");}
void  S3681C2_nt ::v14(){vfunc_called(this, "_ZN10S3681C2_nt3v14Ev");}
void  S3681C2_nt ::v15(){vfunc_called(this, "_ZN10S3681C2_nt3v15Ev");}
void  S3681C2_nt ::v16(){vfunc_called(this, "_ZN10S3681C2_nt3v16Ev");}
void  S3681C2_nt ::v17(){vfunc_called(this, "_ZN10S3681C2_nt3v17Ev");}
void  S3681C2_nt ::v18(){vfunc_called(this, "_ZN10S3681C2_nt3v18Ev");}
void  S3681C2_nt ::v19(){vfunc_called(this, "_ZN10S3681C2_nt3v19Ev");}
void  S3681C2_nt ::v20(){vfunc_called(this, "_ZN10S3681C2_nt3v20Ev");}
void  S3681C2_nt ::v21(){vfunc_called(this, "_ZN10S3681C2_nt3v21Ev");}
S3681C2_nt ::~S3681C2_nt(){ note_dtor("S3681C2_nt", this);} // tgen
S3681C2_nt ::S3681C2_nt(){ note_ctor("S3681C2_nt", this);} // tgen

//skip512 S3681C2_nt

#else // __cplusplus

extern void _ZN10S3681C2_ntC1Ev();
extern void _ZN10S3681C2_ntD1Ev();
Name_Map name_map_S3681C2_nt[] = {
  NSPAIR(_ZN10S3681C2_ntC1Ev),
  NSPAIR(_ZN10S3681C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3681C3_nt;
extern VTBL_ENTRY _ZTI10S3681C3_nt[];
extern  VTBL_ENTRY _ZTV10S3681C3_nt[];
static Base_Class bases_S3681C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3681C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3681C2_nt[];
extern void _ZN10S3681C2_ntD1Ev();
extern void _ZN10S3681C2_ntD0Ev();
extern void _ZN10S3681C2_nt3v10Ev();
extern void _ZN10S3681C2_nt3v11Ev();
extern void _ZN10S3681C2_nt3v12Ev();
extern void _ZN10S3681C2_nt3v13Ev();
extern void _ZN10S3681C2_nt3v14Ev();
extern void _ZN10S3681C2_nt3v15Ev();
extern void _ZN10S3681C2_nt3v16Ev();
extern void _ZN10S3681C2_nt3v17Ev();
extern void _ZN10S3681C2_nt3v18Ev();
extern void _ZN10S3681C2_nt3v19Ev();
extern void _ZN10S3681C2_nt3v20Ev();
extern void _ZN10S3681C2_nt3v21Ev();
static  VTBL_ENTRY vtc_S3681C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3681C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3681C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v21Ev,
};
extern VTBL_ENTRY _ZTI10S3681C2_nt[];
VTBL_ENTRY *P__ZTI10S3681C2_nt = _ZTI10S3681C2_nt; 
extern  VTBL_ENTRY _ZTV10S3681C2_nt[];
Class_Descriptor cd_S3681C2_nt = {  "S3681C2_nt", // class name
  bases_S3681C2_nt, 1,
  &(vtc_S3681C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3681C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3681C2_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3681C4  {
  virtual  ~S3681C4(); // _ZN7S3681C4D1Ev
  virtual void  v22(); // _ZN7S3681C43v22Ev
  virtual void  v23(); // _ZN7S3681C43v23Ev
  S3681C4(); // tgen
};
//SIG(-1 S3681C4) C1{ vd v1 v2}


 S3681C4 ::~S3681C4(){ note_dtor("S3681C4", this);}
void  S3681C4 ::v22(){vfunc_called(this, "_ZN7S3681C43v22Ev");}
void  S3681C4 ::v23(){vfunc_called(this, "_ZN7S3681C43v23Ev");}
S3681C4 ::S3681C4(){ note_ctor("S3681C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3681C4C1Ev();
extern void _ZN7S3681C4D1Ev();
Name_Map name_map_S3681C4[] = {
  NSPAIR(_ZN7S3681C4C1Ev),
  NSPAIR(_ZN7S3681C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3681C4[];
extern void _ZN7S3681C4D1Ev();
extern void _ZN7S3681C4D0Ev();
extern void _ZN7S3681C43v22Ev();
extern void _ZN7S3681C43v23Ev();
static  VTBL_ENTRY vtc_S3681C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3681C4[0]),
  (VTBL_ENTRY)&_ZN7S3681C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3681C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3681C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3681C43v23Ev,
};
extern VTBL_ENTRY _ZTI7S3681C4[];
extern  VTBL_ENTRY _ZTV7S3681C4[];
Class_Descriptor cd_S3681C4 = {  "S3681C4", // class name
  0,0,//no base classes
  &(vtc_S3681C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3681C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3681C4),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  S3681C6_nt  {
  void *s3681c6f0[2];
  void  mf3681c6(); // _ZN10S3681C6_nt8mf3681c6Ev
};
//SIG(-1 S3681C6_nt) C1{ m Fp[2]}


void  S3681C6_nt ::mf3681c6(){}

//skip512 S3681C6_nt

#else // __cplusplus

Class_Descriptor cd_S3681C6_nt = {  "S3681C6_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  S3681C12_nt  {
  void *s3681c12f0;
  int s3681c12f1;
  virtual  ~S3681C12_nt(); // _ZN11S3681C12_ntD1Ev
  virtual void  v25(); // _ZN11S3681C12_nt3v25Ev
  virtual void  v26(); // _ZN11S3681C12_nt3v26Ev
  virtual void  v27(); // _ZN11S3681C12_nt3v27Ev
  S3681C12_nt(); // tgen
};
//SIG(-1 S3681C12_nt) C1{ vd v1 v2 v3 Fp Fi}


 S3681C12_nt ::~S3681C12_nt(){ note_dtor("S3681C12_nt", this);}
void  S3681C12_nt ::v25(){vfunc_called(this, "_ZN11S3681C12_nt3v25Ev");}
void  S3681C12_nt ::v26(){vfunc_called(this, "_ZN11S3681C12_nt3v26Ev");}
void  S3681C12_nt ::v27(){vfunc_called(this, "_ZN11S3681C12_nt3v27Ev");}
S3681C12_nt ::S3681C12_nt(){ note_ctor("S3681C12_nt", this);} // tgen

//skip512 S3681C12_nt

#else // __cplusplus

extern void _ZN11S3681C12_ntC1Ev();
extern void _ZN11S3681C12_ntD1Ev();
Name_Map name_map_S3681C12_nt[] = {
  NSPAIR(_ZN11S3681C12_ntC1Ev),
  NSPAIR(_ZN11S3681C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3681C12_nt[];
extern void _ZN11S3681C12_ntD1Ev();
extern void _ZN11S3681C12_ntD0Ev();
extern void _ZN11S3681C12_nt3v25Ev();
extern void _ZN11S3681C12_nt3v26Ev();
extern void _ZN11S3681C12_nt3v27Ev();
static  VTBL_ENTRY vtc_S3681C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3681C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S3681C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3681C12_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3681C12_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S3681C12_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S3681C12_nt3v27Ev,
};
extern VTBL_ENTRY _ZTI11S3681C12_nt[];
VTBL_ENTRY *P__ZTI11S3681C12_nt = _ZTI11S3681C12_nt; 
extern  VTBL_ENTRY _ZTV11S3681C12_nt[];
Class_Descriptor cd_S3681C12_nt = {  "S3681C12_nt", // class name
  0,0,//no base classes
  &(vtc_S3681C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI11S3681C12_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3681C12_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3681C11  : S3681C12_nt {
  virtual void  v24(); // _ZN8S3681C113v24Ev
  ~S3681C11(); // tgen
  S3681C11(); // tgen
};
//SIG(-1 S3681C11) C1{ BC2{ vd v2 v3 v4 Fp Fi} v1}


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

static void Test_S3681C11()
{
  extern Class_Descriptor cd_S3681C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3681C11, buf);
    S3681C11 *dp, &lv = *(dp=new (buf) S3681C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3681C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3681C11)");
    check_base_class_offset(lv, (S3681C12_nt*), 0, "S3681C11");
    test_class_info(&lv, &cd_S3681C11);
    dp->~S3681C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3681C11(Test_S3681C11, "S3681C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S3681C11C1Ev();
extern void _ZN8S3681C11D1Ev();
Name_Map name_map_S3681C11[] = {
  NSPAIR(_ZN8S3681C11C1Ev),
  NSPAIR(_ZN8S3681C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3681C12_nt;
extern VTBL_ENTRY _ZTI11S3681C12_nt[];
extern  VTBL_ENTRY _ZTV11S3681C12_nt[];
static Base_Class bases_S3681C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3681C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3681C11[];
extern void _ZN8S3681C11D1Ev();
extern void _ZN8S3681C11D0Ev();
extern void _ZN11S3681C12_nt3v25Ev();
extern void _ZN11S3681C12_nt3v26Ev();
extern void _ZN11S3681C12_nt3v27Ev();
extern void _ZN8S3681C113v24Ev();
static  VTBL_ENTRY vtc_S3681C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3681C11[0]),
  (VTBL_ENTRY)&_ZN8S3681C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3681C11D0Ev,
  (VTBL_ENTRY)&_ZN11S3681C12_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S3681C12_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S3681C12_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S3681C113v24Ev,
};
extern VTBL_ENTRY _ZTI8S3681C11[];
extern  VTBL_ENTRY _ZTV8S3681C11[];
Class_Descriptor cd_S3681C11 = {  "S3681C11", // class name
  bases_S3681C11, 1,
  &(vtc_S3681C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S3681C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3681C11),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  S3681C1  : S3681C2_nt , S3681C4 {
  ::S708C36_nt s3681c1f0;
  void *s3681c1f1;
  char s3681c1f2;
  void *s3681c1f3;
  int s3681c1f4[2];
  ::S3681C6_nt s3681c1f5;
  int s3681c1f6[3];
  char s3681c1f7[2];
  ::S2123C37 s3681c1f8;
  ::S2123C29_nt s3681c1f9;
  ::S2123C29_nt s3681c1f10;
  ::S3681C11 s3681c1f11;
  virtual  ~S3681C1(); // _ZN7S3681C1D1Ev
  virtual void  v1(); // _ZN7S3681C12v1Ev
  virtual void  v2(); // _ZN7S3681C12v2Ev
  virtual void  v3(); // _ZN7S3681C12v3Ev
  virtual void  v4(); // _ZN7S3681C12v4Ev
  virtual void  v5(); // _ZN7S3681C12v5Ev
  virtual void  v6(); // _ZN7S3681C12v6Ev
  virtual void  v7(); // _ZN7S3681C12v7Ev
  virtual void  v8(); // _ZN7S3681C12v8Ev
  virtual void  v9(); // _ZN7S3681C12v9Ev
  S3681C1(); // tgen
};
//SIG(1 S3681C1) C1{ BC2{ BC3{ vd m Fi} v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21} BC4{ vd v22 v23} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC5{ m Fp[2]} Fp Fc Fp Fi[2] FC6{ m Fp[2]} Fi[3] Fc[2] FC7{ m Fp Fi[2] FC8{ m}} FC9{ m Fp Fi[2] FC8} FC9 FC10{ BC11{ vd v25 v26 v27 Fp Fi} v24}}


 S3681C1 ::~S3681C1(){ note_dtor("S3681C1", this);}
void  S3681C1 ::v1(){vfunc_called(this, "_ZN7S3681C12v1Ev");}
void  S3681C1 ::v2(){vfunc_called(this, "_ZN7S3681C12v2Ev");}
void  S3681C1 ::v3(){vfunc_called(this, "_ZN7S3681C12v3Ev");}
void  S3681C1 ::v4(){vfunc_called(this, "_ZN7S3681C12v4Ev");}
void  S3681C1 ::v5(){vfunc_called(this, "_ZN7S3681C12v5Ev");}
void  S3681C1 ::v6(){vfunc_called(this, "_ZN7S3681C12v6Ev");}
void  S3681C1 ::v7(){vfunc_called(this, "_ZN7S3681C12v7Ev");}
void  S3681C1 ::v8(){vfunc_called(this, "_ZN7S3681C12v8Ev");}
void  S3681C1 ::v9(){vfunc_called(this, "_ZN7S3681C12v9Ev");}
S3681C1 ::S3681C1(){ note_ctor("S3681C1", this);} // tgen

static void Test_S3681C1()
{
  extern Class_Descriptor cd_S3681C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,32)];
    init_test(&cd_S3681C1, buf);
    S3681C1 *dp, &lv = *(dp=new (buf) S3681C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,124), "sizeof(S3681C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3681C1)");
    check_base_class_offset(lv, (S3681C3_nt*)(S3681C2_nt*), 0, "S3681C1");
    check_base_class_offset(lv, (S3681C2_nt*), 0, "S3681C1");
    check_base_class_offset(lv, (S3681C4*), ABISELECT(16,8), "S3681C1");
    check_field_offset(lv, s3681c1f0, ABISELECT(24,12), "S3681C1.s3681c1f0");
    check_field_offset(lv, s3681c1f1, ABISELECT(40,20), "S3681C1.s3681c1f1");
    check_field_offset(lv, s3681c1f2, ABISELECT(48,24), "S3681C1.s3681c1f2");
    check_field_offset(lv, s3681c1f3, ABISELECT(56,28), "S3681C1.s3681c1f3");
    check_field_offset(lv, s3681c1f4, ABISELECT(64,32), "S3681C1.s3681c1f4");
    check_field_offset(lv, s3681c1f5, ABISELECT(72,40), "S3681C1.s3681c1f5");
    check_field_offset(lv, s3681c1f6, ABISELECT(88,48), "S3681C1.s3681c1f6");
    check_field_offset(lv, s3681c1f7, ABISELECT(100,60), "S3681C1.s3681c1f7");
    check_field_offset(lv, s3681c1f8, ABISELECT(104,64), "S3681C1.s3681c1f8");
    check_field_offset(lv, s3681c1f9, ABISELECT(128,80), "S3681C1.s3681c1f9");
    check_field_offset(lv, s3681c1f10, ABISELECT(152,96), "S3681C1.s3681c1f10");
    check_field_offset(lv, s3681c1f11, ABISELECT(176,112), "S3681C1.s3681c1f11");
    test_class_info(&lv, &cd_S3681C1);
    dp->~S3681C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3681C1(Test_S3681C1, "S3681C1", ABISELECT(200,124));

#else // __cplusplus

extern void _ZN7S3681C1C1Ev();
extern void _ZN7S3681C1D1Ev();
Name_Map name_map_S3681C1[] = {
  NSPAIR(_ZN7S3681C1C1Ev),
  NSPAIR(_ZN7S3681C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3681C3_nt;
extern VTBL_ENTRY _ZTI10S3681C3_nt[];
extern  VTBL_ENTRY _ZTV10S3681C3_nt[];
extern Class_Descriptor cd_S3681C2_nt;
extern VTBL_ENTRY _ZTI10S3681C2_nt[];
extern  VTBL_ENTRY _ZTV10S3681C2_nt[];
extern Class_Descriptor cd_S3681C4;
extern VTBL_ENTRY _ZTI7S3681C4[];
extern  VTBL_ENTRY _ZTV7S3681C4[];
static Base_Class bases_S3681C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3681C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3681C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3681C4,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3681C1[];
extern void _ZN7S3681C1D1Ev();
extern void _ZN7S3681C1D0Ev();
extern void _ZN10S3681C2_nt3v10Ev();
extern void _ZN10S3681C2_nt3v11Ev();
extern void _ZN10S3681C2_nt3v12Ev();
extern void _ZN10S3681C2_nt3v13Ev();
extern void _ZN10S3681C2_nt3v14Ev();
extern void _ZN10S3681C2_nt3v15Ev();
extern void _ZN10S3681C2_nt3v16Ev();
extern void _ZN10S3681C2_nt3v17Ev();
extern void _ZN10S3681C2_nt3v18Ev();
extern void _ZN10S3681C2_nt3v19Ev();
extern void _ZN10S3681C2_nt3v20Ev();
extern void _ZN10S3681C2_nt3v21Ev();
extern void _ZN7S3681C12v1Ev();
extern void _ZN7S3681C12v2Ev();
extern void _ZN7S3681C12v3Ev();
extern void _ZN7S3681C12v4Ev();
extern void _ZN7S3681C12v5Ev();
extern void _ZN7S3681C12v6Ev();
extern void _ZN7S3681C12v7Ev();
extern void _ZN7S3681C12v8Ev();
extern void _ZN7S3681C12v9Ev();
extern void ABISELECT(_ZThn16_N7S3681C1D1Ev,_ZThn8_N7S3681C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3681C1D0Ev,_ZThn8_N7S3681C1D0Ev)();
extern void _ZN7S3681C43v22Ev();
extern void _ZN7S3681C43v23Ev();
static  VTBL_ENTRY vtc_S3681C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3681C1[0]),
  (VTBL_ENTRY)&_ZN7S3681C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3681C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3681C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3681C12v9Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3681C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3681C1D1Ev,_ZThn8_N7S3681C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3681C1D0Ev,_ZThn8_N7S3681C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3681C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3681C43v23Ev,
};
extern VTBL_ENTRY _ZTI7S3681C1[];
extern  VTBL_ENTRY _ZTV7S3681C1[];
Class_Descriptor cd_S3681C1 = {  "S3681C1", // class name
  bases_S3681C1, 3,
  &(vtc_S3681C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,124), // object size
  NSPAIRA(_ZTI7S3681C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3681C1),31, //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  S5101C3_nt  {
  ::S2123C20_nt s5101c3f0;
  int s5101c3f1[2];
  char s5101c3f2;
  virtual  ~S5101C3_nt(); // _ZN10S5101C3_ntD1Ev
  virtual void  v4(); // _ZN10S5101C3_nt2v4Ev
  virtual void  v5(); // _ZN10S5101C3_nt2v5Ev
  virtual void  v6(); // _ZN10S5101C3_nt2v6Ev
  S5101C3_nt(); // tgen
};
//SIG(-1 S5101C3_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5101C3_nt ::~S5101C3_nt(){ note_dtor("S5101C3_nt", this);}
void  S5101C3_nt ::v4(){vfunc_called(this, "_ZN10S5101C3_nt2v4Ev");}
void  S5101C3_nt ::v5(){vfunc_called(this, "_ZN10S5101C3_nt2v5Ev");}
void  S5101C3_nt ::v6(){vfunc_called(this, "_ZN10S5101C3_nt2v6Ev");}
S5101C3_nt ::S5101C3_nt(){ note_ctor("S5101C3_nt", this);} // tgen

//skip512 S5101C3_nt

#else // __cplusplus

extern void _ZN10S5101C3_ntC1Ev();
extern void _ZN10S5101C3_ntD1Ev();
Name_Map name_map_S5101C3_nt[] = {
  NSPAIR(_ZN10S5101C3_ntC1Ev),
  NSPAIR(_ZN10S5101C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5101C3_nt[];
extern void _ZN10S5101C3_ntD1Ev();
extern void _ZN10S5101C3_ntD0Ev();
extern void _ZN10S5101C3_nt2v4Ev();
extern void _ZN10S5101C3_nt2v5Ev();
extern void _ZN10S5101C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S5101C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5101C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5101C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S5101C3_nt[];
VTBL_ENTRY *P__ZTI10S5101C3_nt = _ZTI10S5101C3_nt; 
extern  VTBL_ENTRY _ZTV10S5101C3_nt[];
Class_Descriptor cd_S5101C3_nt = {  "S5101C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5101C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S5101C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5101C3_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  S5101C2  : S5101C3_nt {
  int s5101c2f0;
  char s5101c2f1[2];
  ::S2123C20_nt s5101c2f2;
  virtual  ~S5101C2(); // _ZN7S5101C2D1Ev
  virtual void  v7(); // _ZN7S5101C22v7Ev
  virtual void  v8(); // _ZN7S5101C22v8Ev
  S5101C2(); // tgen
};
//SIG(-1 S5101C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi Fc[2] FC3}


 S5101C2 ::~S5101C2(){ note_dtor("S5101C2", this);}
void  S5101C2 ::v7(){vfunc_called(this, "_ZN7S5101C22v7Ev");}
void  S5101C2 ::v8(){vfunc_called(this, "_ZN7S5101C22v8Ev");}
S5101C2 ::S5101C2(){ note_ctor("S5101C2", this);} // tgen

static void Test_S5101C2()
{
  extern Class_Descriptor cd_S5101C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S5101C2, buf);
    S5101C2 *dp, &lv = *(dp=new (buf) S5101C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S5101C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5101C2)");
    check_base_class_offset(lv, (S5101C3_nt*), 0, "S5101C2");
    check_field_offset(lv, s5101c2f0, ABISELECT(36,28), "S5101C2.s5101c2f0");
    check_field_offset(lv, s5101c2f1, ABISELECT(40,32), "S5101C2.s5101c2f1");
    check_field_offset(lv, s5101c2f2, ABISELECT(48,36), "S5101C2.s5101c2f2");
    test_class_info(&lv, &cd_S5101C2);
    dp->~S5101C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5101C2(Test_S5101C2, "S5101C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S5101C2C1Ev();
extern void _ZN7S5101C2D1Ev();
Name_Map name_map_S5101C2[] = {
  NSPAIR(_ZN7S5101C2C1Ev),
  NSPAIR(_ZN7S5101C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5101C3_nt;
extern VTBL_ENTRY _ZTI10S5101C3_nt[];
extern  VTBL_ENTRY _ZTV10S5101C3_nt[];
static Base_Class bases_S5101C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5101C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5101C2[];
extern void _ZN7S5101C2D1Ev();
extern void _ZN7S5101C2D0Ev();
extern void _ZN10S5101C3_nt2v4Ev();
extern void _ZN10S5101C3_nt2v5Ev();
extern void _ZN10S5101C3_nt2v6Ev();
extern void _ZN7S5101C22v7Ev();
extern void _ZN7S5101C22v8Ev();
static  VTBL_ENTRY vtc_S5101C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5101C2[0]),
  (VTBL_ENTRY)&_ZN7S5101C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5101C2D0Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S5101C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5101C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5101C2[];
extern  VTBL_ENTRY _ZTV7S5101C2[];
Class_Descriptor cd_S5101C2 = {  "S5101C2", // class name
  bases_S5101C2, 1,
  &(vtc_S5101C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S5101C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5101C2),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  S5101C6_nt  {
  void *s5101c6f0[2];
  int s5101c6f1[2];
  __tsi64 s5101c6f2;
  char s5101c6f3[193];
};
//SIG(-1 S5101C6_nt) C1{ Fp[2] Fi[2] FL Fc[193]}



//skip512 S5101C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5101C8_nt  {
  int s5101c8f0;
  char s5101c8f1[331];
  int s5101c8f2[2];
  char s5101c8f3;
  int s5101c8f4;
  char s5101c8f5[812];
  int s5101c8f6[5];
  char s5101c8f7;
};
//SIG(-1 S5101C8_nt) C1{ Fi Fc[331] Fi[2] Fc Fi Fc[812] Fi[5] Fc}



//skip512 S5101C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5101C9_nt  {
  int s5101c9f0[2];
  char s5101c9f1[271];
  __tsi64 s5101c9f2;
  char s5101c9f3[193];
  int s5101c9f4;
  char s5101c9f5[65];
  int s5101c9f6[2];
  char s5101c9f7[96];
  __tsi64 s5101c9f8;
  char s5101c9f9[68];
};
//SIG(-1 S5101C9_nt) C1{ Fi[2] Fc[271] FL Fc[193] Fi Fc[65] Fi[2] Fc[96] FL Fc[68]}



//skip512 S5101C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5101C1  : S5101C2 {
  void *s5101c1f0;
  ::S5101C6_nt s5101c1f1;
  ::S21777C11_nt s5101c1f2;
  void *s5101c1f3;
  __tsi64 s5101c1f4;
  ::S5101C8_nt s5101c1f5;
  ::S5101C9_nt s5101c1f6;
  char s5101c1f7[3];
  virtual  ~S5101C1(); // _ZN7S5101C1D1Ev
  virtual void  v1(); // _ZN7S5101C12v1Ev
  virtual void  v2(); // _ZN7S5101C12v2Ev
  virtual void  v3(); // _ZN7S5101C12v3Ev
  S5101C1(); // tgen
};
//SIG(1 S5101C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 Fi Fc[2] FC4} vd v1 v2 v3 Fp FC6{ Fp[2] Fi[2] FL Fc[193]} FC7{ m Fp} Fp FL FC8{ Fi Fc[331] Fi[2] Fc Fi Fc[812] Fi[5] Fc} FC9{ Fi[2] Fc[271] FL Fc[193] Fi Fc[65] Fi[2] Fc[96] FL Fc[68]} Fc[3]}


 S5101C1 ::~S5101C1(){ note_dtor("S5101C1", this);}
void  S5101C1 ::v1(){vfunc_called(this, "_ZN7S5101C12v1Ev");}
void  S5101C1 ::v2(){vfunc_called(this, "_ZN7S5101C12v2Ev");}
void  S5101C1 ::v3(){vfunc_called(this, "_ZN7S5101C12v3Ev");}
S5101C1 ::S5101C1(){ note_ctor("S5101C1", this);} // tgen

static void Test_S5101C1()
{
  extern Class_Descriptor cd_S5101C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(285,555)];
    init_test(&cd_S5101C1, buf);
    S5101C1 *dp, &lv = *(dp=new (buf) S5101C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2272,2216), "sizeof(S5101C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5101C1)");
    check_base_class_offset(lv, (S5101C3_nt*)(S5101C2*), 0, "S5101C1");
    check_base_class_offset(lv, (S5101C2*), 0, "S5101C1");
    check_field_offset(lv, s5101c1f0, ABISELECT(64,48), "S5101C1.s5101c1f0");
    check_field_offset(lv, s5101c1f1, ABISELECT(72,52), "S5101C1.s5101c1f1");
    check_field_offset(lv, s5101c1f2, ABISELECT(304,272), "S5101C1.s5101c1f2");
    check_field_offset(lv, s5101c1f3, ABISELECT(312,276), "S5101C1.s5101c1f3");
    check_field_offset(lv, s5101c1f4, ABISELECT(320,280), "S5101C1.s5101c1f4");
    check_field_offset(lv, s5101c1f5, ABISELECT(328,288), "S5101C1.s5101c1f5");
    check_field_offset(lv, s5101c1f6, ABISELECT(1520,1476), "S5101C1.s5101c1f6");
    check_field_offset(lv, s5101c1f7, ABISELECT(2264,2212), "S5101C1.s5101c1f7");
    test_class_info(&lv, &cd_S5101C1);
    dp->~S5101C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5101C1(Test_S5101C1, "S5101C1", ABISELECT(2272,2216));

#else // __cplusplus

extern void _ZN7S5101C1C1Ev();
extern void _ZN7S5101C1D1Ev();
Name_Map name_map_S5101C1[] = {
  NSPAIR(_ZN7S5101C1C1Ev),
  NSPAIR(_ZN7S5101C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5101C3_nt;
extern VTBL_ENTRY _ZTI10S5101C3_nt[];
extern  VTBL_ENTRY _ZTV10S5101C3_nt[];
extern Class_Descriptor cd_S5101C2;
extern VTBL_ENTRY _ZTI7S5101C2[];
extern  VTBL_ENTRY _ZTV7S5101C2[];
static Base_Class bases_S5101C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5101C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5101C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5101C1[];
extern void _ZN7S5101C1D1Ev();
extern void _ZN7S5101C1D0Ev();
extern void _ZN10S5101C3_nt2v4Ev();
extern void _ZN10S5101C3_nt2v5Ev();
extern void _ZN10S5101C3_nt2v6Ev();
extern void _ZN7S5101C22v7Ev();
extern void _ZN7S5101C22v8Ev();
extern void _ZN7S5101C12v1Ev();
extern void _ZN7S5101C12v2Ev();
extern void _ZN7S5101C12v3Ev();
static  VTBL_ENTRY vtc_S5101C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5101C1[0]),
  (VTBL_ENTRY)&_ZN7S5101C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5101C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5101C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S5101C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5101C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5101C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5101C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5101C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5101C1[];
extern  VTBL_ENTRY _ZTV7S5101C1[];
Class_Descriptor cd_S5101C1 = {  "S5101C1", // class name
  bases_S5101C1, 2,
  &(vtc_S5101C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2272,2216), // object size
  NSPAIRA(_ZTI7S5101C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5101C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4233C3  {
  virtual  ~S4233C3(); // _ZN7S4233C3D1Ev
  virtual void  v11(); // _ZN7S4233C33v11Ev
  virtual void  v12(); // _ZN7S4233C33v12Ev
  virtual void  v13(); // _ZN7S4233C33v13Ev
  virtual void  v14(); // _ZN7S4233C33v14Ev
  virtual void  v15(); // _ZN7S4233C33v15Ev
  virtual void  v16(); // _ZN7S4233C33v16Ev
  virtual void  v17(); // _ZN7S4233C33v17Ev
  virtual void  v18(); // _ZN7S4233C33v18Ev
  virtual void  v19(); // _ZN7S4233C33v19Ev
  virtual void  v20(); // _ZN7S4233C33v20Ev
  virtual void  v21(); // _ZN7S4233C33v21Ev
  virtual void  v22(); // _ZN7S4233C33v22Ev
  virtual void  v23(); // _ZN7S4233C33v23Ev
  virtual void  v24(); // _ZN7S4233C33v24Ev
  virtual void  v25(); // _ZN7S4233C33v25Ev
  virtual void  v26(); // _ZN7S4233C33v26Ev
  virtual void  v27(); // _ZN7S4233C33v27Ev
  virtual void  v28(); // _ZN7S4233C33v28Ev
  virtual void  v29(); // _ZN7S4233C33v29Ev
  virtual void  v30(); // _ZN7S4233C33v30Ev
  virtual void  v31(); // _ZN7S4233C33v31Ev
  virtual void  v32(); // _ZN7S4233C33v32Ev
  virtual void  v33(); // _ZN7S4233C33v33Ev
  virtual void  v34(); // _ZN7S4233C33v34Ev
  virtual void  v35(); // _ZN7S4233C33v35Ev
  virtual void  v36(); // _ZN7S4233C33v36Ev
  S4233C3(); // tgen
};
//SIG(-1 S4233C3) 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}


 S4233C3 ::~S4233C3(){ note_dtor("S4233C3", this);}
void  S4233C3 ::v11(){vfunc_called(this, "_ZN7S4233C33v11Ev");}
void  S4233C3 ::v12(){vfunc_called(this, "_ZN7S4233C33v12Ev");}
void  S4233C3 ::v13(){vfunc_called(this, "_ZN7S4233C33v13Ev");}
void  S4233C3 ::v14(){vfunc_called(this, "_ZN7S4233C33v14Ev");}
void  S4233C3 ::v15(){vfunc_called(this, "_ZN7S4233C33v15Ev");}
void  S4233C3 ::v16(){vfunc_called(this, "_ZN7S4233C33v16Ev");}
void  S4233C3 ::v17(){vfunc_called(this, "_ZN7S4233C33v17Ev");}
void  S4233C3 ::v18(){vfunc_called(this, "_ZN7S4233C33v18Ev");}
void  S4233C3 ::v19(){vfunc_called(this, "_ZN7S4233C33v19Ev");}
void  S4233C3 ::v20(){vfunc_called(this, "_ZN7S4233C33v20Ev");}
void  S4233C3 ::v21(){vfunc_called(this, "_ZN7S4233C33v21Ev");}
void  S4233C3 ::v22(){vfunc_called(this, "_ZN7S4233C33v22Ev");}
void  S4233C3 ::v23(){vfunc_called(this, "_ZN7S4233C33v23Ev");}
void  S4233C3 ::v24(){vfunc_called(this, "_ZN7S4233C33v24Ev");}
void  S4233C3 ::v25(){vfunc_called(this, "_ZN7S4233C33v25Ev");}
void  S4233C3 ::v26(){vfunc_called(this, "_ZN7S4233C33v26Ev");}
void  S4233C3 ::v27(){vfunc_called(this, "_ZN7S4233C33v27Ev");}
void  S4233C3 ::v28(){vfunc_called(this, "_ZN7S4233C33v28Ev");}
void  S4233C3 ::v29(){vfunc_called(this, "_ZN7S4233C33v29Ev");}
void  S4233C3 ::v30(){vfunc_called(this, "_ZN7S4233C33v30Ev");}
void  S4233C3 ::v31(){vfunc_called(this, "_ZN7S4233C33v31Ev");}
void  S4233C3 ::v32(){vfunc_called(this, "_ZN7S4233C33v32Ev");}
void  S4233C3 ::v33(){vfunc_called(this, "_ZN7S4233C33v33Ev");}
void  S4233C3 ::v34(){vfunc_called(this, "_ZN7S4233C33v34Ev");}
void  S4233C3 ::v35(){vfunc_called(this, "_ZN7S4233C33v35Ev");}
void  S4233C3 ::v36(){vfunc_called(this, "_ZN7S4233C33v36Ev");}
S4233C3 ::S4233C3(){ note_ctor("S4233C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4233C3C1Ev();
extern void _ZN7S4233C3D1Ev();
Name_Map name_map_S4233C3[] = {
  NSPAIR(_ZN7S4233C3C1Ev),
  NSPAIR(_ZN7S4233C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4233C3[];
extern void _ZN7S4233C3D1Ev();
extern void _ZN7S4233C3D0Ev();
extern void _ZN7S4233C33v11Ev();
extern void _ZN7S4233C33v12Ev();
extern void _ZN7S4233C33v13Ev();
extern void _ZN7S4233C33v14Ev();
extern void _ZN7S4233C33v15Ev();
extern void _ZN7S4233C33v16Ev();
extern void _ZN7S4233C33v17Ev();
extern void _ZN7S4233C33v18Ev();
extern void _ZN7S4233C33v19Ev();
extern void _ZN7S4233C33v20Ev();
extern void _ZN7S4233C33v21Ev();
extern void _ZN7S4233C33v22Ev();
extern void _ZN7S4233C33v23Ev();
extern void _ZN7S4233C33v24Ev();
extern void _ZN7S4233C33v25Ev();
extern void _ZN7S4233C33v26Ev();
extern void _ZN7S4233C33v27Ev();
extern void _ZN7S4233C33v28Ev();
extern void _ZN7S4233C33v29Ev();
extern void _ZN7S4233C33v30Ev();
extern void _ZN7S4233C33v31Ev();
extern void _ZN7S4233C33v32Ev();
extern void _ZN7S4233C33v33Ev();
extern void _ZN7S4233C33v34Ev();
extern void _ZN7S4233C33v35Ev();
extern void _ZN7S4233C33v36Ev();
static  VTBL_ENTRY vtc_S4233C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4233C3[0]),
  (VTBL_ENTRY)&_ZN7S4233C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4233C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v36Ev,
};
extern VTBL_ENTRY _ZTI7S4233C3[];
extern  VTBL_ENTRY _ZTV7S4233C3[];
Class_Descriptor cd_S4233C3 = {  "S4233C3", // class name
  0,0,//no base classes
  &(vtc_S4233C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4233C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4233C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4233C2  : S4233C3 {
  virtual void  v37(); // _ZN7S4233C23v37Ev
  virtual void  v38(); // _ZN7S4233C23v38Ev
  virtual void  v39(); // _ZN7S4233C23v39Ev
  virtual void  v40(); // _ZN7S4233C23v40Ev
  virtual void  v41(); // _ZN7S4233C23v41Ev
  virtual void  v42(); // _ZN7S4233C23v42Ev
  virtual void  v43(); // _ZN7S4233C23v43Ev
  virtual void  v44(); // _ZN7S4233C23v44Ev
  virtual void  v45(); // _ZN7S4233C23v45Ev
  virtual void  v46(); // _ZN7S4233C23v46Ev
  virtual void  v47(); // _ZN7S4233C23v47Ev
  virtual void  v48(); // _ZN7S4233C23v48Ev
  virtual void  v49(); // _ZN7S4233C23v49Ev
  virtual void  v50(); // _ZN7S4233C23v50Ev
  virtual void  v51(); // _ZN7S4233C23v51Ev
  virtual void  v52(); // _ZN7S4233C23v52Ev
  virtual void  v53(); // _ZN7S4233C23v53Ev
  virtual void  v54(); // _ZN7S4233C23v54Ev
  virtual void  v55(); // _ZN7S4233C23v55Ev
  virtual void  v56(); // _ZN7S4233C23v56Ev
  virtual void  v57(); // _ZN7S4233C23v57Ev
  virtual void  v58(); // _ZN7S4233C23v58Ev
  virtual void  v59(); // _ZN7S4233C23v59Ev
  ~S4233C2(); // tgen
  S4233C2(); // tgen
};
//SIG(-1 S4233C2) C1{ BC2{ vd 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23}


void  S4233C2 ::v37(){vfunc_called(this, "_ZN7S4233C23v37Ev");}
void  S4233C2 ::v38(){vfunc_called(this, "_ZN7S4233C23v38Ev");}
void  S4233C2 ::v39(){vfunc_called(this, "_ZN7S4233C23v39Ev");}
void  S4233C2 ::v40(){vfunc_called(this, "_ZN7S4233C23v40Ev");}
void  S4233C2 ::v41(){vfunc_called(this, "_ZN7S4233C23v41Ev");}
void  S4233C2 ::v42(){vfunc_called(this, "_ZN7S4233C23v42Ev");}
void  S4233C2 ::v43(){vfunc_called(this, "_ZN7S4233C23v43Ev");}
void  S4233C2 ::v44(){vfunc_called(this, "_ZN7S4233C23v44Ev");}
void  S4233C2 ::v45(){vfunc_called(this, "_ZN7S4233C23v45Ev");}
void  S4233C2 ::v46(){vfunc_called(this, "_ZN7S4233C23v46Ev");}
void  S4233C2 ::v47(){vfunc_called(this, "_ZN7S4233C23v47Ev");}
void  S4233C2 ::v48(){vfunc_called(this, "_ZN7S4233C23v48Ev");}
void  S4233C2 ::v49(){vfunc_called(this, "_ZN7S4233C23v49Ev");}
void  S4233C2 ::v50(){vfunc_called(this, "_ZN7S4233C23v50Ev");}
void  S4233C2 ::v51(){vfunc_called(this, "_ZN7S4233C23v51Ev");}
void  S4233C2 ::v52(){vfunc_called(this, "_ZN7S4233C23v52Ev");}
void  S4233C2 ::v53(){vfunc_called(this, "_ZN7S4233C23v53Ev");}
void  S4233C2 ::v54(){vfunc_called(this, "_ZN7S4233C23v54Ev");}
void  S4233C2 ::v55(){vfunc_called(this, "_ZN7S4233C23v55Ev");}
void  S4233C2 ::v56(){vfunc_called(this, "_ZN7S4233C23v56Ev");}
void  S4233C2 ::v57(){vfunc_called(this, "_ZN7S4233C23v57Ev");}
void  S4233C2 ::v58(){vfunc_called(this, "_ZN7S4233C23v58Ev");}
void  S4233C2 ::v59(){vfunc_called(this, "_ZN7S4233C23v59Ev");}
S4233C2 ::~S4233C2(){ note_dtor("S4233C2", this);} // tgen
S4233C2 ::S4233C2(){ note_ctor("S4233C2", this);} // tgen

static void Test_S4233C2()
{
  extern Class_Descriptor cd_S4233C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4233C2, buf);
    S4233C2 *dp, &lv = *(dp=new (buf) S4233C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4233C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4233C2)");
    check_base_class_offset(lv, (S4233C3*), 0, "S4233C2");
    test_class_info(&lv, &cd_S4233C2);
    dp->~S4233C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4233C2(Test_S4233C2, "S4233C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4233C2C1Ev();
extern void _ZN7S4233C2D1Ev();
Name_Map name_map_S4233C2[] = {
  NSPAIR(_ZN7S4233C2C1Ev),
  NSPAIR(_ZN7S4233C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4233C3;
extern VTBL_ENTRY _ZTI7S4233C3[];
extern  VTBL_ENTRY _ZTV7S4233C3[];
static Base_Class bases_S4233C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4233C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4233C2[];
extern void _ZN7S4233C2D1Ev();
extern void _ZN7S4233C2D0Ev();
extern void _ZN7S4233C33v11Ev();
extern void _ZN7S4233C33v12Ev();
extern void _ZN7S4233C33v13Ev();
extern void _ZN7S4233C33v14Ev();
extern void _ZN7S4233C33v15Ev();
extern void _ZN7S4233C33v16Ev();
extern void _ZN7S4233C33v17Ev();
extern void _ZN7S4233C33v18Ev();
extern void _ZN7S4233C33v19Ev();
extern void _ZN7S4233C33v20Ev();
extern void _ZN7S4233C33v21Ev();
extern void _ZN7S4233C33v22Ev();
extern void _ZN7S4233C33v23Ev();
extern void _ZN7S4233C33v24Ev();
extern void _ZN7S4233C33v25Ev();
extern void _ZN7S4233C33v26Ev();
extern void _ZN7S4233C33v27Ev();
extern void _ZN7S4233C33v28Ev();
extern void _ZN7S4233C33v29Ev();
extern void _ZN7S4233C33v30Ev();
extern void _ZN7S4233C33v31Ev();
extern void _ZN7S4233C33v32Ev();
extern void _ZN7S4233C33v33Ev();
extern void _ZN7S4233C33v34Ev();
extern void _ZN7S4233C33v35Ev();
extern void _ZN7S4233C33v36Ev();
extern void _ZN7S4233C23v37Ev();
extern void _ZN7S4233C23v38Ev();
extern void _ZN7S4233C23v39Ev();
extern void _ZN7S4233C23v40Ev();
extern void _ZN7S4233C23v41Ev();
extern void _ZN7S4233C23v42Ev();
extern void _ZN7S4233C23v43Ev();
extern void _ZN7S4233C23v44Ev();
extern void _ZN7S4233C23v45Ev();
extern void _ZN7S4233C23v46Ev();
extern void _ZN7S4233C23v47Ev();
extern void _ZN7S4233C23v48Ev();
extern void _ZN7S4233C23v49Ev();
extern void _ZN7S4233C23v50Ev();
extern void _ZN7S4233C23v51Ev();
extern void _ZN7S4233C23v52Ev();
extern void _ZN7S4233C23v53Ev();
extern void _ZN7S4233C23v54Ev();
extern void _ZN7S4233C23v55Ev();
extern void _ZN7S4233C23v56Ev();
extern void _ZN7S4233C23v57Ev();
extern void _ZN7S4233C23v58Ev();
extern void _ZN7S4233C23v59Ev();
static  VTBL_ENTRY vtc_S4233C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4233C2[0]),
  (VTBL_ENTRY)&_ZN7S4233C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4233C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v59Ev,
};
extern VTBL_ENTRY _ZTI7S4233C2[];
extern  VTBL_ENTRY _ZTV7S4233C2[];
Class_Descriptor cd_S4233C2 = {  "S4233C2", // class name
  bases_S4233C2, 1,
  &(vtc_S4233C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4233C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4233C2),53, //virtual function table var
  2, // 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  S4233C1  : S4233C2 {
  virtual void  v1(); // _ZN7S4233C12v1Ev
  virtual void  v2(); // _ZN7S4233C12v2Ev
  virtual void  v3(); // _ZN7S4233C12v3Ev
  virtual void  v4(); // _ZN7S4233C12v4Ev
  virtual void  v5(); // _ZN7S4233C12v5Ev
  virtual void  v6(); // _ZN7S4233C12v6Ev
  virtual void  v7(); // _ZN7S4233C12v7Ev
  virtual void  v8(); // _ZN7S4233C12v8Ev
  virtual void  v9(); // _ZN7S4233C12v9Ev
  virtual void  v10(); // _ZN7S4233C13v10Ev
  ~S4233C1(); // tgen
  S4233C1(); // tgen
};
//SIG(1 S4233C1) 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S4233C1 ::v1(){vfunc_called(this, "_ZN7S4233C12v1Ev");}
void  S4233C1 ::v2(){vfunc_called(this, "_ZN7S4233C12v2Ev");}
void  S4233C1 ::v3(){vfunc_called(this, "_ZN7S4233C12v3Ev");}
void  S4233C1 ::v4(){vfunc_called(this, "_ZN7S4233C12v4Ev");}
void  S4233C1 ::v5(){vfunc_called(this, "_ZN7S4233C12v5Ev");}
void  S4233C1 ::v6(){vfunc_called(this, "_ZN7S4233C12v6Ev");}
void  S4233C1 ::v7(){vfunc_called(this, "_ZN7S4233C12v7Ev");}
void  S4233C1 ::v8(){vfunc_called(this, "_ZN7S4233C12v8Ev");}
void  S4233C1 ::v9(){vfunc_called(this, "_ZN7S4233C12v9Ev");}
void  S4233C1 ::v10(){vfunc_called(this, "_ZN7S4233C13v10Ev");}
S4233C1 ::~S4233C1(){ note_dtor("S4233C1", this);} // tgen
S4233C1 ::S4233C1(){ note_ctor("S4233C1", this);} // tgen

static void Test_S4233C1()
{
  extern Class_Descriptor cd_S4233C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4233C1, buf);
    S4233C1 *dp, &lv = *(dp=new (buf) S4233C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4233C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4233C1)");
    check_base_class_offset(lv, (S4233C3*)(S4233C2*), 0, "S4233C1");
    check_base_class_offset(lv, (S4233C2*), 0, "S4233C1");
    test_class_info(&lv, &cd_S4233C1);
    dp->~S4233C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4233C1(Test_S4233C1, "S4233C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4233C1C1Ev();
extern void _ZN7S4233C1D1Ev();
Name_Map name_map_S4233C1[] = {
  NSPAIR(_ZN7S4233C1C1Ev),
  NSPAIR(_ZN7S4233C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4233C3;
extern VTBL_ENTRY _ZTI7S4233C3[];
extern  VTBL_ENTRY _ZTV7S4233C3[];
extern Class_Descriptor cd_S4233C2;
extern VTBL_ENTRY _ZTI7S4233C2[];
extern  VTBL_ENTRY _ZTV7S4233C2[];
static Base_Class bases_S4233C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4233C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4233C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4233C1[];
extern void _ZN7S4233C1D1Ev();
extern void _ZN7S4233C1D0Ev();
extern void _ZN7S4233C33v11Ev();
extern void _ZN7S4233C33v12Ev();
extern void _ZN7S4233C33v13Ev();
extern void _ZN7S4233C33v14Ev();
extern void _ZN7S4233C33v15Ev();
extern void _ZN7S4233C33v16Ev();
extern void _ZN7S4233C33v17Ev();
extern void _ZN7S4233C33v18Ev();
extern void _ZN7S4233C33v19Ev();
extern void _ZN7S4233C33v20Ev();
extern void _ZN7S4233C33v21Ev();
extern void _ZN7S4233C33v22Ev();
extern void _ZN7S4233C33v23Ev();
extern void _ZN7S4233C33v24Ev();
extern void _ZN7S4233C33v25Ev();
extern void _ZN7S4233C33v26Ev();
extern void _ZN7S4233C33v27Ev();
extern void _ZN7S4233C33v28Ev();
extern void _ZN7S4233C33v29Ev();
extern void _ZN7S4233C33v30Ev();
extern void _ZN7S4233C33v31Ev();
extern void _ZN7S4233C33v32Ev();
extern void _ZN7S4233C33v33Ev();
extern void _ZN7S4233C33v34Ev();
extern void _ZN7S4233C33v35Ev();
extern void _ZN7S4233C33v36Ev();
extern void _ZN7S4233C23v37Ev();
extern void _ZN7S4233C23v38Ev();
extern void _ZN7S4233C23v39Ev();
extern void _ZN7S4233C23v40Ev();
extern void _ZN7S4233C23v41Ev();
extern void _ZN7S4233C23v42Ev();
extern void _ZN7S4233C23v43Ev();
extern void _ZN7S4233C23v44Ev();
extern void _ZN7S4233C23v45Ev();
extern void _ZN7S4233C23v46Ev();
extern void _ZN7S4233C23v47Ev();
extern void _ZN7S4233C23v48Ev();
extern void _ZN7S4233C23v49Ev();
extern void _ZN7S4233C23v50Ev();
extern void _ZN7S4233C23v51Ev();
extern void _ZN7S4233C23v52Ev();
extern void _ZN7S4233C23v53Ev();
extern void _ZN7S4233C23v54Ev();
extern void _ZN7S4233C23v55Ev();
extern void _ZN7S4233C23v56Ev();
extern void _ZN7S4233C23v57Ev();
extern void _ZN7S4233C23v58Ev();
extern void _ZN7S4233C23v59Ev();
extern void _ZN7S4233C12v1Ev();
extern void _ZN7S4233C12v2Ev();
extern void _ZN7S4233C12v3Ev();
extern void _ZN7S4233C12v4Ev();
extern void _ZN7S4233C12v5Ev();
extern void _ZN7S4233C12v6Ev();
extern void _ZN7S4233C12v7Ev();
extern void _ZN7S4233C12v8Ev();
extern void _ZN7S4233C12v9Ev();
extern void _ZN7S4233C13v10Ev();
static  VTBL_ENTRY vtc_S4233C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4233C1[0]),
  (VTBL_ENTRY)&_ZN7S4233C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4233C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4233C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4233C23v59Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4233C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4233C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S4233C1[];
extern  VTBL_ENTRY _ZTV7S4233C1[];
Class_Descriptor cd_S4233C1 = {  "S4233C1", // class name
  bases_S4233C1, 2,
  &(vtc_S4233C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4233C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4233C1),63, //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  S4209C3  {
  virtual  ~S4209C3(); // _ZN7S4209C3D1Ev
  virtual void  v10(); // _ZN7S4209C33v10Ev
  virtual void  v11(); // _ZN7S4209C33v11Ev
  virtual void  v12(); // _ZN7S4209C33v12Ev
  virtual void  v13(); // _ZN7S4209C33v13Ev
  virtual void  v14(); // _ZN7S4209C33v14Ev
  virtual void  v15(); // _ZN7S4209C33v15Ev
  virtual void  v16(); // _ZN7S4209C33v16Ev
  virtual void  v17(); // _ZN7S4209C33v17Ev
  virtual void  v18(); // _ZN7S4209C33v18Ev
  virtual void  v19(); // _ZN7S4209C33v19Ev
  virtual void  v20(); // _ZN7S4209C33v20Ev
  virtual void  v21(); // _ZN7S4209C33v21Ev
  virtual void  v22(); // _ZN7S4209C33v22Ev
  virtual void  v23(); // _ZN7S4209C33v23Ev
  virtual void  v24(); // _ZN7S4209C33v24Ev
  virtual void  v25(); // _ZN7S4209C33v25Ev
  virtual void  v26(); // _ZN7S4209C33v26Ev
  virtual void  v27(); // _ZN7S4209C33v27Ev
  virtual void  v28(); // _ZN7S4209C33v28Ev
  virtual void  v29(); // _ZN7S4209C33v29Ev
  virtual void  v30(); // _ZN7S4209C33v30Ev
  virtual void  v31(); // _ZN7S4209C33v31Ev
  virtual void  v32(); // _ZN7S4209C33v32Ev
  virtual void  v33(); // _ZN7S4209C33v33Ev
  virtual void  v34(); // _ZN7S4209C33v34Ev
  virtual void  v35(); // _ZN7S4209C33v35Ev
  S4209C3(); // tgen
};
//SIG(-1 S4209C3) 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}


 S4209C3 ::~S4209C3(){ note_dtor("S4209C3", this);}
void  S4209C3 ::v10(){vfunc_called(this, "_ZN7S4209C33v10Ev");}
void  S4209C3 ::v11(){vfunc_called(this, "_ZN7S4209C33v11Ev");}
void  S4209C3 ::v12(){vfunc_called(this, "_ZN7S4209C33v12Ev");}
void  S4209C3 ::v13(){vfunc_called(this, "_ZN7S4209C33v13Ev");}
void  S4209C3 ::v14(){vfunc_called(this, "_ZN7S4209C33v14Ev");}
void  S4209C3 ::v15(){vfunc_called(this, "_ZN7S4209C33v15Ev");}
void  S4209C3 ::v16(){vfunc_called(this, "_ZN7S4209C33v16Ev");}
void  S4209C3 ::v17(){vfunc_called(this, "_ZN7S4209C33v17Ev");}
void  S4209C3 ::v18(){vfunc_called(this, "_ZN7S4209C33v18Ev");}
void  S4209C3 ::v19(){vfunc_called(this, "_ZN7S4209C33v19Ev");}
void  S4209C3 ::v20(){vfunc_called(this, "_ZN7S4209C33v20Ev");}
void  S4209C3 ::v21(){vfunc_called(this, "_ZN7S4209C33v21Ev");}
void  S4209C3 ::v22(){vfunc_called(this, "_ZN7S4209C33v22Ev");}
void  S4209C3 ::v23(){vfunc_called(this, "_ZN7S4209C33v23Ev");}
void  S4209C3 ::v24(){vfunc_called(this, "_ZN7S4209C33v24Ev");}
void  S4209C3 ::v25(){vfunc_called(this, "_ZN7S4209C33v25Ev");}
void  S4209C3 ::v26(){vfunc_called(this, "_ZN7S4209C33v26Ev");}
void  S4209C3 ::v27(){vfunc_called(this, "_ZN7S4209C33v27Ev");}
void  S4209C3 ::v28(){vfunc_called(this, "_ZN7S4209C33v28Ev");}
void  S4209C3 ::v29(){vfunc_called(this, "_ZN7S4209C33v29Ev");}
void  S4209C3 ::v30(){vfunc_called(this, "_ZN7S4209C33v30Ev");}
void  S4209C3 ::v31(){vfunc_called(this, "_ZN7S4209C33v31Ev");}
void  S4209C3 ::v32(){vfunc_called(this, "_ZN7S4209C33v32Ev");}
void  S4209C3 ::v33(){vfunc_called(this, "_ZN7S4209C33v33Ev");}
void  S4209C3 ::v34(){vfunc_called(this, "_ZN7S4209C33v34Ev");}
void  S4209C3 ::v35(){vfunc_called(this, "_ZN7S4209C33v35Ev");}
S4209C3 ::S4209C3(){ note_ctor("S4209C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4209C3C1Ev();
extern void _ZN7S4209C3D1Ev();
Name_Map name_map_S4209C3[] = {
  NSPAIR(_ZN7S4209C3C1Ev),
  NSPAIR(_ZN7S4209C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4209C3[];
extern void _ZN7S4209C3D1Ev();
extern void _ZN7S4209C3D0Ev();
extern void _ZN7S4209C33v10Ev();
extern void _ZN7S4209C33v11Ev();
extern void _ZN7S4209C33v12Ev();
extern void _ZN7S4209C33v13Ev();
extern void _ZN7S4209C33v14Ev();
extern void _ZN7S4209C33v15Ev();
extern void _ZN7S4209C33v16Ev();
extern void _ZN7S4209C33v17Ev();
extern void _ZN7S4209C33v18Ev();
extern void _ZN7S4209C33v19Ev();
extern void _ZN7S4209C33v20Ev();
extern void _ZN7S4209C33v21Ev();
extern void _ZN7S4209C33v22Ev();
extern void _ZN7S4209C33v23Ev();
extern void _ZN7S4209C33v24Ev();
extern void _ZN7S4209C33v25Ev();
extern void _ZN7S4209C33v26Ev();
extern void _ZN7S4209C33v27Ev();
extern void _ZN7S4209C33v28Ev();
extern void _ZN7S4209C33v29Ev();
extern void _ZN7S4209C33v30Ev();
extern void _ZN7S4209C33v31Ev();
extern void _ZN7S4209C33v32Ev();
extern void _ZN7S4209C33v33Ev();
extern void _ZN7S4209C33v34Ev();
extern void _ZN7S4209C33v35Ev();
static  VTBL_ENTRY vtc_S4209C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4209C3[0]),
  (VTBL_ENTRY)&_ZN7S4209C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4209C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v35Ev,
};
extern VTBL_ENTRY _ZTI7S4209C3[];
extern  VTBL_ENTRY _ZTV7S4209C3[];
Class_Descriptor cd_S4209C3 = {  "S4209C3", // class name
  0,0,//no base classes
  &(vtc_S4209C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4209C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4209C3),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4209C2  : S4209C3 {
  virtual void  v36(); // _ZN7S4209C23v36Ev
  virtual void  v37(); // _ZN7S4209C23v37Ev
  virtual void  v38(); // _ZN7S4209C23v38Ev
  virtual void  v39(); // _ZN7S4209C23v39Ev
  virtual void  v40(); // _ZN7S4209C23v40Ev
  virtual void  v41(); // _ZN7S4209C23v41Ev
  virtual void  v42(); // _ZN7S4209C23v42Ev
  virtual void  v43(); // _ZN7S4209C23v43Ev
  virtual void  v44(); // _ZN7S4209C23v44Ev
  virtual void  v45(); // _ZN7S4209C23v45Ev
  virtual void  v46(); // _ZN7S4209C23v46Ev
  virtual void  v47(); // _ZN7S4209C23v47Ev
  virtual void  v48(); // _ZN7S4209C23v48Ev
  virtual void  v49(); // _ZN7S4209C23v49Ev
  virtual void  v50(); // _ZN7S4209C23v50Ev
  virtual void  v51(); // _ZN7S4209C23v51Ev
  virtual void  v52(); // _ZN7S4209C23v52Ev
  virtual void  v53(); // _ZN7S4209C23v53Ev
  virtual void  v54(); // _ZN7S4209C23v54Ev
  virtual void  v55(); // _ZN7S4209C23v55Ev
  virtual void  v56(); // _ZN7S4209C23v56Ev
  virtual void  v57(); // _ZN7S4209C23v57Ev
  virtual void  v58(); // _ZN7S4209C23v58Ev
  ~S4209C2(); // tgen
  S4209C2(); // tgen
};
//SIG(-1 S4209C2) C1{ BC2{ vd 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23}


void  S4209C2 ::v36(){vfunc_called(this, "_ZN7S4209C23v36Ev");}
void  S4209C2 ::v37(){vfunc_called(this, "_ZN7S4209C23v37Ev");}
void  S4209C2 ::v38(){vfunc_called(this, "_ZN7S4209C23v38Ev");}
void  S4209C2 ::v39(){vfunc_called(this, "_ZN7S4209C23v39Ev");}
void  S4209C2 ::v40(){vfunc_called(this, "_ZN7S4209C23v40Ev");}
void  S4209C2 ::v41(){vfunc_called(this, "_ZN7S4209C23v41Ev");}
void  S4209C2 ::v42(){vfunc_called(this, "_ZN7S4209C23v42Ev");}
void  S4209C2 ::v43(){vfunc_called(this, "_ZN7S4209C23v43Ev");}
void  S4209C2 ::v44(){vfunc_called(this, "_ZN7S4209C23v44Ev");}
void  S4209C2 ::v45(){vfunc_called(this, "_ZN7S4209C23v45Ev");}
void  S4209C2 ::v46(){vfunc_called(this, "_ZN7S4209C23v46Ev");}
void  S4209C2 ::v47(){vfunc_called(this, "_ZN7S4209C23v47Ev");}
void  S4209C2 ::v48(){vfunc_called(this, "_ZN7S4209C23v48Ev");}
void  S4209C2 ::v49(){vfunc_called(this, "_ZN7S4209C23v49Ev");}
void  S4209C2 ::v50(){vfunc_called(this, "_ZN7S4209C23v50Ev");}
void  S4209C2 ::v51(){vfunc_called(this, "_ZN7S4209C23v51Ev");}
void  S4209C2 ::v52(){vfunc_called(this, "_ZN7S4209C23v52Ev");}
void  S4209C2 ::v53(){vfunc_called(this, "_ZN7S4209C23v53Ev");}
void  S4209C2 ::v54(){vfunc_called(this, "_ZN7S4209C23v54Ev");}
void  S4209C2 ::v55(){vfunc_called(this, "_ZN7S4209C23v55Ev");}
void  S4209C2 ::v56(){vfunc_called(this, "_ZN7S4209C23v56Ev");}
void  S4209C2 ::v57(){vfunc_called(this, "_ZN7S4209C23v57Ev");}
void  S4209C2 ::v58(){vfunc_called(this, "_ZN7S4209C23v58Ev");}
S4209C2 ::~S4209C2(){ note_dtor("S4209C2", this);} // tgen
S4209C2 ::S4209C2(){ note_ctor("S4209C2", this);} // tgen

static void Test_S4209C2()
{
  extern Class_Descriptor cd_S4209C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4209C2, buf);
    S4209C2 *dp, &lv = *(dp=new (buf) S4209C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4209C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4209C2)");
    check_base_class_offset(lv, (S4209C3*), 0, "S4209C2");
    test_class_info(&lv, &cd_S4209C2);
    dp->~S4209C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4209C2(Test_S4209C2, "S4209C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4209C2C1Ev();
extern void _ZN7S4209C2D1Ev();
Name_Map name_map_S4209C2[] = {
  NSPAIR(_ZN7S4209C2C1Ev),
  NSPAIR(_ZN7S4209C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4209C3;
extern VTBL_ENTRY _ZTI7S4209C3[];
extern  VTBL_ENTRY _ZTV7S4209C3[];
static Base_Class bases_S4209C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4209C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4209C2[];
extern void _ZN7S4209C2D1Ev();
extern void _ZN7S4209C2D0Ev();
extern void _ZN7S4209C33v10Ev();
extern void _ZN7S4209C33v11Ev();
extern void _ZN7S4209C33v12Ev();
extern void _ZN7S4209C33v13Ev();
extern void _ZN7S4209C33v14Ev();
extern void _ZN7S4209C33v15Ev();
extern void _ZN7S4209C33v16Ev();
extern void _ZN7S4209C33v17Ev();
extern void _ZN7S4209C33v18Ev();
extern void _ZN7S4209C33v19Ev();
extern void _ZN7S4209C33v20Ev();
extern void _ZN7S4209C33v21Ev();
extern void _ZN7S4209C33v22Ev();
extern void _ZN7S4209C33v23Ev();
extern void _ZN7S4209C33v24Ev();
extern void _ZN7S4209C33v25Ev();
extern void _ZN7S4209C33v26Ev();
extern void _ZN7S4209C33v27Ev();
extern void _ZN7S4209C33v28Ev();
extern void _ZN7S4209C33v29Ev();
extern void _ZN7S4209C33v30Ev();
extern void _ZN7S4209C33v31Ev();
extern void _ZN7S4209C33v32Ev();
extern void _ZN7S4209C33v33Ev();
extern void _ZN7S4209C33v34Ev();
extern void _ZN7S4209C33v35Ev();
extern void _ZN7S4209C23v36Ev();
extern void _ZN7S4209C23v37Ev();
extern void _ZN7S4209C23v38Ev();
extern void _ZN7S4209C23v39Ev();
extern void _ZN7S4209C23v40Ev();
extern void _ZN7S4209C23v41Ev();
extern void _ZN7S4209C23v42Ev();
extern void _ZN7S4209C23v43Ev();
extern void _ZN7S4209C23v44Ev();
extern void _ZN7S4209C23v45Ev();
extern void _ZN7S4209C23v46Ev();
extern void _ZN7S4209C23v47Ev();
extern void _ZN7S4209C23v48Ev();
extern void _ZN7S4209C23v49Ev();
extern void _ZN7S4209C23v50Ev();
extern void _ZN7S4209C23v51Ev();
extern void _ZN7S4209C23v52Ev();
extern void _ZN7S4209C23v53Ev();
extern void _ZN7S4209C23v54Ev();
extern void _ZN7S4209C23v55Ev();
extern void _ZN7S4209C23v56Ev();
extern void _ZN7S4209C23v57Ev();
extern void _ZN7S4209C23v58Ev();
static  VTBL_ENTRY vtc_S4209C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4209C2[0]),
  (VTBL_ENTRY)&_ZN7S4209C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4209C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v36Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v58Ev,
};
extern VTBL_ENTRY _ZTI7S4209C2[];
extern  VTBL_ENTRY _ZTV7S4209C2[];
Class_Descriptor cd_S4209C2 = {  "S4209C2", // class name
  bases_S4209C2, 1,
  &(vtc_S4209C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4209C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4209C2),53, //virtual function table var
  2, // 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  S4209C1  : S4209C2 {
  virtual void  v1(); // _ZN7S4209C12v1Ev
  virtual void  v2(); // _ZN7S4209C12v2Ev
  virtual void  v3(); // _ZN7S4209C12v3Ev
  virtual void  v4(); // _ZN7S4209C12v4Ev
  virtual void  v5(); // _ZN7S4209C12v5Ev
  virtual void  v6(); // _ZN7S4209C12v6Ev
  virtual void  v7(); // _ZN7S4209C12v7Ev
  virtual void  v8(); // _ZN7S4209C12v8Ev
  virtual void  v9(); // _ZN7S4209C12v9Ev
  ~S4209C1(); // tgen
  S4209C1(); // tgen
};
//SIG(1 S4209C1) C1{ BC2{ BC3{ vd 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} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S4209C1 ::v1(){vfunc_called(this, "_ZN7S4209C12v1Ev");}
void  S4209C1 ::v2(){vfunc_called(this, "_ZN7S4209C12v2Ev");}
void  S4209C1 ::v3(){vfunc_called(this, "_ZN7S4209C12v3Ev");}
void  S4209C1 ::v4(){vfunc_called(this, "_ZN7S4209C12v4Ev");}
void  S4209C1 ::v5(){vfunc_called(this, "_ZN7S4209C12v5Ev");}
void  S4209C1 ::v6(){vfunc_called(this, "_ZN7S4209C12v6Ev");}
void  S4209C1 ::v7(){vfunc_called(this, "_ZN7S4209C12v7Ev");}
void  S4209C1 ::v8(){vfunc_called(this, "_ZN7S4209C12v8Ev");}
void  S4209C1 ::v9(){vfunc_called(this, "_ZN7S4209C12v9Ev");}
S4209C1 ::~S4209C1(){ note_dtor("S4209C1", this);} // tgen
S4209C1 ::S4209C1(){ note_ctor("S4209C1", this);} // tgen

static void Test_S4209C1()
{
  extern Class_Descriptor cd_S4209C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4209C1, buf);
    S4209C1 *dp, &lv = *(dp=new (buf) S4209C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4209C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4209C1)");
    check_base_class_offset(lv, (S4209C3*)(S4209C2*), 0, "S4209C1");
    check_base_class_offset(lv, (S4209C2*), 0, "S4209C1");
    test_class_info(&lv, &cd_S4209C1);
    dp->~S4209C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4209C1(Test_S4209C1, "S4209C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4209C1C1Ev();
extern void _ZN7S4209C1D1Ev();
Name_Map name_map_S4209C1[] = {
  NSPAIR(_ZN7S4209C1C1Ev),
  NSPAIR(_ZN7S4209C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4209C3;
extern VTBL_ENTRY _ZTI7S4209C3[];
extern  VTBL_ENTRY _ZTV7S4209C3[];
extern Class_Descriptor cd_S4209C2;
extern VTBL_ENTRY _ZTI7S4209C2[];
extern  VTBL_ENTRY _ZTV7S4209C2[];
static Base_Class bases_S4209C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4209C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4209C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4209C1[];
extern void _ZN7S4209C1D1Ev();
extern void _ZN7S4209C1D0Ev();
extern void _ZN7S4209C33v10Ev();
extern void _ZN7S4209C33v11Ev();
extern void _ZN7S4209C33v12Ev();
extern void _ZN7S4209C33v13Ev();
extern void _ZN7S4209C33v14Ev();
extern void _ZN7S4209C33v15Ev();
extern void _ZN7S4209C33v16Ev();
extern void _ZN7S4209C33v17Ev();
extern void _ZN7S4209C33v18Ev();
extern void _ZN7S4209C33v19Ev();
extern void _ZN7S4209C33v20Ev();
extern void _ZN7S4209C33v21Ev();
extern void _ZN7S4209C33v22Ev();
extern void _ZN7S4209C33v23Ev();
extern void _ZN7S4209C33v24Ev();
extern void _ZN7S4209C33v25Ev();
extern void _ZN7S4209C33v26Ev();
extern void _ZN7S4209C33v27Ev();
extern void _ZN7S4209C33v28Ev();
extern void _ZN7S4209C33v29Ev();
extern void _ZN7S4209C33v30Ev();
extern void _ZN7S4209C33v31Ev();
extern void _ZN7S4209C33v32Ev();
extern void _ZN7S4209C33v33Ev();
extern void _ZN7S4209C33v34Ev();
extern void _ZN7S4209C33v35Ev();
extern void _ZN7S4209C23v36Ev();
extern void _ZN7S4209C23v37Ev();
extern void _ZN7S4209C23v38Ev();
extern void _ZN7S4209C23v39Ev();
extern void _ZN7S4209C23v40Ev();
extern void _ZN7S4209C23v41Ev();
extern void _ZN7S4209C23v42Ev();
extern void _ZN7S4209C23v43Ev();
extern void _ZN7S4209C23v44Ev();
extern void _ZN7S4209C23v45Ev();
extern void _ZN7S4209C23v46Ev();
extern void _ZN7S4209C23v47Ev();
extern void _ZN7S4209C23v48Ev();
extern void _ZN7S4209C23v49Ev();
extern void _ZN7S4209C23v50Ev();
extern void _ZN7S4209C23v51Ev();
extern void _ZN7S4209C23v52Ev();
extern void _ZN7S4209C23v53Ev();
extern void _ZN7S4209C23v54Ev();
extern void _ZN7S4209C23v55Ev();
extern void _ZN7S4209C23v56Ev();
extern void _ZN7S4209C23v57Ev();
extern void _ZN7S4209C23v58Ev();
extern void _ZN7S4209C12v1Ev();
extern void _ZN7S4209C12v2Ev();
extern void _ZN7S4209C12v3Ev();
extern void _ZN7S4209C12v4Ev();
extern void _ZN7S4209C12v5Ev();
extern void _ZN7S4209C12v6Ev();
extern void _ZN7S4209C12v7Ev();
extern void _ZN7S4209C12v8Ev();
extern void _ZN7S4209C12v9Ev();
static  VTBL_ENTRY vtc_S4209C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4209C1[0]),
  (VTBL_ENTRY)&_ZN7S4209C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4209C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v10Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v11Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v12Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v13Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4209C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v36Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v48Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v49Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v50Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v51Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v52Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v53Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v54Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v55Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v56Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v57Ev,
  (VTBL_ENTRY)&_ZN7S4209C23v58Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4209C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S4209C1[];
extern  VTBL_ENTRY _ZTV7S4209C1[];
Class_Descriptor cd_S4209C1 = {  "S4209C1", // class name
  bases_S4209C1, 2,
  &(vtc_S4209C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4209C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4209C1),62, //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  S7573C3  {
  short s7573c3f0;
  virtual void  v3(); // _ZN7S7573C32v3Ev
  ~S7573C3(); // tgen
  S7573C3(); // tgen
};
//SIG(-1 S7573C3) C1{ v1 Fs}


void  S7573C3 ::v3(){vfunc_called(this, "_ZN7S7573C32v3Ev");}
S7573C3 ::~S7573C3(){ note_dtor("S7573C3", this);} // tgen
S7573C3 ::S7573C3(){ note_ctor("S7573C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7573C3C1Ev();
extern void _ZN7S7573C3D1Ev();
Name_Map name_map_S7573C3[] = {
  NSPAIR(_ZN7S7573C3C1Ev),
  NSPAIR(_ZN7S7573C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7573C3[];
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY vtc_S7573C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C3[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S7573C3[];
extern  VTBL_ENTRY _ZTV7S7573C3[];
Class_Descriptor cd_S7573C3 = {  "S7573C3", // class name
  0,0,//no base classes
  &(vtc_S7573C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7573C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7573C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7573C2  : virtual S7573C3 {
  int s7573c2f0;
  virtual void  v4(); // _ZN7S7573C22v4Ev
  ~S7573C2(); // tgen
  S7573C2(); // tgen
};
//SIG(-1 S7573C2) C1{ VBC2{ v2 Fs} v1 Fi}


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

static void Test_S7573C2()
{
  extern Class_Descriptor cd_S7573C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7573C2, buf);
    S7573C2 *dp, &lv = *(dp=new (buf) S7573C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7573C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7573C2)");
    check_base_class_offset(lv, (S7573C3*), ABISELECT(16,8), "S7573C2");
    check_field_offset(lv, s7573c2f0, ABISELECT(8,4), "S7573C2.s7573c2f0");
    test_class_info(&lv, &cd_S7573C2);
    dp->~S7573C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7573C2(Test_S7573C2, "S7573C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7573C2C1Ev();
extern void _ZN7S7573C2D1Ev();
Name_Map name_map_S7573C2[] = {
  NSPAIR(_ZN7S7573C2C1Ev),
  NSPAIR(_ZN7S7573C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7573C3;
extern VTBL_ENTRY _ZTI7S7573C3[];
extern  VTBL_ENTRY _ZTV7S7573C3[];
static Base_Class bases_S7573C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7573C3,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7573C2[];
extern void _ZN7S7573C22v4Ev();
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY vtc_S7573C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern VTBL_ENTRY _ZTV7S7573C2[];
static  VTT_ENTRY vtt_S7573C2[] = {
  {&(_ZTV7S7573C2[3]),  3,8},
  {&(_ZTV7S7573C2[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7573C2[];
extern  VTBL_ENTRY _ZTV7S7573C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C2[];
Class_Descriptor cd_S7573C2 = {  "S7573C2", // class name
  bases_S7573C2, 1,
  &(vtc_S7573C2[0]), // expected_vtbl_contents
  &(vtt_S7573C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7573C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7573C2),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7573C2),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  S7573C8  {
  ::S19737C2 s7573c8f0;
  int s7573c8f1;
  virtual void  v5(); // _ZN7S7573C82v5Ev
  ~S7573C8(); // tgen
  S7573C8(); // tgen
};
//SIG(-1 S7573C8) C1{ v1 FC2{ m FL Fp[8]} Fi}


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

static void Test_S7573C8()
{
  extern Class_Descriptor cd_S7573C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S7573C8, buf);
    S7573C8 *dp, &lv = *(dp=new (buf) S7573C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S7573C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7573C8)");
    check_field_offset(lv, s7573c8f0, ABISELECT(8,4), "S7573C8.s7573c8f0");
    check_field_offset(lv, s7573c8f1, ABISELECT(80,44), "S7573C8.s7573c8f1");
    test_class_info(&lv, &cd_S7573C8);
    dp->~S7573C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7573C8(Test_S7573C8, "S7573C8", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S7573C8C1Ev();
extern void _ZN7S7573C8D1Ev();
Name_Map name_map_S7573C8[] = {
  NSPAIR(_ZN7S7573C8C1Ev),
  NSPAIR(_ZN7S7573C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7573C8[];
extern void _ZN7S7573C82v5Ev();
static  VTBL_ENTRY vtc_S7573C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C8[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
};
extern VTBL_ENTRY _ZTI7S7573C8[];
extern  VTBL_ENTRY _ZTV7S7573C8[];
Class_Descriptor cd_S7573C8 = {  "S7573C8", // class name
  0,0,//no base classes
  &(vtc_S7573C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S7573C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7573C8),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  S7573C7  : virtual S7573C3 , virtual S7573C2 , virtual S19737C5 , virtual S7573C8 , virtual S19737C2 {
  int s7573c7f0;
  long double s7573c7f1;
  int s7573c7f2;
  ~S7573C7(); // tgen
  S7573C7(); // tgen
};
//SIG(-1 S7573C7) C1{ VBC2{ v1 Fs} VBC3{ VBC2 v2 Fi} VBC4{ m Fc Fi Fp[2]} VBC5{ v3 FC6{ m FL Fp[8]} Fi} VBC6 Fi FD Fi}


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

static void Test_S7573C7()
{
  extern Class_Descriptor cd_S7573C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,37)];
    init_test(&cd_S7573C7, buf);
    S7573C7 *dp, &lv = *(dp=new (buf) S7573C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,144), "sizeof(S7573C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7573C7)");
    check_base_class_offset(lv, (S7573C3*), ABISELECT(40,24), "S7573C7");
    check_base_class_offset(lv, (S7573C3*)(S7573C2*), ABISELECT(40,24), "S7573C7");
    check_base_class_offset(lv, (S7573C2*), ABISELECT(56,32), "S7573C7");
    check_base_class_offset(lv, (S19737C5*), ABISELECT(72,40), "S7573C7");
    check_base_class_offset(lv, (S7573C8*), ABISELECT(96,56), "S7573C7");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(184,104), "S7573C7");
    check_field_offset(lv, s7573c7f0, ABISELECT(8,4), "S7573C7.s7573c7f0");
    check_field_offset(lv, s7573c7f1, ABISELECT(16,8), "S7573C7.s7573c7f1");
    check_field_offset(lv, s7573c7f2, ABISELECT(32,20), "S7573C7.s7573c7f2");
    test_class_info(&lv, &cd_S7573C7);
    dp->~S7573C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7573C7(Test_S7573C7, "S7573C7", ABISELECT(256,144));

#else // __cplusplus

extern void _ZN7S7573C7C1Ev();
extern void _ZN7S7573C7D1Ev();
Name_Map name_map_S7573C7[] = {
  NSPAIR(_ZN7S7573C7C1Ev),
  NSPAIR(_ZN7S7573C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7573C3;
extern VTBL_ENTRY _ZTI7S7573C3[];
extern  VTBL_ENTRY _ZTV7S7573C3[];
extern Class_Descriptor cd_S7573C2;
extern VTBL_ENTRY _ZTI7S7573C2[];
extern  VTBL_ENTRY _ZTV7S7573C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C2[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S7573C8;
extern VTBL_ENTRY _ZTI7S7573C8[];
extern  VTBL_ENTRY _ZTV7S7573C8[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
static Base_Class bases_S7573C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7573C3,    ABISELECT(40,24), //bcp->offset
    7, //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_S7573C2,    ABISELECT(56,32), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C5,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7573C8,    ABISELECT(96,56), //bcp->offset
    16, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C2,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7573C7[];
extern void _ZN7S7573C32v3Ev();
extern void _ZN7S7573C22v4Ev();
extern void _ZN7S7573C82v5Ev();
static  VTBL_ENTRY vtc_S7573C7[] = {
  ABISELECT(184,104),
  ABISELECT(96,56),
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
};
extern VTBL_ENTRY _ZTV7S7573C7[];
extern void _ZN7S7573C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C2__7S7573C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C2__7S7573C7[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
static  VTT_ENTRY vtt_S7573C7[] = {
  {&(_ZTV7S7573C7[7]),  7,20},
  {&(_ZTV7S7573C7[10]),  10,20},
  {&(_ZTV7S7573C7[15]),  15,20},
  {&(_ZTV7S7573C7[19]),  19,20},
  {&(_tg__ZTV7S7573C2__7S7573C7[3]),  3,4},
  {&(_tg__ZTV7S7573C3__7S7573C2__7S7573C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7573C7[];
extern  VTBL_ENTRY _ZTV7S7573C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C7[];
Class_Descriptor cd_S7573C7 = {  "S7573C7", // class name
  bases_S7573C7, 5,
  &(vtc_S7573C7[0]), // expected_vtbl_contents
  &(vtt_S7573C7[0]), // expected_vtt_contents
  ABISELECT(256,144), // object size
  NSPAIRA(_ZTI7S7573C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7573C7),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7573C7),6, //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  S7573C9  : S7573C8 , S19737C2 , virtual S7573C3 {
  char s7573c9f0[7];
  ::S19737C11 s7573c9f1[8];
  int s7573c9f2;
  virtual void  v6(); // _ZN7S7573C92v6Ev
  ~S7573C9(); // tgen
  S7573C9(); // tgen
};
//SIG(-1 S7573C9) C1{ BC2{ v2 FC3{ m FL Fp[8]} Fi} BC3 VBC4{ v3 Fs} v1 Fc[7] FU5{ m Fl[7] Fs[8] FL}[8] Fi}


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

static void Test_S7573C9()
{
  extern Class_Descriptor cd_S7573C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(81,84)];
    init_test(&cd_S7573C9, buf);
    S7573C9 *dp, &lv = *(dp=new (buf) S7573C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,332), "sizeof(S7573C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7573C9)");
    check_base_class_offset(lv, (S7573C8*), 0, "S7573C9");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(88,48), "S7573C9");
    check_base_class_offset(lv, (S7573C3*), ABISELECT(624,324), "S7573C9");
    check_field_offset(lv, s7573c9f0, ABISELECT(160,88), "S7573C9.s7573c9f0");
    check_field_offset(lv, s7573c9f1, ABISELECT(168,96), "S7573C9.s7573c9f1");
    check_field_offset(lv, s7573c9f2, ABISELECT(616,320), "S7573C9.s7573c9f2");
    test_class_info(&lv, &cd_S7573C9);
    dp->~S7573C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7573C9(Test_S7573C9, "S7573C9", ABISELECT(640,332));

#else // __cplusplus

extern void _ZN7S7573C9C1Ev();
extern void _ZN7S7573C9D1Ev();
Name_Map name_map_S7573C9[] = {
  NSPAIR(_ZN7S7573C9C1Ev),
  NSPAIR(_ZN7S7573C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7573C8;
extern VTBL_ENTRY _ZTI7S7573C8[];
extern  VTBL_ENTRY _ZTV7S7573C8[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7573C3;
extern VTBL_ENTRY _ZTI7S7573C3[];
extern  VTBL_ENTRY _ZTV7S7573C3[];
static Base_Class bases_S7573C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7573C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19737C2,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7573C3,    ABISELECT(624,324), //bcp->offset
    5, //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 _ZTI7S7573C9[];
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C92v6Ev();
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY vtc_S7573C9[] = {
  ABISELECT(624,324),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C9[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7573C92v6Ev,
  0,
  ABISELECT(-624,-324),
  (VTBL_ENTRY)&(_ZTI7S7573C9[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern VTBL_ENTRY _ZTV7S7573C9[];
static  VTT_ENTRY vtt_S7573C9[] = {
  {&(_ZTV7S7573C9[3]),  3,9},
  {&(_ZTV7S7573C9[8]),  8,9},
};
extern VTBL_ENTRY _ZTI7S7573C9[];
extern  VTBL_ENTRY _ZTV7S7573C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C9[];
Class_Descriptor cd_S7573C9 = {  "S7573C9", // class name
  bases_S7573C9, 3,
  &(vtc_S7573C9[0]), // expected_vtbl_contents
  &(vtt_S7573C9[0]), // expected_vtt_contents
  ABISELECT(640,332), // object size
  NSPAIRA(_ZTI7S7573C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7573C9),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7573C9),2, //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  S7573C5  : S19737C5 , S19737C2 , S7573C7 , virtual S7573C9 , S7573C3 {
  long double s7573c5f0;
  int s7573c5f1;
  ::S19737C11 s7573c5f2;
  void *s7573c5f3[4];
  virtual void  v7(); // _ZN7S7573C52v7Ev
  virtual void  v8(); // _ZN7S7573C52v8Ev
  ~S7573C5(); // tgen
  S7573C5(); // tgen
};
//SIG(-1 S7573C5) C1{ BC2{ m Fc Fi Fp[2]} BC3{ m FL Fp[8]} BC4{ VBC5{ v3 Fs} VBC6{ VBC5 v4 Fi} VBC2 VBC7{ v5 FC3 Fi} VBC3 Fi FD Fi} VBC8{ BC7 BC3 VBC5 v6 Fc[7] FU9{ m Fl[7] Fs[8] FL}[8] Fi} BC5 v1 v2 FD Fi FU9 Fp[4]}


void  S7573C5 ::v7(){vfunc_called(this, "_ZN7S7573C52v7Ev");}
void  S7573C5 ::v8(){vfunc_called(this, "_ZN7S7573C52v8Ev");}
S7573C5 ::~S7573C5(){ note_dtor("S7573C5", this);} // tgen
S7573C5 ::S7573C5(){ note_ctor("S7573C5", this);} // tgen

static void Test_S7573C5()
{
  extern Class_Descriptor cd_S7573C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(71,149)];
    init_test(&cd_S7573C5, buf);
    S7573C5 *dp, &lv = *(dp=new (buf) S7573C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1120,592), "sizeof(S7573C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7573C5)");
    /*is_ambiguous_... S7573C5::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*), ABISELECT(40,24), "S7573C5");
    /*is_ambiguous_... S7573C5::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*), ABISELECT(64,40), "S7573C5");
    check_base_class_offset(lv, (S7573C3*)(S7573C7*), ABISELECT(272,148), "S7573C5");
    check_base_class_offset(lv, (S7573C3*)(S7573C2*), ABISELECT(272,148), "S7573C5");
    check_base_class_offset(lv, (S7573C3*)(S7573C9*), ABISELECT(272,148), "S7573C5");
    check_base_class_offset(lv, (S7573C2*)(S7573C7*), ABISELECT(288,156), "S7573C5");
    check_base_class_offset(lv, (S19737C5*)(S7573C7*), ABISELECT(304,164), "S7573C5");
    check_base_class_offset(lv, (S7573C8*)(S7573C7*), ABISELECT(328,180), "S7573C5");
    check_base_class_offset(lv, (S19737C2*)(S7573C7*), ABISELECT(416,228), "S7573C5");
    check_base_class_offset(lv, (S7573C7*), 0, "S7573C5");
    check_base_class_offset(lv, (S7573C8*)(S7573C9*), ABISELECT(488,268), "S7573C5");
    check_base_class_offset(lv, (S19737C2*)(S7573C9*), ABISELECT(576,316), "S7573C5");
    check_base_class_offset(lv, (S7573C9*), ABISELECT(488,268), "S7573C5");
    /*is_ambiguous_... S7573C5::S7573C3 */ AMB_check_base_class_offset(lv, (S7573C3*), ABISELECT(136,80), "S7573C5");
    check_field_offset(lv, s7573c5f0, ABISELECT(160,88), "S7573C5.s7573c5f0");
    check_field_offset(lv, s7573c5f1, ABISELECT(176,100), "S7573C5.s7573c5f1");
    check_field_offset(lv, s7573c5f2, ABISELECT(184,104), "S7573C5.s7573c5f2");
    check_field_offset(lv, s7573c5f3, ABISELECT(240,132), "S7573C5.s7573c5f3");
    test_class_info(&lv, &cd_S7573C5);
    dp->~S7573C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7573C5(Test_S7573C5, "S7573C5", ABISELECT(1120,592));

#else // __cplusplus

extern void _ZN7S7573C5C1Ev();
extern void _ZN7S7573C5D1Ev();
Name_Map name_map_S7573C5[] = {
  NSPAIR(_ZN7S7573C5C1Ev),
  NSPAIR(_ZN7S7573C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7573C3;
extern VTBL_ENTRY _ZTI7S7573C3[];
extern  VTBL_ENTRY _ZTV7S7573C3[];
extern Class_Descriptor cd_S7573C2;
extern VTBL_ENTRY _ZTI7S7573C2[];
extern  VTBL_ENTRY _ZTV7S7573C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C2[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S7573C8;
extern VTBL_ENTRY _ZTI7S7573C8[];
extern  VTBL_ENTRY _ZTV7S7573C8[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7573C7;
extern VTBL_ENTRY _ZTI7S7573C7[];
extern  VTBL_ENTRY _ZTV7S7573C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C7[];
extern Class_Descriptor cd_S7573C8;
extern VTBL_ENTRY _ZTI7S7573C8[];
extern  VTBL_ENTRY _ZTV7S7573C8[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7573C9;
extern VTBL_ENTRY _ZTI7S7573C9[];
extern  VTBL_ENTRY _ZTV7S7573C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C9[];
extern Class_Descriptor cd_S7573C3;
extern VTBL_ENTRY _ZTI7S7573C3[];
extern  VTBL_ENTRY _ZTV7S7573C3[];
static Base_Class bases_S7573C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C5,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C2,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7573C3,    ABISELECT(272,148), //bcp->offset
    13, //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_S7573C2,    ABISELECT(288,156), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C5,    ABISELECT(304,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
    7, //immediately_derived
  0, 1},
  {&cd_S7573C8,    ABISELECT(328,180), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C2,    ABISELECT(416,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
    7, //immediately_derived
  0, 1},
  {&cd_S7573C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7573C8,    ABISELECT(488,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(576,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
    10, //immediately_derived
  0, 0},
  {&cd_S7573C9,    ABISELECT(488,268), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7573C3,    ABISELECT(136,80), //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 _ZTI7S7573C5[];
extern void _ZN7S7573C52v7Ev();
extern void _ZN7S7573C52v8Ev();
extern void _ZN7S7573C32v3Ev();
extern void _ZN7S7573C32v3Ev();
extern void _ZN7S7573C22v4Ev();
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C92v6Ev();
static  VTBL_ENTRY vtc_S7573C5[] = {
  ABISELECT(488,268),
  ABISELECT(416,228),
  ABISELECT(328,180),
  ABISELECT(304,164),
  ABISELECT(288,156),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7573C52v8Ev,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
  0,
  ABISELECT(-328,-180),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-488,-268),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7573C92v6Ev,
};
extern VTBL_ENTRY _ZTV7S7573C5[];
static  VTBL_ENTRY _tg__ZTV7S7573C7__7S7573C5[] = {
  ABISELECT(416,228),
  ABISELECT(328,180),
  ABISELECT(304,164),
  ABISELECT(288,156),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C7__7S7573C5[] = {
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern void _ZN7S7573C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C2__7S7573C7__7S7573C5[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
};
extern void _ZN7S7573C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C8__7S7573C7__7S7573C5[] = {
  0,
  ABISELECT(-328,-180),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
};
extern void _ZN7S7573C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C2__7S7573C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C2__7S7573C5[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C92v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C9__7S7573C5[] = {
  ABISELECT(-216,-120),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C9[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7573C92v6Ev,
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C9__7S7573C5[] = {
  0,
  ABISELECT(216,120),
  (VTBL_ENTRY)&(_ZTI7S7573C9[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
static  VTT_ENTRY vtt_S7573C5[] = {
  {&(_ZTV7S7573C5[8]),  8,33},
  {&(_tg__ZTV7S7573C7__7S7573C5[7]),  7,7},
  {&(_tg__ZTV7S7573C3__7S7573C7__7S7573C5[3]),  3,4},
  {&(_tg__ZTV7S7573C2__7S7573C7__7S7573C5[4]),  4,5},
  {&(_tg__ZTV7S7573C8__7S7573C7__7S7573C5[3]),  3,4},
  {&(_ZTV7S7573C5[16]),  16,33},
  {&(_ZTV7S7573C5[21]),  21,33},
  {&(_ZTV7S7573C5[25]),  25,33},
  {&(_ZTV7S7573C5[31]),  31,33},
  {&(_tg__ZTV7S7573C2__7S7573C5[3]),  3,4},
  {&(_tg__ZTV7S7573C3__7S7573C2__7S7573C5[3]),  3,4},
  {&(_tg__ZTV7S7573C9__7S7573C5[3]),  3,5},
  {&(_tg__ZTV7S7573C3__7S7573C9__7S7573C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7573C5[];
extern  VTBL_ENTRY _ZTV7S7573C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C5[];
Class_Descriptor cd_S7573C5 = {  "S7573C5", // class name
  bases_S7573C5, 12,
  &(vtc_S7573C5[0]), // expected_vtbl_contents
  &(vtt_S7573C5[0]), // expected_vtt_contents
  ABISELECT(1120,592), // object size
  NSPAIRA(_ZTI7S7573C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7573C5),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7573C5),13, //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  S7573C1  : S7573C2 , virtual S19737C2 , S7573C5 , S7573C8 {
  ::S19737C2 s7573c1f0;
  int s7573c1f1;
  void *s7573c1f2;
  ::S19737C12_nt s7573c1f3;
  virtual void  v1(); // _ZN7S7573C12v1Ev
  virtual void  v2(); // _ZN7S7573C12v2Ev
  ~S7573C1(); // tgen
  S7573C1(); // tgen
};
//SIG(1 S7573C1) C1{ BC2{ VBC3{ v3 Fs} v4 Fi} VBC4{ m FL Fp[8]} BC5{ BC6{ m Fc Fi Fp[2]} BC4 BC7{ VBC3 VBC2 VBC6 VBC8{ v5 FC4 Fi} VBC4 Fi FD Fi} VBC9{ BC8 BC4 VBC3 v6 Fc[7] FU10{ m Fl[7] Fs[8] FL}[8] Fi} BC3 v7 v8 FD Fi FU10 Fp[4]} BC8 v1 v2 FC4 Fi Fp FC11{ m Fi Fc}}


void  S7573C1 ::v1(){vfunc_called(this, "_ZN7S7573C12v1Ev");}
void  S7573C1 ::v2(){vfunc_called(this, "_ZN7S7573C12v2Ev");}
S7573C1 ::~S7573C1(){ note_dtor("S7573C1", this);} // tgen
S7573C1 ::S7573C1(){ note_ctor("S7573C1", this);} // tgen

static void Test_S7573C1()
{
  extern Class_Descriptor cd_S7573C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S7573C1, buf);
    S7573C1 *dp, &lv = *(dp=new (buf) S7573C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S7573C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7573C1)");
    /*is_ambiguous_... S7573C1::S7573C2 */ AMB_check_base_class_offset(lv, (S7573C3*)(S7573C2*), ABISELECT(472,260), "S7573C1");
    check_base_class_offset(lv, (S7573C3*)(S7573C7*)(S7573C5*), ABISELECT(472,260), "S7573C1");
    /*is_ambiguous_... S7573C1::S7573C2 */ AMB_check_base_class_offset(lv, (S7573C3*)(S7573C2*), ABISELECT(472,260), "S7573C1");
    check_base_class_offset(lv, (S7573C3*)(S7573C9*), ABISELECT(472,260), "S7573C1");
    /*is_ambiguous_... S7573C1::S7573C2 */ AMB_check_base_class_offset(lv, (S7573C2*), 0, "S7573C1");
    /*is_ambiguous_... S7573C1::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*), ABISELECT(488,268), "S7573C1");
    check_base_class_offset(lv, (S19737C2*)(S7573C7*)(S7573C5*), ABISELECT(488,268), "S7573C1");
    /*is_ambiguous_... S7573C5::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*)(S7573C5*), ABISELECT(56,32), "S7573C1");
    /*is_ambiguous_... S7573C5::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*)(S7573C5*), ABISELECT(80,48), "S7573C1");
    check_base_class_offset(lv, (S7573C2*)(S7573C7*)(S7573C5*), ABISELECT(560,308), "S7573C1");
    check_base_class_offset(lv, (S19737C5*)(S7573C7*)(S7573C5*), ABISELECT(576,316), "S7573C1");
    check_base_class_offset(lv, (S7573C8*)(S7573C7*)(S7573C5*), ABISELECT(600,332), "S7573C1");
    check_base_class_offset(lv, (S7573C7*)(S7573C5*), ABISELECT(16,8), "S7573C1");
    check_base_class_offset(lv, (S7573C8*)(S7573C9*), ABISELECT(688,380), "S7573C1");
    check_base_class_offset(lv, (S19737C2*)(S7573C9*), ABISELECT(776,428), "S7573C1");
    check_base_class_offset(lv, (S7573C9*)(S7573C5*), ABISELECT(688,380), "S7573C1");
    /*is_ambiguous_... S7573C5::S7573C3 */ AMB_check_base_class_offset(lv, (S7573C3*)(S7573C5*), ABISELECT(152,88), "S7573C1");
    check_base_class_offset(lv, (S7573C5*), ABISELECT(16,8), "S7573C1");
    /*is_ambiguous_... S7573C1::S7573C8 */ AMB_check_base_class_offset(lv, (S7573C8*), ABISELECT(288,156), "S7573C1");
    check_field_offset(lv, s7573c1f0, ABISELECT(376,204), "S7573C1.s7573c1f0");
    check_field_offset(lv, s7573c1f1, ABISELECT(448,244), "S7573C1.s7573c1f1");
    check_field_offset(lv, s7573c1f2, ABISELECT(456,248), "S7573C1.s7573c1f2");
    check_field_offset(lv, s7573c1f3, ABISELECT(464,252), "S7573C1.s7573c1f3");
    test_class_info(&lv, &cd_S7573C1);
    dp->~S7573C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7573C1(Test_S7573C1, "S7573C1", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN7S7573C1C1Ev();
extern void _ZN7S7573C1D1Ev();
Name_Map name_map_S7573C1[] = {
  NSPAIR(_ZN7S7573C1C1Ev),
  NSPAIR(_ZN7S7573C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7573C3;
extern VTBL_ENTRY _ZTI7S7573C3[];
extern  VTBL_ENTRY _ZTV7S7573C3[];
extern Class_Descriptor cd_S7573C2;
extern VTBL_ENTRY _ZTI7S7573C2[];
extern  VTBL_ENTRY _ZTV7S7573C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C2[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7573C2;
extern VTBL_ENTRY _ZTI7S7573C2[];
extern  VTBL_ENTRY _ZTV7S7573C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C2[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S7573C8;
extern VTBL_ENTRY _ZTI7S7573C8[];
extern  VTBL_ENTRY _ZTV7S7573C8[];
extern Class_Descriptor cd_S7573C7;
extern VTBL_ENTRY _ZTI7S7573C7[];
extern  VTBL_ENTRY _ZTV7S7573C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C7[];
extern Class_Descriptor cd_S7573C8;
extern VTBL_ENTRY _ZTI7S7573C8[];
extern  VTBL_ENTRY _ZTV7S7573C8[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7573C9;
extern VTBL_ENTRY _ZTI7S7573C9[];
extern  VTBL_ENTRY _ZTV7S7573C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C9[];
extern Class_Descriptor cd_S7573C3;
extern VTBL_ENTRY _ZTI7S7573C3[];
extern  VTBL_ENTRY _ZTV7S7573C3[];
extern Class_Descriptor cd_S7573C5;
extern VTBL_ENTRY _ZTI7S7573C5[];
extern  VTBL_ENTRY _ZTV7S7573C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C5[];
extern Class_Descriptor cd_S7573C8;
extern VTBL_ENTRY _ZTI7S7573C8[];
extern  VTBL_ENTRY _ZTV7S7573C8[];
static Base_Class bases_S7573C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7573C3,    ABISELECT(472,260), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7573C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C2,    ABISELECT(488,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
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19737C2,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7573C2,    ABISELECT(560,308), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19737C5,    ABISELECT(576,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
    8, //immediately_derived
  0, 1},
  {&cd_S7573C8,    ABISELECT(600,332), //bcp->offset
    36, //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
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7573C7,    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
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7573C8,    ABISELECT(688,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
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(776,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7573C9,    ABISELECT(688,380), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7573C3,    ABISELECT(152,88), //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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7573C5,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //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},
  {&cd_S7573C8,    ABISELECT(288,156), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7573C1[];
extern void _ZN7S7573C22v4Ev();
extern void _ZN7S7573C12v1Ev();
extern void _ZN7S7573C12v2Ev();
extern void _ZN7S7573C52v7Ev();
extern void _ZN7S7573C52v8Ev();
extern void _ZN7S7573C32v3Ev();
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C32v3Ev();
extern void _ZN7S7573C22v4Ev();
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C92v6Ev();
static  VTBL_ENTRY vtc_S7573C1[] = {
  ABISELECT(688,380),
  ABISELECT(600,332),
  ABISELECT(576,316),
  ABISELECT(560,308),
  ABISELECT(488,268),
  ABISELECT(472,260),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C1[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7573C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7573C12v2Ev,
  ABISELECT(672,372),
  ABISELECT(472,260),
  ABISELECT(584,324),
  ABISELECT(560,308),
  ABISELECT(544,300),
  ABISELECT(456,252),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7573C1[0]),
  (VTBL_ENTRY)&_ZN7S7573C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7573C52v8Ev,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI7S7573C1[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7573C1[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  0,
  ABISELECT(-472,-260),
  (VTBL_ENTRY)&(_ZTI7S7573C1[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-560,-308),
  (VTBL_ENTRY)&(_ZTI7S7573C1[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
  0,
  ABISELECT(-600,-332),
  (VTBL_ENTRY)&(_ZTI7S7573C1[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-688,-380),
  (VTBL_ENTRY)&(_ZTI7S7573C1[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7573C92v6Ev,
};
extern VTBL_ENTRY _ZTV7S7573C1[];
extern void _ZN7S7573C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C2__A__7S7573C1[] = {
  ABISELECT(472,260),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C2__A__7S7573C1[] = {
  0,
  ABISELECT(-472,-260),
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern void _ZN7S7573C52v7Ev();
extern void _ZN7S7573C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C5__7S7573C1[] = {
  ABISELECT(672,372),
  ABISELECT(472,260),
  ABISELECT(584,324),
  ABISELECT(560,308),
  ABISELECT(544,300),
  ABISELECT(456,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7573C52v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7573C77S7573C5__7S7573C1[] = {
  ABISELECT(472,260),
  ABISELECT(584,324),
  ABISELECT(560,308),
  ABISELECT(544,300),
  ABISELECT(456,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C77S7573C5__7S7573C1[] = {
  0,
  ABISELECT(-456,-252),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern void _ZN7S7573C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C2__7S7573C77S7573C5__7S7573C1[] = {
  0,
  ABISELECT(-88,-48),
  ABISELECT(-544,-300),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
};
extern void _ZN7S7573C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C8__7S7573C77S7573C5__7S7573C1[] = {
  0,
  ABISELECT(-584,-324),
  (VTBL_ENTRY)&(_ZTI7S7573C7[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C5__7S7573C1[] = {
  0,
  ABISELECT(-456,-252),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern void _ZN7S7573C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C2__7S7573C5__7S7573C1[] = {
  0,
  ABISELECT(-88,-48),
  ABISELECT(-544,-300),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
};
extern void _ZN7S7573C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C8__7S7573C5__7S7573C1[] = {
  0,
  ABISELECT(-584,-324),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
};
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C92v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C9__7S7573C5__7S7573C1[] = {
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-672,-372),
  (VTBL_ENTRY)&(_ZTI7S7573C5[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7573C92v6Ev,
};
extern void _ZN7S7573C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C2__A1__7S7573C1[] = {
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C22v4Ev,
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C2__A1__7S7573C1[] = {
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI7S7573C2[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
extern void _ZN7S7573C82v5Ev();
extern void _ZN7S7573C92v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C9__7S7573C1[] = {
  ABISELECT(-216,-120),
  0,
  (VTBL_ENTRY)&(_ZTI7S7573C9[0]),
  (VTBL_ENTRY)&_ZN7S7573C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7573C92v6Ev,
};
extern void _ZN7S7573C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7573C3__7S7573C9__7S7573C1[] = {
  0,
  ABISELECT(216,120),
  (VTBL_ENTRY)&(_ZTI7S7573C9[0]),
  (VTBL_ENTRY)&_ZN7S7573C32v3Ev,
};
static  VTT_ENTRY vtt_S7573C1[] = {
  {&(_ZTV7S7573C1[8]),  8,47},
  {&(_tg__ZTV7S7573C2__A__7S7573C1[3]),  3,4},
  {&(_tg__ZTV7S7573C3__7S7573C2__A__7S7573C1[3]),  3,4},
  {&(_tg__ZTV7S7573C5__7S7573C1[8]),  8,10},
  {&(_tg__ZTV7S7573C77S7573C5__7S7573C1[7]),  7,7},
  {&(_tg__ZTV7S7573C3__7S7573C77S7573C5__7S7573C1[3]),  3,4},
  {&(_tg__ZTV7S7573C2__7S7573C77S7573C5__7S7573C1[4]),  4,5},
  {&(_tg__ZTV7S7573C8__7S7573C77S7573C5__7S7573C1[3]),  3,4},
  {&(_tg__ZTV7S7573C3__7S7573C5__7S7573C1[3]),  3,4},
  {&(_tg__ZTV7S7573C2__7S7573C5__7S7573C1[4]),  4,5},
  {&(_tg__ZTV7S7573C8__7S7573C5__7S7573C1[3]),  3,4},
  {&(_tg__ZTV7S7573C9__7S7573C5__7S7573C1[5]),  5,7},
  {&(_ZTV7S7573C1[30]),  30,47},
  {&(_ZTV7S7573C1[19]),  19,47},
  {&(_ZTV7S7573C1[35]),  35,47},
  {&(_ZTV7S7573C1[39]),  39,47},
  {&(_ZTV7S7573C1[45]),  45,47},
  {&(_tg__ZTV7S7573C2__A1__7S7573C1[3]),  3,4},
  {&(_tg__ZTV7S7573C3__7S7573C2__A1__7S7573C1[3]),  3,4},
  {&(_tg__ZTV7S7573C9__7S7573C1[3]),  3,5},
  {&(_tg__ZTV7S7573C3__7S7573C9__7S7573C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7573C1[];
extern  VTBL_ENTRY _ZTV7S7573C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7573C1[];
Class_Descriptor cd_S7573C1 = {  "S7573C1", // class name
  bases_S7573C1, 15,
  &(vtc_S7573C1[0]), // expected_vtbl_contents
  &(vtt_S7573C1[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI7S7573C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7573C1),47, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7573C1),21, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19439C5  {
  long s19439c5f0;
  void *s19439c5f1;
  virtual  ~S19439C5(); // _ZN8S19439C5D1Ev
  virtual void  v2(); // _ZN8S19439C52v2Ev
  S19439C5(); // tgen
};
//SIG(-1 S19439C5) C1{ vd v1 Fl Fp}


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

static void Test_S19439C5()
{
  extern Class_Descriptor cd_S19439C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19439C5, buf);
    S19439C5 *dp, &lv = *(dp=new (buf) S19439C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19439C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19439C5)");
    check_field_offset(lv, s19439c5f0, ABISELECT(8,4), "S19439C5.s19439c5f0");
    check_field_offset(lv, s19439c5f1, ABISELECT(16,8), "S19439C5.s19439c5f1");
    test_class_info(&lv, &cd_S19439C5);
    dp->~S19439C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C5(Test_S19439C5, "S19439C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19439C5C1Ev();
extern void _ZN8S19439C5D1Ev();
Name_Map name_map_S19439C5[] = {
  NSPAIR(_ZN8S19439C5C1Ev),
  NSPAIR(_ZN8S19439C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19439C5[];
extern void _ZN8S19439C5D1Ev();
extern void _ZN8S19439C5D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY vtc_S19439C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C5[0]),
  (VTBL_ENTRY)&_ZN8S19439C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
Class_Descriptor cd_S19439C5 = {  "S19439C5", // class name
  0,0,//no base classes
  &(vtc_S19439C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19439C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19439C5),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  S19439C4  : S19439C5 {
  void *s19439c4f0;
  short s19439c4f1:2;
  virtual  ~S19439C4(); // _ZN8S19439C4D1Ev
  S19439C4(); // tgen
};
//SIG(-1 S19439C4) C1{ BC2{ vd v1 Fl Fp} vd Fp Fs:2}


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

static void Test_S19439C4()
{
  extern Class_Descriptor cd_S19439C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19439C4, buf);
    S19439C4 *dp, &lv = *(dp=new (buf) S19439C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19439C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19439C4)");
    check_base_class_offset(lv, (S19439C5*), 0, "S19439C4");
    check_field_offset(lv, s19439c4f0, ABISELECT(24,12), "S19439C4.s19439c4f0");
    set_bf_and_test(lv, s19439c4f1, ABISELECT(32,16), 0, 2, 1, "S19439C4");
    set_bf_and_test(lv, s19439c4f1, ABISELECT(32,16), 0, 2, hide_sll(1LL<<1), "S19439C4");
    test_class_info(&lv, &cd_S19439C4);
    dp->~S19439C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C4(Test_S19439C4, "S19439C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19439C4C1Ev();
extern void _ZN8S19439C4D1Ev();
Name_Map name_map_S19439C4[] = {
  NSPAIR(_ZN8S19439C4C1Ev),
  NSPAIR(_ZN8S19439C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
static Base_Class bases_S19439C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19439C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19439C4[];
extern void _ZN8S19439C4D1Ev();
extern void _ZN8S19439C4D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY vtc_S19439C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C4[0]),
  (VTBL_ENTRY)&_ZN8S19439C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
Class_Descriptor cd_S19439C4 = {  "S19439C4", // class name
  bases_S19439C4, 1,
  &(vtc_S19439C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19439C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19439C4),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  S19439C6  : S19439C5 , virtual S19439C4 {
  long double s19439c6f0;
  void *s19439c6f1;
  virtual  ~S19439C6(); // _ZN8S19439C6D2Ev
  S19439C6(); // tgen
};
//SIG(-1 S19439C6) C1{ BC2{ vd v1 Fl Fp} VBC3{ BC2 vd Fp Fs:2} vd FD Fp}


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

static void Test_S19439C6()
{
  extern Class_Descriptor cd_S19439C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19439C6, buf);
    S19439C6 *dp, &lv = *(dp=new (buf) S19439C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19439C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19439C6)");
    /*is_ambiguous_... S19439C6::S19439C5 */ AMB_check_base_class_offset(lv, (S19439C5*), 0, "S19439C6");
    check_base_class_offset(lv, (S19439C5*)(S19439C4*), ABISELECT(56,28), "S19439C6");
    check_base_class_offset(lv, (S19439C4*), ABISELECT(56,28), "S19439C6");
    check_field_offset(lv, s19439c6f0, ABISELECT(32,12), "S19439C6.s19439c6f0");
    check_field_offset(lv, s19439c6f1, ABISELECT(48,24), "S19439C6.s19439c6f1");
    test_class_info(&lv, &cd_S19439C6);
    dp->~S19439C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C6(Test_S19439C6, "S19439C6", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19439C6C1Ev();
extern void _ZN8S19439C6D2Ev();
Name_Map name_map_S19439C6[] = {
  NSPAIR(_ZN8S19439C6C1Ev),
  NSPAIR(_ZN8S19439C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
static Base_Class bases_S19439C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19439C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19439C5,    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_S19439C4,    ABISELECT(56,28), //bcp->offset
    6, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19439C6[];
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S19439C6D1Ev,_ZThn28_N8S19439C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S19439C6D0Ev,_ZThn28_N8S19439C6D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY vtc_S19439C6[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19439C6[];
static  VTT_ENTRY vtt_S19439C6[] = {
  {&(_ZTV8S19439C6[3]),  3,13},
  {&(_ZTV8S19439C6[10]),  10,13},
};
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
static VTBL_ENTRY alt_thunk_names129[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19439C6D0Ev,_ZThn28_N8S19439C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19439C6D1Ev,_ZThn28_N8S19439C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19439C6 = {  "S19439C6", // class name
  bases_S19439C6, 3,
  &(vtc_S19439C6[0]), // expected_vtbl_contents
  &(vtt_S19439C6[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19439C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19439C6),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19439C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names129,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19439C3  : virtual S19439C4 , virtual S19439C6 , virtual S19439C5 {
  int s19439c3f0:32;
  void *s19439c3f1;
  int s19439c3f2;
  virtual  ~S19439C3(); // _ZN8S19439C3D2Ev
  virtual void  v3(); // _ZN8S19439C32v3Ev
  S19439C3(); // tgen
};
//SIG(-1 S19439C3) C1{ VBC2{ BC3{ vd v2 Fl Fp} vd Fp Fs:2} VBC4{ BC3 VBC2 vd FD Fp} VBC3 vd v1 Fi:32 Fp Fi}


 S19439C3 ::~S19439C3(){ note_dtor("S19439C3", this);}
void  S19439C3 ::v3(){vfunc_called(this, "_ZN8S19439C32v3Ev");}
S19439C3 ::S19439C3(){ note_ctor("S19439C3", this);} // tgen

static void Test_S19439C3()
{
  extern Class_Descriptor cd_S19439C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S19439C3, buf);
    S19439C3 *dp, &lv = *(dp=new (buf) S19439C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S19439C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19439C3)");
    check_base_class_offset(lv, (S19439C5*)(S19439C4*), ABISELECT(32,16), "S19439C3");
    check_base_class_offset(lv, (S19439C4*), ABISELECT(32,16), "S19439C3");
    check_base_class_offset(lv, (S19439C4*)(S19439C6*), ABISELECT(32,16), "S19439C3");
    /*is_ambiguous_... S19439C6::S19439C5 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*), ABISELECT(80,36), "S19439C3");
    check_base_class_offset(lv, (S19439C6*), ABISELECT(80,36), "S19439C3");
    /*is_ambiguous_... S19439C3::S19439C5 */ AMB_check_base_class_offset(lv, (S19439C5*), ABISELECT(136,64), "S19439C3");
    set_bf_and_test(lv, s19439c3f0, ABISELECT(8,4), 0, 32, 1, "S19439C3");
    set_bf_and_test(lv, s19439c3f0, ABISELECT(8,4), 0, 32, hide_sll(1LL<<31), "S19439C3");
    check_field_offset(lv, s19439c3f1, ABISELECT(16,8), "S19439C3.s19439c3f1");
    check_field_offset(lv, s19439c3f2, ABISELECT(24,12), "S19439C3.s19439c3f2");
    test_class_info(&lv, &cd_S19439C3);
    dp->~S19439C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C3(Test_S19439C3, "S19439C3", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN8S19439C3C1Ev();
extern void _ZN8S19439C3D2Ev();
Name_Map name_map_S19439C3[] = {
  NSPAIR(_ZN8S19439C3C1Ev),
  NSPAIR(_ZN8S19439C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
static Base_Class bases_S19439C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19439C5,    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, 0},
  {&cd_S19439C4,    ABISELECT(32,16), //bcp->offset
    8, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19439C5,    ABISELECT(80,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
    3, //immediately_derived
  0, 0},
  {&cd_S19439C6,    ABISELECT(80,36), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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_S19439C5,    ABISELECT(136,64), //bcp->offset
    23, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19439C3[];
extern void _ZN8S19439C3D1Ev();
extern void _ZN8S19439C3D0Ev();
extern void _ZN8S19439C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19439C3D1Ev,_ZThn16_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S19439C3D0Ev,_ZThn16_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19439C3D1Ev,_ZThn36_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19439C3D0Ev,_ZThn36_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn136_N8S19439C3D1Ev,_ZThn64_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn136_N8S19439C3D0Ev,_ZThn64_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY vtc_S19439C3[] = {
  ABISELECT(136,64),
  ABISELECT(80,36),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&_ZN8S19439C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-48,-20),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-136,-64),
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19439C3[];
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C3[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C6__8S19439C3[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
static  VTT_ENTRY vtt_S19439C3[] = {
  {&(_ZTV8S19439C3[5]),  5,30},
  {&(_ZTV8S19439C3[12]),  12,30},
  {&(_ZTV8S19439C3[20]),  20,30},
  {&(_ZTV8S19439C3[27]),  27,30},
  {&(_tg__ZTV8S19439C6__8S19439C3[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C6__8S19439C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19439C3[];
extern  VTBL_ENTRY _ZTV8S19439C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C3[];
static VTBL_ENTRY alt_thunk_names130[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19439C3D0Ev,_ZThn36_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19439C3D1Ev,_ZThn36_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19439C3D0Ev,_ZThn64_N8S19439C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19439C3D0Ev,_ZThn16_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19439C3D1Ev,_ZThn64_N8S19439C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19439C3D1Ev,_ZThn16_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19439C3 = {  "S19439C3", // class name
  bases_S19439C3, 5,
  &(vtc_S19439C3[0]), // expected_vtbl_contents
  &(vtt_S19439C3[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI8S19439C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19439C3),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19439C3),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names130,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19439C2  : S19439C3 {
  int s19439c2f0[2];
  ::S19439C6 s19439c2f1;
  int s19439c2f2;
  long s19439c2f3;
  virtual  ~S19439C2(); // _ZN8S19439C2D2Ev
  virtual void  v4(); // _ZN8S19439C22v4Ev
  virtual void  v5(); // _ZN8S19439C22v5Ev
  S19439C2(); // tgen
};
//SIG(-1 S19439C2) C1{ BC2{ VBC3{ BC4{ vd v3 Fl Fp} vd Fp Fs:2} VBC5{ BC4 VBC3 vd FD Fp} VBC4 vd v4 Fi:32 Fp Fi} vd v1 v2 Fi[2] FC5 Fi Fl}


 S19439C2 ::~S19439C2(){ note_dtor("S19439C2", this);}
void  S19439C2 ::v4(){vfunc_called(this, "_ZN8S19439C22v4Ev");}
void  S19439C2 ::v5(){vfunc_called(this, "_ZN8S19439C22v5Ev");}
S19439C2 ::S19439C2(){ note_ctor("S19439C2", this);} // tgen

static void Test_S19439C2()
{
  extern Class_Descriptor cd_S19439C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,36)];
    init_test(&cd_S19439C2, buf);
    S19439C2 *dp, &lv = *(dp=new (buf) S19439C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,140), "sizeof(S19439C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19439C2)");
    check_base_class_offset(lv, (S19439C5*)(S19439C4*), ABISELECT(160,80), "S19439C2");
    check_base_class_offset(lv, (S19439C4*)(S19439C3*), ABISELECT(160,80), "S19439C2");
    check_base_class_offset(lv, (S19439C4*)(S19439C6*), ABISELECT(160,80), "S19439C2");
    /*is_ambiguous_... S19439C6::S19439C5 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*), ABISELECT(208,100), "S19439C2");
    check_base_class_offset(lv, (S19439C6*)(S19439C3*), ABISELECT(208,100), "S19439C2");
    /*is_ambiguous_... S19439C3::S19439C5 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C3*), ABISELECT(264,128), "S19439C2");
    check_base_class_offset(lv, (S19439C3*), 0, "S19439C2");
    check_field_offset(lv, s19439c2f0, ABISELECT(28,16), "S19439C2.s19439c2f0");
    check_field_offset(lv, s19439c2f1, ABISELECT(48,24), "S19439C2.s19439c2f1");
    check_field_offset(lv, s19439c2f2, ABISELECT(144,72), "S19439C2.s19439c2f2");
    check_field_offset(lv, s19439c2f3, ABISELECT(152,76), "S19439C2.s19439c2f3");
    test_class_info(&lv, &cd_S19439C2);
    dp->~S19439C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C2(Test_S19439C2, "S19439C2", ABISELECT(288,140));

#else // __cplusplus

extern void _ZN8S19439C2C1Ev();
extern void _ZN8S19439C2D2Ev();
Name_Map name_map_S19439C2[] = {
  NSPAIR(_ZN8S19439C2C1Ev),
  NSPAIR(_ZN8S19439C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C3;
extern VTBL_ENTRY _ZTI8S19439C3[];
extern  VTBL_ENTRY _ZTV8S19439C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C3[];
static Base_Class bases_S19439C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19439C5,    ABISELECT(160,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
    1, //immediately_derived
  0, 0},
  {&cd_S19439C4,    ABISELECT(160,80), //bcp->offset
    10, //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_S19439C5,    ABISELECT(208,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19439C6,    ABISELECT(208,100), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19439C5,    ABISELECT(264,128), //bcp->offset
    25, //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
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19439C3,    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 _ZTI8S19439C2[];
extern void _ZN8S19439C2D1Ev();
extern void _ZN8S19439C2D0Ev();
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev)();
extern void ABISELECT(_ZThn160_N8S19439C2D1Ev,_ZThn80_N8S19439C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev)();
extern void ABISELECT(_ZThn160_N8S19439C2D0Ev,_ZThn80_N8S19439C2D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S19439C2D1Ev,_ZThn100_N8S19439C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S19439C2D0Ev,_ZThn100_N8S19439C2D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev)();
extern void ABISELECT(_ZThn264_N8S19439C2D1Ev,_ZThn128_N8S19439C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev)();
extern void ABISELECT(_ZThn264_N8S19439C2D0Ev,_ZThn128_N8S19439C2D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY vtc_S19439C2[] = {
  ABISELECT(264,128),
  ABISELECT(208,100),
  ABISELECT(160,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&_ZN8S19439C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
  0,
  ABISELECT(-160,-80),
  ABISELECT(-160,-80),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-208,-100),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-264,-128),
  ABISELECT(-264,-128),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19439C2[];
extern void _ZN8S19439C3D1Ev();
extern void _ZN8S19439C3D0Ev();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C3__8S19439C2[] = {
  ABISELECT(264,128),
  ABISELECT(208,100),
  ABISELECT(160,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&_ZN8S19439C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn160_N8S19439C3D1Ev,_ZThn80_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn160_N8S19439C3D0Ev,_ZThn80_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C3__8S19439C2[] = {
  0,
  ABISELECT(-160,-80),
  ABISELECT(-160,-80),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn208_N8S19439C3D1Ev,_ZThn100_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn208_N8S19439C3D0Ev,_ZThn100_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C3__8S19439C2[] = {
  0,
  ABISELECT(-208,-100),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn264_N8S19439C3D1Ev,_ZThn128_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn264_N8S19439C3D0Ev,_ZThn128_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C3__8S19439C2[] = {
  0,
  ABISELECT(-264,-128),
  ABISELECT(-264,-128),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C2[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C6__8S19439C2[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
static  VTT_ENTRY vtt_S19439C2[] = {
  {&(_ZTV8S19439C2[5]),  5,32},
  {&(_tg__ZTV8S19439C3__8S19439C2[5]),  5,8},
  {&(_tg__ZTV8S19439C4__8S19439C3__8S19439C2[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C3__8S19439C2[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C3__8S19439C2[4]),  4,7},
  {&(_ZTV8S19439C2[14]),  14,32},
  {&(_ZTV8S19439C2[22]),  22,32},
  {&(_ZTV8S19439C2[29]),  29,32},
  {&(_tg__ZTV8S19439C6__8S19439C2[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C6__8S19439C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19439C2[];
extern  VTBL_ENTRY _ZTV8S19439C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C2[];
static VTBL_ENTRY alt_thunk_names131[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19439C3D0Ev,_ZThn100_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19439C3D1Ev,_ZThn100_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19439C3D0Ev,_ZThn128_N8S19439C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19439C3D0Ev,_ZThn80_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19439C3D1Ev,_ZThn128_N8S19439C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19439C3D1Ev,_ZThn80_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19439C2D0Ev,_ZThn100_N8S19439C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19439C2D1Ev,_ZThn100_N8S19439C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19439C2D0Ev,_ZThn128_N8S19439C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19439C2D0Ev,_ZThn80_N8S19439C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19439C2D1Ev,_ZThn128_N8S19439C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19439C2D1Ev,_ZThn80_N8S19439C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19439C2 = {  "S19439C2", // class name
  bases_S19439C2, 6,
  &(vtc_S19439C2[0]), // expected_vtbl_contents
  &(vtt_S19439C2[0]), // expected_vtt_contents
  ABISELECT(288,140), // object size
  NSPAIRA(_ZTI8S19439C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19439C2),32, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19439C2),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names131,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19439C7  : virtual S19439C3 , virtual S19439C2 , S19439C6 , S19439C4 {
  ::S19439C6 s19439c7f0;
  void *s19439c7f1;
  ::S19439C4 s19439c7f2[2];
  void *s19439c7f3[5];
  ~S19439C7(); // tgen
  S19439C7(); // tgen
};
//SIG(-1 S19439C7) C1{ VBC2{ VBC3{ BC4{ vd v1 Fl Fp} vd Fp Fs:2} VBC5{ BC4 VBC3 vd FD Fp} VBC4 vd v2 Fi:32 Fp Fi} VBC6{ BC2 vd v3 v4 Fi[2] FC5 Fi Fl} BC5 BC3 FC5 Fp FC3[2] Fp[5]}


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

static void Test_S19439C7()
{
  extern Class_Descriptor cd_S19439C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,80)];
    init_test(&cd_S19439C7, buf);
    S19439C7 *dp, &lv = *(dp=new (buf) S19439C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,316), "sizeof(S19439C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19439C7)");
    /*is_ambiguous_... S19439C7::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C4*), ABISELECT(352,176), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C3*), ABISELECT(352,176), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C6*), ABISELECT(352,176), "S19439C7");
    check_base_class_offset(lv, (S19439C4*)(S19439C3*)(S19439C2*), ABISELECT(352,176), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C6*), ABISELECT(352,176), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*), ABISELECT(400,196), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C6*)(S19439C3*), ABISELECT(400,196), "S19439C7");
    check_base_class_offset(lv, (S19439C6*)(S19439C3*)(S19439C2*), ABISELECT(400,196), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C3*), ABISELECT(456,224), "S19439C7");
    /*is_ambiguous_... S19439C3::S19439C5 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C3*)(S19439C2*), ABISELECT(456,224), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C3*), ABISELECT(320,160), "S19439C7");
    check_base_class_offset(lv, (S19439C3*)(S19439C2*), ABISELECT(480,236), "S19439C7");
    check_base_class_offset(lv, (S19439C2*), ABISELECT(480,236), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*), 0, "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C6*), 0, "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C4*), ABISELECT(56,28), "S19439C7");
    /*is_ambiguous_... S19439C7::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C4*), ABISELECT(56,28), "S19439C7");
    check_field_offset(lv, s19439c7f0, ABISELECT(96,48), "S19439C7.s19439c7f0");
    check_field_offset(lv, s19439c7f1, ABISELECT(192,96), "S19439C7.s19439c7f1");
    check_field_offset(lv, s19439c7f2, ABISELECT(200,100), "S19439C7.s19439c7f2");
    check_field_offset(lv, s19439c7f3, ABISELECT(280,140), "S19439C7.s19439c7f3");
    test_class_info(&lv, &cd_S19439C7);
    dp->~S19439C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C7(Test_S19439C7, "S19439C7", ABISELECT(640,316));

#else // __cplusplus

extern void _ZN8S19439C7C1Ev();
extern void _ZN8S19439C7D1Ev();
Name_Map name_map_S19439C7[] = {
  NSPAIR(_ZN8S19439C7C1Ev),
  NSPAIR(_ZN8S19439C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C3;
extern VTBL_ENTRY _ZTI8S19439C3[];
extern  VTBL_ENTRY _ZTV8S19439C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C3[];
extern Class_Descriptor cd_S19439C3;
extern VTBL_ENTRY _ZTI8S19439C3[];
extern  VTBL_ENTRY _ZTV8S19439C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C3[];
extern Class_Descriptor cd_S19439C2;
extern VTBL_ENTRY _ZTI8S19439C2[];
extern  VTBL_ENTRY _ZTV8S19439C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C2[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
static Base_Class bases_S19439C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19439C5,    ABISELECT(352,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
    1, //immediately_derived
  0, 0},
  {&cd_S19439C4,    ABISELECT(352,176), //bcp->offset
    25, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19439C5,    ABISELECT(400,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19439C6,    ABISELECT(400,196), //bcp->offset
    32, //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
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19439C5,    ABISELECT(456,224), //bcp->offset
    40, //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
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19439C3,    ABISELECT(320,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //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_S19439C3,    ABISELECT(480,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19439C2,    ABISELECT(480,236), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19439C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19439C6,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19439C5,    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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19439C4,    ABISELECT(56,28), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19439C7[];
extern void _ZN8S19439C7D1Ev();
extern void _ZN8S19439C7D0Ev();
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZThn56_N8S19439C7D1Ev,_ZThn28_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19439C7D0Ev,_ZThn28_N8S19439C7D0Ev)();
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn320_N8S19439C7D1Ev,_ZThn160_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn320_N8S19439C7D0Ev,_ZThn160_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn352_N8S19439C7D1Ev,_ZThn176_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn352_N8S19439C7D0Ev,_ZThn176_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn400_N8S19439C7D1Ev,_ZThn196_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn400_N8S19439C7D0Ev,_ZThn196_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn456_N8S19439C7D1Ev,_ZThn224_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn456_N8S19439C7D0Ev,_ZThn224_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn480_N8S19439C7D1Ev,_ZThn236_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn480_N8S19439C7D0Ev,_ZThn236_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY vtc_S19439C7[] = {
  ABISELECT(480,236),
  ABISELECT(456,224),
  ABISELECT(400,196),
  ABISELECT(320,160),
  ABISELECT(352,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&_ZN8S19439C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19439C7D1Ev,_ZThn28_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19439C7D0Ev,_ZThn28_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-320,-160),
  ABISELECT(136,64),
  ABISELECT(80,36),
  ABISELECT(32,16),
  ABISELECT(-320,-160),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  0,
  ABISELECT(-352,-176),
  ABISELECT(-352,-176),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-400,-196),
  ABISELECT(-48,-20),
  ABISELECT(-400,-196),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-456,-224),
  ABISELECT(-456,-224),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  0,
  0,
  ABISELECT(-480,-236),
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(-128,-60),
  ABISELECT(-480,-236),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S19439C7[];
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__A__8S19439C7[] = {
  ABISELECT(352,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZThn352_N8S19439C6D1Ev,_ZThn176_N8S19439C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void ABISELECT(_ZThn352_N8S19439C6D0Ev,_ZThn176_N8S19439C6D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C6__A__8S19439C7[] = {
  0,
  ABISELECT(-352,-176),
  ABISELECT(-352,-176),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C3D1Ev();
extern void _ZN8S19439C3D0Ev();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C3__8S19439C7[] = {
  ABISELECT(136,64),
  ABISELECT(80,36),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&_ZN8S19439C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19439C3D1Ev,_ZThn16_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S19439C3D0Ev,_ZThn16_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C3__8S19439C7[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19439C3D1Ev,_ZThn36_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19439C3D0Ev,_ZThn36_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C3__8S19439C7[] = {
  0,
  ABISELECT(-80,-36),
  ABISELECT(-48,-20),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn136_N8S19439C3D1Ev,_ZThn64_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn136_N8S19439C3D0Ev,_ZThn64_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C3__8S19439C7[] = {
  0,
  ABISELECT(-136,-64),
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C7[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C6__8S19439C7[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C2D1Ev();
extern void _ZN8S19439C2D0Ev();
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C2__8S19439C7[] = {
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(-128,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&_ZN8S19439C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
extern void _ZN8S19439C3D1Ev();
extern void _ZN8S19439C3D0Ev();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C38S19439C2__A1__8S19439C7[] = {
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(-128,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&_ZN8S19439C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C38S19439C2__A1__8S19439C7[] = {
  0,
  ABISELECT(128,60),
  ABISELECT(128,60),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C38S19439C2__A1__8S19439C7[] = {
  0,
  ABISELECT(80,40),
  ABISELECT(-48,-20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C38S19439C2__A1__8S19439C7[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C2__8S19439C7[] = {
  0,
  ABISELECT(128,60),
  ABISELECT(128,60),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C2__8S19439C7[] = {
  0,
  ABISELECT(80,40),
  ABISELECT(-48,-20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C2__8S19439C7[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
static  VTT_ENTRY vtt_S19439C7[] = {
  {&(_ZTV8S19439C7[7]),  7,61},
  {&(_tg__ZTV8S19439C6__A__8S19439C7[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C6__A__8S19439C7[4]),  4,7},
  {&(_ZTV8S19439C7[22]),  22,61},
  {&(_ZTV8S19439C7[29]),  29,61},
  {&(_ZTV8S19439C7[37]),  37,61},
  {&(_ZTV8S19439C7[44]),  44,61},
  {&(_ZTV8S19439C7[56]),  56,61},
  {&(_tg__ZTV8S19439C3__8S19439C7[5]),  5,8},
  {&(_tg__ZTV8S19439C4__8S19439C3__8S19439C7[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C3__8S19439C7[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C3__8S19439C7[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C7[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C6__8S19439C7[4]),  4,7},
  {&(_tg__ZTV8S19439C2__8S19439C7[5]),  5,10},
  {&(_tg__ZTV8S19439C38S19439C2__A1__8S19439C7[5]),  5,8},
  {&(_tg__ZTV8S19439C4__8S19439C38S19439C2__A1__8S19439C7[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C38S19439C2__A1__8S19439C7[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C38S19439C2__A1__8S19439C7[4]),  4,7},
  {&(_tg__ZTV8S19439C4__8S19439C2__8S19439C7[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C2__8S19439C7[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C2__8S19439C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19439C7[];
extern  VTBL_ENTRY _ZTV8S19439C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C7[];
static VTBL_ENTRY alt_thunk_names132[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19439C3D0Ev,_ZThn36_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19439C3D1Ev,_ZThn36_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19439C3D0Ev,_ZThn64_N8S19439C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19439C3D0Ev,_ZThn16_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19439C3D1Ev,_ZThn64_N8S19439C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19439C3D1Ev,_ZThn16_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19439C6D0Ev,_ZThn176_N8S19439C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19439C6D1Ev,_ZThn176_N8S19439C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19439C7D0Ev,_ZThn196_N8S19439C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19439C7D1Ev,_ZThn196_N8S19439C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S19439C7D0Ev,_ZThn224_N8S19439C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19439C7D0Ev,_ZThn176_N8S19439C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S19439C7D1Ev,_ZThn224_N8S19439C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19439C7D1Ev,_ZThn176_N8S19439C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19439C7D0Ev,_ZThn236_N8S19439C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19439C7D0Ev,_ZThn160_N8S19439C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19439C7D1Ev,_ZThn236_N8S19439C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19439C7D1Ev,_ZThn160_N8S19439C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19439C7 = {  "S19439C7", // class name
  bases_S19439C7, 12,
  &(vtc_S19439C7[0]), // expected_vtbl_contents
  &(vtt_S19439C7[0]), // expected_vtt_contents
  ABISELECT(640,316), // object size
  NSPAIRA(_ZTI8S19439C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19439C7),61, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19439C7),22, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names132,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19439C8  : S19439C5 {
  virtual  ~S19439C8(); // _ZN8S19439C8D1Ev
  virtual void  v6(); // _ZN8S19439C82v6Ev
  virtual void  v7(); // _ZN8S19439C82v7Ev
  virtual void  v8(); // _ZN8S19439C82v8Ev
  S19439C8(); // tgen
};
//SIG(-1 S19439C8) C1{ BC2{ vd v4 Fl Fp} vd v1 v2 v3}


 S19439C8 ::~S19439C8(){ note_dtor("S19439C8", this);}
void  S19439C8 ::v6(){vfunc_called(this, "_ZN8S19439C82v6Ev");}
void  S19439C8 ::v7(){vfunc_called(this, "_ZN8S19439C82v7Ev");}
void  S19439C8 ::v8(){vfunc_called(this, "_ZN8S19439C82v8Ev");}
S19439C8 ::S19439C8(){ note_ctor("S19439C8", this);} // tgen

static void Test_S19439C8()
{
  extern Class_Descriptor cd_S19439C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19439C8, buf);
    S19439C8 *dp, &lv = *(dp=new (buf) S19439C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19439C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19439C8)");
    check_base_class_offset(lv, (S19439C5*), 0, "S19439C8");
    test_class_info(&lv, &cd_S19439C8);
    dp->~S19439C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C8(Test_S19439C8, "S19439C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19439C8C1Ev();
extern void _ZN8S19439C8D1Ev();
Name_Map name_map_S19439C8[] = {
  NSPAIR(_ZN8S19439C8C1Ev),
  NSPAIR(_ZN8S19439C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
static Base_Class bases_S19439C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19439C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19439C8[];
extern void _ZN8S19439C8D1Ev();
extern void _ZN8S19439C8D0Ev();
extern void _ZN8S19439C52v2Ev();
extern void _ZN8S19439C82v6Ev();
extern void _ZN8S19439C82v7Ev();
extern void _ZN8S19439C82v8Ev();
static  VTBL_ENTRY vtc_S19439C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C8[0]),
  (VTBL_ENTRY)&_ZN8S19439C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19439C82v6Ev,
  (VTBL_ENTRY)&_ZN8S19439C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19439C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S19439C8[];
extern  VTBL_ENTRY _ZTV8S19439C8[];
Class_Descriptor cd_S19439C8 = {  "S19439C8", // class name
  bases_S19439C8, 1,
  &(vtc_S19439C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19439C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19439C8),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  S19439C9  : virtual S19439C3 , virtual S19439C2 , S19439C7 {
  ::S19439C3 s19439c9f0;
  __tsi64 s19439c9f1;
  ::S468C20_nt s19439c9f2;
  virtual  ~S19439C9(); // _ZN8S19439C9D2Ev
  S19439C9(); // tgen
};
//SIG(-1 S19439C9) C1{ VBC2{ VBC3{ BC4{ vd v1 Fl Fp} vd Fp Fs:2} VBC5{ BC4 VBC3 vd FD Fp} VBC4 vd v2 Fi:32 Fp Fi} VBC6{ BC2 vd v3 v4 Fi[2] FC5 Fi Fl} BC7{ VBC2 VBC6 BC5 BC3 FC5 Fp FC3[2] Fp[5]} vd FC2 FL FC8{}}


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

static void Test_S19439C9()
{
  extern Class_Descriptor cd_S19439C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(52,102)];
    init_test(&cd_S19439C9, buf);
    S19439C9 *dp, &lv = *(dp=new (buf) S19439C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(816,404), "sizeof(S19439C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19439C9)");
    /*is_ambiguous_... S19439C9::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C4*), ABISELECT(528,264), "S19439C9");
    /*is_ambiguous_... S19439C9::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C3*), ABISELECT(528,264), "S19439C9");
    /*is_ambiguous_... S19439C9::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C6*), ABISELECT(528,264), "S19439C9");
    check_base_class_offset(lv, (S19439C4*)(S19439C3*)(S19439C2*), ABISELECT(528,264), "S19439C9");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C6*)(S19439C7*), ABISELECT(528,264), "S19439C9");
    /*is_ambiguous_... S19439C9::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*), ABISELECT(576,284), "S19439C9");
    /*is_ambiguous_... S19439C9::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C6*)(S19439C3*), ABISELECT(576,284), "S19439C9");
    check_base_class_offset(lv, (S19439C6*)(S19439C3*)(S19439C2*), ABISELECT(576,284), "S19439C9");
    /*is_ambiguous_... S19439C9::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C3*), ABISELECT(632,312), "S19439C9");
    /*is_ambiguous_... S19439C3::S19439C5 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C3*)(S19439C2*), ABISELECT(632,312), "S19439C9");
    /*is_ambiguous_... S19439C9::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C3*), ABISELECT(496,248), "S19439C9");
    /*is_ambiguous_... S19439C7::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C3*)(S19439C7*), ABISELECT(496,248), "S19439C9");
    check_base_class_offset(lv, (S19439C3*)(S19439C2*), ABISELECT(656,324), "S19439C9");
    check_base_class_offset(lv, (S19439C2*), ABISELECT(656,324), "S19439C9");
    check_base_class_offset(lv, (S19439C2*)(S19439C7*), ABISELECT(656,324), "S19439C9");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*)(S19439C7*), 0, "S19439C9");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C6*)(S19439C7*), 0, "S19439C9");
    /*is_ambiguous_... S19439C7::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C4*)(S19439C7*), ABISELECT(56,28), "S19439C9");
    /*is_ambiguous_... S19439C7::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C7*), ABISELECT(56,28), "S19439C9");
    check_base_class_offset(lv, (S19439C7*), 0, "S19439C9");
    check_field_offset(lv, s19439c9f0, ABISELECT(320,160), "S19439C9.s19439c9f0");
    check_field_offset(lv, s19439c9f1, ABISELECT(480,236), "S19439C9.s19439c9f1");
    check_field_offset(lv, s19439c9f2, ABISELECT(488,244), "S19439C9.s19439c9f2");
    test_class_info(&lv, &cd_S19439C9);
    dp->~S19439C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C9(Test_S19439C9, "S19439C9", ABISELECT(816,404));

#else // __cplusplus

extern void _ZN8S19439C9C1Ev();
extern void _ZN8S19439C9D2Ev();
Name_Map name_map_S19439C9[] = {
  NSPAIR(_ZN8S19439C9C1Ev),
  NSPAIR(_ZN8S19439C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C3;
extern VTBL_ENTRY _ZTI8S19439C3[];
extern  VTBL_ENTRY _ZTV8S19439C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C3[];
extern Class_Descriptor cd_S19439C3;
extern VTBL_ENTRY _ZTI8S19439C3[];
extern  VTBL_ENTRY _ZTV8S19439C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C3[];
extern Class_Descriptor cd_S19439C2;
extern VTBL_ENTRY _ZTI8S19439C2[];
extern  VTBL_ENTRY _ZTV8S19439C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C2[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
extern Class_Descriptor cd_S19439C7;
extern VTBL_ENTRY _ZTI8S19439C7[];
extern  VTBL_ENTRY _ZTV8S19439C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C7[];
static Base_Class bases_S19439C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19439C5,    ABISELECT(528,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19439C4,    ABISELECT(528,264), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19439C5,    ABISELECT(576,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19439C6,    ABISELECT(576,284), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19439C5,    ABISELECT(632,312), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19439C3,    ABISELECT(496,248), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19439C3,    ABISELECT(656,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19439C2,    ABISELECT(656,324), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19439C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19439C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19439C5,    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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19439C4,    ABISELECT(56,28), //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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19439C7,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19439C9[];
extern void _ZN8S19439C9D1Ev();
extern void _ZN8S19439C9D0Ev();
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZThn56_N8S19439C9D1Ev,_ZThn28_N8S19439C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S19439C9D0Ev,_ZThn28_N8S19439C9D0Ev)();
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev)();
extern void ABISELECT(_ZThn496_N8S19439C9D1Ev,_ZThn248_N8S19439C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev)();
extern void ABISELECT(_ZThn496_N8S19439C9D0Ev,_ZThn248_N8S19439C9D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev)();
extern void ABISELECT(_ZThn528_N8S19439C9D1Ev,_ZThn264_N8S19439C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev)();
extern void ABISELECT(_ZThn528_N8S19439C9D0Ev,_ZThn264_N8S19439C9D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N8S19439C9D1Ev,_ZTv0_n16_N8S19439C9D1Ev)();
extern void ABISELECT(_ZThn576_N8S19439C9D1Ev,_ZThn284_N8S19439C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C9D0Ev,_ZTv0_n16_N8S19439C9D0Ev)();
extern void ABISELECT(_ZThn576_N8S19439C9D0Ev,_ZThn284_N8S19439C9D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev)();
extern void ABISELECT(_ZThn632_N8S19439C9D1Ev,_ZThn312_N8S19439C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev)();
extern void ABISELECT(_ZThn632_N8S19439C9D0Ev,_ZThn312_N8S19439C9D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev)();
extern void ABISELECT(_ZThn656_N8S19439C9D1Ev,_ZThn324_N8S19439C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev)();
extern void ABISELECT(_ZThn656_N8S19439C9D0Ev,_ZThn324_N8S19439C9D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY vtc_S19439C9[] = {
  ABISELECT(656,324),
  ABISELECT(632,312),
  ABISELECT(576,284),
  ABISELECT(496,248),
  ABISELECT(528,264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&_ZN8S19439C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19439C9D1Ev,_ZThn28_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19439C9D0Ev,_ZThn28_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-496,-248),
  ABISELECT(136,64),
  ABISELECT(80,36),
  ABISELECT(32,16),
  ABISELECT(-496,-248),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  0,
  ABISELECT(-528,-264),
  ABISELECT(-528,-264),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-576,-284),
  ABISELECT(-48,-20),
  ABISELECT(-576,-284),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C9D1Ev,_ZTv0_n16_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C9D0Ev,_ZTv0_n16_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-632,-312),
  ABISELECT(-632,-312),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  0,
  0,
  ABISELECT(-656,-324),
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(-128,-60),
  ABISELECT(-656,-324),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S19439C9[];
extern void _ZN8S19439C7D1Ev();
extern void _ZN8S19439C7D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C7__8S19439C9[] = {
  ABISELECT(656,324),
  ABISELECT(632,312),
  ABISELECT(576,284),
  ABISELECT(496,248),
  ABISELECT(528,264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&_ZN8S19439C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C68S19439C7__A1__8S19439C9[] = {
  ABISELECT(528,264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZThn528_N8S19439C6D1Ev,_ZThn264_N8S19439C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void ABISELECT(_ZThn528_N8S19439C6D0Ev,_ZThn264_N8S19439C6D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C68S19439C7__A1__8S19439C9[] = {
  0,
  ABISELECT(-528,-264),
  ABISELECT(-528,-264),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn496_N8S19439C7D1Ev,_ZThn248_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn496_N8S19439C7D0Ev,_ZThn248_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C3__8S19439C7__8S19439C9[] = {
  0,
  ABISELECT(-496,-248),
  ABISELECT(136,64),
  ABISELECT(80,36),
  ABISELECT(32,16),
  ABISELECT(-496,-248),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn528_N8S19439C7D1Ev,_ZThn264_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn528_N8S19439C7D0Ev,_ZThn264_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C7__8S19439C9[] = {
  0,
  ABISELECT(-528,-264),
  ABISELECT(-528,-264),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn576_N8S19439C7D1Ev,_ZThn284_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn576_N8S19439C7D0Ev,_ZThn284_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C7__8S19439C9[] = {
  0,
  ABISELECT(-576,-284),
  ABISELECT(-48,-20),
  ABISELECT(-576,-284),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn632_N8S19439C7D1Ev,_ZThn312_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn632_N8S19439C7D0Ev,_ZThn312_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C7__8S19439C9[] = {
  0,
  ABISELECT(-632,-312),
  ABISELECT(-632,-312),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn656_N8S19439C7D1Ev,_ZThn324_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn656_N8S19439C7D0Ev,_ZThn324_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C2__8S19439C7__8S19439C9[] = {
  0,
  0,
  0,
  ABISELECT(-656,-324),
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(-128,-60),
  ABISELECT(-656,-324),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
extern void _ZN8S19439C3D1Ev();
extern void _ZN8S19439C3D0Ev();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C3__8S19439C9[] = {
  ABISELECT(136,64),
  ABISELECT(80,36),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&_ZN8S19439C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19439C3D1Ev,_ZThn16_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S19439C3D0Ev,_ZThn16_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C3__8S19439C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19439C3D1Ev,_ZThn36_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19439C3D0Ev,_ZThn36_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C3__8S19439C9[] = {
  0,
  ABISELECT(-80,-36),
  ABISELECT(-48,-20),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn136_N8S19439C3D1Ev,_ZThn64_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn136_N8S19439C3D0Ev,_ZThn64_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C3__8S19439C9[] = {
  0,
  ABISELECT(-136,-64),
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C9[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C6__8S19439C9[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C2D1Ev();
extern void _ZN8S19439C2D0Ev();
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C2__8S19439C9[] = {
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(-128,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&_ZN8S19439C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
extern void _ZN8S19439C3D1Ev();
extern void _ZN8S19439C3D0Ev();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C38S19439C2__A1__8S19439C9[] = {
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(-128,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&_ZN8S19439C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C38S19439C2__A1__8S19439C9[] = {
  0,
  ABISELECT(128,60),
  ABISELECT(128,60),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C38S19439C2__A1__8S19439C9[] = {
  0,
  ABISELECT(80,40),
  ABISELECT(-48,-20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C38S19439C2__A1__8S19439C9[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C2__8S19439C9[] = {
  0,
  ABISELECT(128,60),
  ABISELECT(128,60),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C2__8S19439C9[] = {
  0,
  ABISELECT(80,40),
  ABISELECT(-48,-20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C2__8S19439C9[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
static  VTT_ENTRY vtt_S19439C9[] = {
  {&(_ZTV8S19439C9[7]),  7,61},
  {&(_tg__ZTV8S19439C7__8S19439C9[7]),  7,10},
  {&(_tg__ZTV8S19439C68S19439C7__A1__8S19439C9[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C68S19439C7__A1__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C3__8S19439C7__8S19439C9[7]),  7,10},
  {&(_tg__ZTV8S19439C4__8S19439C7__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C7__8S19439C9[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C7__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C2__8S19439C7__8S19439C9[9]),  9,14},
  {&(_ZTV8S19439C9[22]),  22,61},
  {&(_ZTV8S19439C9[29]),  29,61},
  {&(_ZTV8S19439C9[37]),  37,61},
  {&(_ZTV8S19439C9[44]),  44,61},
  {&(_ZTV8S19439C9[56]),  56,61},
  {&(_tg__ZTV8S19439C3__8S19439C9[5]),  5,8},
  {&(_tg__ZTV8S19439C4__8S19439C3__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C3__8S19439C9[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C3__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C9[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C6__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C2__8S19439C9[5]),  5,10},
  {&(_tg__ZTV8S19439C38S19439C2__A1__8S19439C9[5]),  5,8},
  {&(_tg__ZTV8S19439C4__8S19439C38S19439C2__A1__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C38S19439C2__A1__8S19439C9[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C38S19439C2__A1__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C4__8S19439C2__8S19439C9[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C2__8S19439C9[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C2__8S19439C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19439C9[];
extern  VTBL_ENTRY _ZTV8S19439C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C9[];
static VTBL_ENTRY alt_thunk_names133[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19439C3D0Ev,_ZThn36_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19439C3D1Ev,_ZThn36_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19439C3D0Ev,_ZThn64_N8S19439C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19439C3D0Ev,_ZThn16_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19439C3D1Ev,_ZThn64_N8S19439C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19439C3D1Ev,_ZThn16_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19439C7D0Ev,_ZThn284_N8S19439C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19439C7D1Ev,_ZThn284_N8S19439C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn632_N8S19439C7D0Ev,_ZThn312_N8S19439C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19439C7D0Ev,_ZThn264_N8S19439C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn632_N8S19439C7D1Ev,_ZThn312_N8S19439C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19439C7D1Ev,_ZThn264_N8S19439C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19439C7D0Ev,_ZThn324_N8S19439C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19439C7D0Ev,_ZThn248_N8S19439C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19439C7D1Ev,_ZThn324_N8S19439C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19439C7D1Ev,_ZThn248_N8S19439C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19439C6D0Ev,_ZThn264_N8S19439C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19439C6D1Ev,_ZThn264_N8S19439C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C9D0Ev,_ZTv0_n16_N8S19439C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19439C9D0Ev,_ZThn284_N8S19439C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C9D1Ev,_ZTv0_n16_N8S19439C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19439C9D1Ev,_ZThn284_N8S19439C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn632_N8S19439C9D0Ev,_ZThn312_N8S19439C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19439C9D0Ev,_ZThn264_N8S19439C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn632_N8S19439C9D1Ev,_ZThn312_N8S19439C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19439C9D1Ev,_ZThn264_N8S19439C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19439C9D0Ev,_ZThn324_N8S19439C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19439C9D0Ev,_ZThn248_N8S19439C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19439C9D1Ev,_ZThn324_N8S19439C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19439C9D1Ev,_ZThn248_N8S19439C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19439C9 = {  "S19439C9", // class name
  bases_S19439C9, 13,
  &(vtc_S19439C9[0]), // expected_vtbl_contents
  &(vtt_S19439C9[0]), // expected_vtt_contents
  ABISELECT(816,404), // object size
  NSPAIRA(_ZTI8S19439C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19439C9),61, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19439C9),28, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names133,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19439C1  : virtual S19439C2 , virtual S19439C7 , S19439C6 , virtual S19439C8 , virtual S19439C9 {
  virtual  ~S19439C1(); // _ZN8S19439C1D2Ev
  virtual void  v1(); // _ZN8S19439C12v1Ev
  S19439C1(); // tgen
};
//SIG(1 S19439C1) C1{ VBC2{ BC3{ VBC4{ BC5{ vd v2 Fl Fp} vd Fp Fs:2} VBC6{ BC5 VBC4 vd FD Fp} VBC5 vd v3 Fi:32 Fp Fi} vd v4 v5 Fi[2] FC6 Fi Fl} VBC7{ VBC3 VBC2 BC6 BC4 FC6 Fp FC4[2] Fp[5]} BC6 VBC8{ BC5 vd v6 v7 v8} VBC9{ VBC3 VBC2 BC7 vd FC3 FL FC10{}} vd v1}


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

static void Test_S19439C1()
{
  extern Class_Descriptor cd_S19439C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(78,152)];
    init_test(&cd_S19439C1, buf);
    S19439C1 *dp, &lv = *(dp=new (buf) S19439C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1232,604), "sizeof(S19439C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19439C1)");
    /*is_ambiguous_... S19439C1::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C4*), ABISELECT(224,108), "S19439C1");
    check_base_class_offset(lv, (S19439C4*)(S19439C3*)(S19439C2*), ABISELECT(224,108), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C6*), ABISELECT(224,108), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C3*), ABISELECT(224,108), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C7 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C6*)(S19439C7*), ABISELECT(224,108), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C6*), ABISELECT(224,108), "S19439C1");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C6*)(S19439C7*)(S19439C9*), ABISELECT(224,108), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*), ABISELECT(272,128), "S19439C1");
    check_base_class_offset(lv, (S19439C6*)(S19439C3*)(S19439C2*), ABISELECT(272,128), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C6*)(S19439C3*), ABISELECT(272,128), "S19439C1");
    /*is_ambiguous_... S19439C3::S19439C5 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C3*)(S19439C2*), ABISELECT(328,156), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C3*), ABISELECT(328,156), "S19439C1");
    check_base_class_offset(lv, (S19439C3*)(S19439C2*), ABISELECT(64,28), "S19439C1");
    check_base_class_offset(lv, (S19439C2*), ABISELECT(64,28), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C7 */ AMB_check_base_class_offset(lv, (S19439C2*)(S19439C7*), ABISELECT(64,28), "S19439C1");
    check_base_class_offset(lv, (S19439C2*)(S19439C9*), ABISELECT(64,28), "S19439C1");
    check_base_class_offset(lv, (S19439C2*)(S19439C7*)(S19439C9*), ABISELECT(64,28), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C7 */ AMB_check_base_class_offset(lv, (S19439C3*)(S19439C7*), ABISELECT(672,328), "S19439C1");
    /*is_ambiguous_... S19439C9::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C3*)(S19439C9*), ABISELECT(672,328), "S19439C1");
    /*is_ambiguous_... S19439C7::S19439C3 */ AMB_check_base_class_offset(lv, (S19439C3*)(S19439C7*)(S19439C9*), ABISELECT(672,328), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C7 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*)(S19439C7*), ABISELECT(352,168), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C7 */ AMB_check_base_class_offset(lv, (S19439C6*)(S19439C7*), ABISELECT(352,168), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C7 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C4*)(S19439C7*), ABISELECT(408,196), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C7 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C7*), ABISELECT(408,196), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C7 */ AMB_check_base_class_offset(lv, (S19439C7*), ABISELECT(352,168), "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*), 0, "S19439C1");
    /*is_ambiguous_... S19439C1::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C6*), 0, "S19439C1");
    check_base_class_offset(lv, (S19439C5*)(S19439C8*), ABISELECT(704,344), "S19439C1");
    check_base_class_offset(lv, (S19439C8*), ABISELECT(704,344), "S19439C1");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C6*)(S19439C7*)(S19439C9*), ABISELECT(736,356), "S19439C1");
    /*is_ambiguous_... S19439C7::S19439C6 */ AMB_check_base_class_offset(lv, (S19439C6*)(S19439C7*)(S19439C9*), ABISELECT(736,356), "S19439C1");
    /*is_ambiguous_... S19439C7::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C5*)(S19439C4*)(S19439C7*)(S19439C9*), ABISELECT(792,384), "S19439C1");
    /*is_ambiguous_... S19439C7::S19439C4 */ AMB_check_base_class_offset(lv, (S19439C4*)(S19439C7*)(S19439C9*), ABISELECT(792,384), "S19439C1");
    check_base_class_offset(lv, (S19439C7*)(S19439C9*), ABISELECT(736,356), "S19439C1");
    check_base_class_offset(lv, (S19439C9*), ABISELECT(736,356), "S19439C1");
    test_class_info(&lv, &cd_S19439C1);
    dp->~S19439C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19439C1(Test_S19439C1, "S19439C1", ABISELECT(1232,604));

#else // __cplusplus

extern void _ZN8S19439C1C1Ev();
extern void _ZN8S19439C1D2Ev();
Name_Map name_map_S19439C1[] = {
  NSPAIR(_ZN8S19439C1C1Ev),
  NSPAIR(_ZN8S19439C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C3;
extern VTBL_ENTRY _ZTI8S19439C3[];
extern  VTBL_ENTRY _ZTV8S19439C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C3[];
extern Class_Descriptor cd_S19439C2;
extern VTBL_ENTRY _ZTI8S19439C2[];
extern  VTBL_ENTRY _ZTV8S19439C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C2[];
extern Class_Descriptor cd_S19439C3;
extern VTBL_ENTRY _ZTI8S19439C3[];
extern  VTBL_ENTRY _ZTV8S19439C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C3[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
extern Class_Descriptor cd_S19439C7;
extern VTBL_ENTRY _ZTI8S19439C7[];
extern  VTBL_ENTRY _ZTV8S19439C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C7[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C8;
extern VTBL_ENTRY _ZTI8S19439C8[];
extern  VTBL_ENTRY _ZTV8S19439C8[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C6;
extern VTBL_ENTRY _ZTI8S19439C6[];
extern  VTBL_ENTRY _ZTV8S19439C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C6[];
extern Class_Descriptor cd_S19439C5;
extern VTBL_ENTRY _ZTI8S19439C5[];
extern  VTBL_ENTRY _ZTV8S19439C5[];
extern Class_Descriptor cd_S19439C4;
extern VTBL_ENTRY _ZTI8S19439C4[];
extern  VTBL_ENTRY _ZTV8S19439C4[];
extern Class_Descriptor cd_S19439C7;
extern VTBL_ENTRY _ZTI8S19439C7[];
extern  VTBL_ENTRY _ZTV8S19439C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C7[];
extern Class_Descriptor cd_S19439C9;
extern VTBL_ENTRY _ZTI8S19439C9[];
extern  VTBL_ENTRY _ZTV8S19439C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C9[];
static Base_Class bases_S19439C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19439C5,    ABISELECT(224,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
    1, //immediately_derived
  0, 0},
  {&cd_S19439C4,    ABISELECT(224,108), //bcp->offset
    28, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19439C5,    ABISELECT(272,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
    3, //immediately_derived
  0, 0},
  {&cd_S19439C6,    ABISELECT(272,128), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19439C5,    ABISELECT(328,156), //bcp->offset
    43, //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
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19439C3,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19439C2,    ABISELECT(64,28), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19439C3,    ABISELECT(672,328), //bcp->offset
    67, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19439C5,    ABISELECT(352,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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19439C6,    ABISELECT(352,168), //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
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19439C5,    ABISELECT(408,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
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19439C4,    ABISELECT(408,196), //bcp->offset
    62, //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_S19439C7,    ABISELECT(352,168), //bcp->offset
    50, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19439C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19439C6,    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
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19439C5,    ABISELECT(704,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
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19439C8,    ABISELECT(704,344), //bcp->offset
    77, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19439C5,    ABISELECT(736,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
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19439C6,    ABISELECT(736,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19439C5,    ABISELECT(792,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
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19439C4,    ABISELECT(792,384), //bcp->offset
    102, //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
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19439C7,    ABISELECT(736,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19439C9,    ABISELECT(736,356), //bcp->offset
    90, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19439C1[];
extern void _ZN8S19439C1D1Ev();
extern void _ZN8S19439C1D0Ev();
extern void _ZN8S19439C52v2Ev();
extern void _ZN8S19439C12v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S19439C1D1Ev,_ZTv0_n24_N8S19439C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19439C1D1Ev,_ZThn28_N8S19439C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C1D0Ev,_ZTv0_n24_N8S19439C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19439C1D0Ev,_ZThn28_N8S19439C1D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C1D1Ev,_ZTv0_n12_N8S19439C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19439C1D1Ev,_ZThn108_N8S19439C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C1D0Ev,_ZTv0_n12_N8S19439C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19439C1D0Ev,_ZThn108_N8S19439C1D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N8S19439C1D1Ev,_ZTv0_n16_N8S19439C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S19439C1D1Ev,_ZThn128_N8S19439C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C1D0Ev,_ZTv0_n16_N8S19439C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S19439C1D0Ev,_ZThn128_N8S19439C1D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C1D1Ev,_ZTv0_n12_N8S19439C1D1Ev)();
extern void ABISELECT(_ZThn328_N8S19439C1D1Ev,_ZThn156_N8S19439C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C1D0Ev,_ZTv0_n12_N8S19439C1D0Ev)();
extern void ABISELECT(_ZThn328_N8S19439C1D0Ev,_ZThn156_N8S19439C1D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S19439C1D1Ev,_ZTv0_n32_N8S19439C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S19439C1D1Ev,_ZThn168_N8S19439C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19439C1D0Ev,_ZTv0_n32_N8S19439C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S19439C1D0Ev,_ZThn168_N8S19439C1D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTvn56_n64_N8S19439C1D1Ev,_ZTvn28_n32_N8S19439C1D1Ev)();
extern void ABISELECT(_ZTvn56_n64_N8S19439C1D0Ev,_ZTvn28_n32_N8S19439C1D0Ev)();
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19439C1D1Ev,_ZTv0_n24_N8S19439C1D1Ev)();
extern void ABISELECT(_ZThn672_N8S19439C1D1Ev,_ZThn328_N8S19439C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C1D0Ev,_ZTv0_n24_N8S19439C1D0Ev)();
extern void ABISELECT(_ZThn672_N8S19439C1D0Ev,_ZThn328_N8S19439C1D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19439C1D1Ev,_ZTv0_n12_N8S19439C1D1Ev)();
extern void ABISELECT(_ZThn704_N8S19439C1D1Ev,_ZThn344_N8S19439C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C1D0Ev,_ZTv0_n12_N8S19439C1D0Ev)();
extern void ABISELECT(_ZThn704_N8S19439C1D0Ev,_ZThn344_N8S19439C1D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void _ZN8S19439C82v6Ev();
extern void _ZN8S19439C82v7Ev();
extern void _ZN8S19439C82v8Ev();
extern void ABISELECT(_ZTv0_n64_N8S19439C1D1Ev,_ZTv0_n32_N8S19439C1D1Ev)();
extern void ABISELECT(_ZThn736_N8S19439C1D1Ev,_ZThn356_N8S19439C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19439C1D0Ev,_ZTv0_n32_N8S19439C1D0Ev)();
extern void ABISELECT(_ZThn736_N8S19439C1D0Ev,_ZThn356_N8S19439C1D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
extern void ABISELECT(_ZTvn56_n64_N8S19439C1D1Ev,_ZTvn28_n32_N8S19439C1D1Ev)();
extern void ABISELECT(_ZTvn56_n64_N8S19439C1D0Ev,_ZTvn28_n32_N8S19439C1D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY vtc_S19439C1[] = {
  ABISELECT(736,356),
  ABISELECT(704,344),
  ABISELECT(672,328),
  ABISELECT(352,168),
  ABISELECT(328,156),
  ABISELECT(272,128),
  ABISELECT(64,28),
  ABISELECT(224,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&_ZN8S19439C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19439C12v1Ev,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  ABISELECT(264,128),
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C1D1Ev,_ZTv0_n24_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C1D0Ev,_ZTv0_n24_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
  0,
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C1D1Ev,_ZTv0_n12_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C1D0Ev,_ZTv0_n12_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-272,-128),
  ABISELECT(-48,-20),
  ABISELECT(-272,-128),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C1D1Ev,_ZTv0_n16_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C1D0Ev,_ZTv0_n16_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-328,-156),
  ABISELECT(-328,-156),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C1D1Ev,_ZTv0_n12_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C1D0Ev,_ZTv0_n12_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-352,-168),
  ABISELECT(-288,-140),
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(320,160),
  ABISELECT(-128,-60),
  ABISELECT(-352,-168),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19439C1D1Ev,_ZTv0_n32_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19439C1D0Ev,_ZTv0_n32_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  ABISELECT(-408,-196),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S19439C1D1Ev,_ZTvn28_n32_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S19439C1D0Ev,_ZTvn28_n32_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  0,
  ABISELECT(-672,-328),
  ABISELECT(-344,-172),
  ABISELECT(-400,-200),
  ABISELECT(-448,-220),
  ABISELECT(-672,-328),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C1D1Ev,_ZTv0_n24_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C1D0Ev,_ZTv0_n24_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-704,-344),
  ABISELECT(-704,-344),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C1D1Ev,_ZTv0_n12_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C1D0Ev,_ZTv0_n12_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19439C82v6Ev,
  (VTBL_ENTRY)&_ZN8S19439C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19439C82v8Ev,
  0,
  ABISELECT(-736,-356),
  ABISELECT(-672,-328),
  ABISELECT(-408,-200),
  ABISELECT(-464,-228),
  ABISELECT(-64,-28),
  ABISELECT(-512,-248),
  ABISELECT(-736,-356),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19439C1D1Ev,_ZTv0_n32_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19439C1D0Ev,_ZTv0_n32_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
  ABISELECT(-792,-384),
  (VTBL_ENTRY)&(_ZTI8S19439C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S19439C1D1Ev,_ZTvn28_n32_N8S19439C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S19439C1D0Ev,_ZTvn28_n32_N8S19439C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19439C1[];
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__A__8S19439C1[] = {
  ABISELECT(224,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZThn224_N8S19439C6D1Ev,_ZThn108_N8S19439C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void ABISELECT(_ZThn224_N8S19439C6D0Ev,_ZThn108_N8S19439C6D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C6__A__8S19439C1[] = {
  0,
  ABISELECT(-224,-108),
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C2D1Ev();
extern void _ZN8S19439C2D0Ev();
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C2__8S19439C1[] = {
  ABISELECT(264,128),
  ABISELECT(208,100),
  ABISELECT(160,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&_ZN8S19439C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
extern void _ZN8S19439C3D1Ev();
extern void _ZN8S19439C3D0Ev();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C38S19439C2__8S19439C1[] = {
  ABISELECT(264,128),
  ABISELECT(208,100),
  ABISELECT(160,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&_ZN8S19439C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn160_N8S19439C3D1Ev,_ZThn80_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn160_N8S19439C3D0Ev,_ZThn80_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C38S19439C2__8S19439C1[] = {
  0,
  ABISELECT(-160,-80),
  ABISELECT(-160,-80),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn208_N8S19439C3D1Ev,_ZThn100_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn208_N8S19439C3D0Ev,_ZThn100_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C38S19439C2__8S19439C1[] = {
  0,
  ABISELECT(-208,-100),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZThn264_N8S19439C3D1Ev,_ZThn128_N8S19439C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void ABISELECT(_ZThn264_N8S19439C3D0Ev,_ZThn128_N8S19439C3D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C38S19439C2__8S19439C1[] = {
  0,
  ABISELECT(-264,-128),
  ABISELECT(-264,-128),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev)();
extern void ABISELECT(_ZThn160_N8S19439C2D1Ev,_ZThn80_N8S19439C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev)();
extern void ABISELECT(_ZThn160_N8S19439C2D0Ev,_ZThn80_N8S19439C2D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C2__8S19439C1[] = {
  0,
  ABISELECT(-160,-80),
  ABISELECT(-160,-80),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S19439C2D1Ev,_ZThn100_N8S19439C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S19439C2D0Ev,_ZThn100_N8S19439C2D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C2__8S19439C1[] = {
  0,
  ABISELECT(-208,-100),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev)();
extern void ABISELECT(_ZThn264_N8S19439C2D1Ev,_ZThn128_N8S19439C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev)();
extern void ABISELECT(_ZThn264_N8S19439C2D0Ev,_ZThn128_N8S19439C2D0Ev)() __attribute__((weak));
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C2__8S19439C1[] = {
  0,
  ABISELECT(-264,-128),
  ABISELECT(-264,-128),
  (VTBL_ENTRY)&(_ZTI8S19439C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C1[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C6__8S19439C1[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C7D1Ev();
extern void _ZN8S19439C7D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C7__8S19439C1[] = {
  ABISELECT(-288,-140),
  ABISELECT(-24,-12),
  ABISELECT(-80,-40),
  ABISELECT(320,160),
  ABISELECT(-128,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&_ZN8S19439C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C68S19439C7__A1__8S19439C1[] = {
  ABISELECT(-128,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C68S19439C7__A1__8S19439C1[] = {
  0,
  ABISELECT(128,60),
  ABISELECT(128,60),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev)();
extern void ABISELECT(_ZThn320_N8S19439C7D1Ev,_ZThn160_N8S19439C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev)();
extern void ABISELECT(_ZThn320_N8S19439C7D0Ev,_ZThn160_N8S19439C7D0Ev)() __attribute__((weak));
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C3__8S19439C7__8S19439C1[] = {
  0,
  ABISELECT(-320,-160),
  ABISELECT(-344,-172),
  ABISELECT(-400,-200),
  ABISELECT(-448,-220),
  ABISELECT(-320,-160),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C7__8S19439C1[] = {
  0,
  ABISELECT(128,60),
  ABISELECT(128,60),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C7__8S19439C1[] = {
  0,
  ABISELECT(80,40),
  ABISELECT(-48,-20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C7__8S19439C1[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev)();
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C2__8S19439C7__8S19439C1[] = {
  0,
  0,
  0,
  ABISELECT(288,140),
  ABISELECT(264,128),
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(288,140),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
extern void _ZN8S19439C3D1Ev();
extern void _ZN8S19439C3D0Ev();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C3__A1__8S19439C1[] = {
  ABISELECT(-344,-172),
  ABISELECT(-400,-200),
  ABISELECT(-448,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&_ZN8S19439C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C3__A1__8S19439C1[] = {
  0,
  ABISELECT(448,220),
  ABISELECT(448,220),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C3__A1__8S19439C1[] = {
  0,
  ABISELECT(400,200),
  ABISELECT(-48,-20),
  ABISELECT(400,200),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C3__A1__8S19439C1[] = {
  0,
  ABISELECT(344,172),
  ABISELECT(344,172),
  (VTBL_ENTRY)&(_ZTI8S19439C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C9D1Ev();
extern void _ZN8S19439C9D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C9__8S19439C1[] = {
  ABISELECT(-672,-328),
  ABISELECT(-408,-200),
  ABISELECT(-464,-228),
  ABISELECT(-64,-28),
  ABISELECT(-512,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&_ZN8S19439C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C7D1Ev();
extern void _ZN8S19439C7D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C78S19439C9__A1__8S19439C1[] = {
  ABISELECT(-672,-328),
  ABISELECT(-408,-200),
  ABISELECT(-464,-228),
  ABISELECT(-64,-28),
  ABISELECT(-512,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&_ZN8S19439C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void _ZN8S19439C6D1Ev();
extern void _ZN8S19439C6D0Ev();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C68S19439C78S19439C9__A3__8S19439C1[] = {
  ABISELECT(-512,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&_ZN8S19439C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19439C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C68S19439C78S19439C9__A3__8S19439C1[] = {
  0,
  ABISELECT(512,248),
  ABISELECT(512,248),
  (VTBL_ENTRY)&(_ZTI8S19439C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev)();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C3__8S19439C78S19439C9__A1__8S19439C1[] = {
  0,
  ABISELECT(64,28),
  ABISELECT(-344,-172),
  ABISELECT(-400,-200),
  ABISELECT(-448,-220),
  ABISELECT(64,28),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C78S19439C9__A1__8S19439C1[] = {
  0,
  ABISELECT(512,248),
  ABISELECT(512,248),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C78S19439C9__A1__8S19439C1[] = {
  0,
  ABISELECT(464,228),
  ABISELECT(-48,-20),
  ABISELECT(464,228),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C7D1Ev,_ZTv0_n16_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C7D0Ev,_ZTv0_n16_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C78S19439C9__A1__8S19439C1[] = {
  0,
  ABISELECT(408,200),
  ABISELECT(408,200),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D1Ev,_ZTv0_n12_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C7D0Ev,_ZTv0_n12_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev)();
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C2__8S19439C78S19439C9__A1__8S19439C1[] = {
  0,
  0,
  0,
  ABISELECT(672,328),
  ABISELECT(264,128),
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(672,328),
  (VTBL_ENTRY)&(_ZTI8S19439C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev)();
extern void _ZN8S19439C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C3__8S19439C9__8S19439C1[] = {
  0,
  ABISELECT(64,28),
  ABISELECT(-344,-172),
  ABISELECT(-400,-200),
  ABISELECT(-448,-220),
  ABISELECT(64,28),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C4__8S19439C9__8S19439C1[] = {
  0,
  ABISELECT(512,248),
  ABISELECT(512,248),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19439C9D1Ev,_ZTv0_n16_N8S19439C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19439C9D0Ev,_ZTv0_n16_N8S19439C9D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C6__8S19439C9__8S19439C1[] = {
  0,
  ABISELECT(464,228),
  ABISELECT(-48,-20),
  ABISELECT(464,228),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C9D1Ev,_ZTv0_n16_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19439C9D0Ev,_ZTv0_n16_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev)();
extern void _ZN8S19439C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C5__A2__8S19439C9__8S19439C1[] = {
  0,
  ABISELECT(408,200),
  ABISELECT(408,200),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C9D1Ev,_ZTv0_n12_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19439C9D0Ev,_ZTv0_n12_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C52v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev)();
extern void _ZN8S19439C32v3Ev();
extern void _ZN8S19439C22v4Ev();
extern void _ZN8S19439C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19439C2__8S19439C9__8S19439C1[] = {
  0,
  0,
  0,
  ABISELECT(672,328),
  ABISELECT(264,128),
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(672,328),
  (VTBL_ENTRY)&(_ZTI8S19439C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C9D1Ev,_ZTv0_n24_N8S19439C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19439C9D0Ev,_ZTv0_n24_N8S19439C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19439C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19439C22v5Ev,
};
static  VTT_ENTRY vtt_S19439C1[] = {
  {&(_ZTV8S19439C1[10]),  10,107},
  {&(_tg__ZTV8S19439C6__A__8S19439C1[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C6__A__8S19439C1[4]),  4,7},
  {&(_ZTV8S19439C1[23]),  23,107},
  {&(_ZTV8S19439C1[32]),  32,107},
  {&(_ZTV8S19439C1[40]),  40,107},
  {&(_ZTV8S19439C1[47]),  47,107},
  {&(_ZTV8S19439C1[59]),  59,107},
  {&(_ZTV8S19439C1[74]),  74,107},
  {&(_ZTV8S19439C1[64]),  64,107},
  {&(_ZTV8S19439C1[84]),  84,107},
  {&(_ZTV8S19439C1[99]),  99,107},
  {&(_ZTV8S19439C1[104]),  104,107},
  {&(_tg__ZTV8S19439C2__8S19439C1[5]),  5,10},
  {&(_tg__ZTV8S19439C38S19439C2__8S19439C1[5]),  5,8},
  {&(_tg__ZTV8S19439C4__8S19439C38S19439C2__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C38S19439C2__8S19439C1[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C38S19439C2__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C4__8S19439C2__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C2__8S19439C1[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C2__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C1[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C6__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C7__8S19439C1[7]),  7,10},
  {&(_tg__ZTV8S19439C68S19439C7__A1__8S19439C1[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C68S19439C7__A1__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C3__8S19439C7__8S19439C1[7]),  7,10},
  {&(_tg__ZTV8S19439C4__8S19439C7__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C7__8S19439C1[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C7__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C2__8S19439C7__8S19439C1[9]),  9,14},
  {&(_tg__ZTV8S19439C3__A1__8S19439C1[5]),  5,8},
  {&(_tg__ZTV8S19439C4__8S19439C3__A1__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C3__A1__8S19439C1[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C3__A1__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C9__8S19439C1[7]),  7,10},
  {&(_tg__ZTV8S19439C78S19439C9__A1__8S19439C1[7]),  7,10},
  {&(_tg__ZTV8S19439C68S19439C78S19439C9__A3__8S19439C1[3]),  3,6},
  {&(_tg__ZTV8S19439C4__8S19439C68S19439C78S19439C9__A3__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C3__8S19439C78S19439C9__A1__8S19439C1[7]),  7,10},
  {&(_tg__ZTV8S19439C4__8S19439C78S19439C9__A1__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C78S19439C9__A1__8S19439C1[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C78S19439C9__A1__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C2__8S19439C78S19439C9__A1__8S19439C1[9]),  9,14},
  {&(_tg__ZTV8S19439C3__8S19439C9__8S19439C1[7]),  7,10},
  {&(_tg__ZTV8S19439C4__8S19439C9__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C6__8S19439C9__8S19439C1[5]),  5,8},
  {&(_tg__ZTV8S19439C5__A2__8S19439C9__8S19439C1[4]),  4,7},
  {&(_tg__ZTV8S19439C2__8S19439C9__8S19439C1[9]),  9,14},
};
extern VTBL_ENTRY _ZTI8S19439C1[];
extern  VTBL_ENTRY _ZTV8S19439C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19439C1[];
static VTBL_ENTRY alt_thunk_names134[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C7D0Ev,_ZTv0_n24_N8S19439C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19439C7D0Ev,_ZThn160_N8S19439C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C7D1Ev,_ZTv0_n24_N8S19439C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19439C7D1Ev,_ZThn160_N8S19439C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C2D0Ev,_ZTv0_n16_N8S19439C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19439C2D0Ev,_ZThn100_N8S19439C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C2D1Ev,_ZTv0_n16_N8S19439C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19439C2D1Ev,_ZThn100_N8S19439C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C2D0Ev,_ZTv0_n12_N8S19439C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19439C2D0Ev,_ZThn128_N8S19439C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19439C2D0Ev,_ZThn80_N8S19439C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C2D1Ev,_ZTv0_n12_N8S19439C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19439C2D1Ev,_ZThn128_N8S19439C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19439C2D1Ev,_ZThn80_N8S19439C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D0Ev,_ZTv0_n16_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19439C3D0Ev,_ZThn100_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C3D1Ev,_ZTv0_n16_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19439C3D1Ev,_ZThn100_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D0Ev,_ZTv0_n12_N8S19439C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19439C3D0Ev,_ZThn128_N8S19439C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19439C3D0Ev,_ZThn80_N8S19439C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C3D1Ev,_ZTv0_n12_N8S19439C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19439C3D1Ev,_ZThn128_N8S19439C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19439C3D1Ev,_ZThn80_N8S19439C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C6D0Ev,_ZTv0_n12_N8S19439C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19439C6D0Ev,_ZThn108_N8S19439C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C6D1Ev,_ZTv0_n12_N8S19439C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19439C6D1Ev,_ZThn108_N8S19439C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19439C1D0Ev,_ZTv0_n32_N8S19439C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19439C1D0Ev,_ZThn356_N8S19439C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19439C1D0Ev,_ZThn168_N8S19439C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19439C1D1Ev,_ZTv0_n32_N8S19439C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19439C1D1Ev,_ZThn356_N8S19439C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19439C1D1Ev,_ZThn168_N8S19439C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C1D0Ev,_ZTv0_n16_N8S19439C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19439C1D0Ev,_ZThn128_N8S19439C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19439C1D1Ev,_ZTv0_n16_N8S19439C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19439C1D1Ev,_ZThn128_N8S19439C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C1D0Ev,_ZTv0_n12_N8S19439C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19439C1D0Ev,_ZThn344_N8S19439C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19439C1D0Ev,_ZThn156_N8S19439C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19439C1D0Ev,_ZThn108_N8S19439C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19439C1D1Ev,_ZTv0_n12_N8S19439C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19439C1D1Ev,_ZThn344_N8S19439C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19439C1D1Ev,_ZThn156_N8S19439C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19439C1D1Ev,_ZThn108_N8S19439C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C1D0Ev,_ZTv0_n24_N8S19439C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19439C1D0Ev,_ZThn328_N8S19439C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19439C1D0Ev,_ZThn28_N8S19439C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19439C1D1Ev,_ZTv0_n24_N8S19439C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19439C1D1Ev,_ZThn328_N8S19439C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19439C1D1Ev,_ZThn28_N8S19439C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19439C1 = {  "S19439C1", // class name
  bases_S19439C1, 23,
  &(vtc_S19439C1[0]), // expected_vtbl_contents
  &(vtt_S19439C1[0]), // expected_vtt_contents
  ABISELECT(1232,604), // object size
  NSPAIRA(_ZTI8S19439C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19439C1),107, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19439C1),49, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names134,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15944C2  {
  int s15944c2f0;
  __tsi64 s15944c2f1;
  void *s15944c2f2;
  ::S2123C26 s15944c2f3;
  int s15944c2f4[2];
  ::S21777C11_nt s15944c2f5;
  int s15944c2f6;
  ::S2123C20_nt s15944c2f7;
  ::S2123C20_nt s15944c2f8;
  __tsi64 s15944c2f9;
  ::S2123C20_nt s15944c2f10;
  ::S2123C20_nt s15944c2f11;
  int s15944c2f12;
  __tsi64 s15944c2f13;
  void  mf15944c2(); // _ZN8S15944C29mf15944c2Ev
};
//SIG(-1 S15944C2) C1{ m Fi FL Fp FC2{ m Fp Fi FC3{ m} FC3} Fi[2] FC4{ m Fp} Fi FC5{ m Fp Fi FC6{ m}} FC5 FL FC5 FC5 Fi FL}


void  S15944C2 ::mf15944c2(){}

static void Test_S15944C2()
{
  {
    init_simple_test("S15944C2");
    S15944C2 lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S15944C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15944C2)");
    check_field_offset(lv, s15944c2f0, 0, "S15944C2.s15944c2f0");
    check_field_offset(lv, s15944c2f1, ABISELECT(8,4), "S15944C2.s15944c2f1");
    check_field_offset(lv, s15944c2f2, ABISELECT(16,12), "S15944C2.s15944c2f2");
    check_field_offset(lv, s15944c2f3, ABISELECT(24,16), "S15944C2.s15944c2f3");
    check_field_offset(lv, s15944c2f4, ABISELECT(40,28), "S15944C2.s15944c2f4");
    check_field_offset(lv, s15944c2f5, ABISELECT(48,36), "S15944C2.s15944c2f5");
    check_field_offset(lv, s15944c2f6, ABISELECT(56,40), "S15944C2.s15944c2f6");
    check_field_offset(lv, s15944c2f7, ABISELECT(64,44), "S15944C2.s15944c2f7");
    check_field_offset(lv, s15944c2f8, ABISELECT(80,56), "S15944C2.s15944c2f8");
    check_field_offset(lv, s15944c2f9, ABISELECT(96,68), "S15944C2.s15944c2f9");
    check_field_offset(lv, s15944c2f10, ABISELECT(104,76), "S15944C2.s15944c2f10");
    check_field_offset(lv, s15944c2f11, ABISELECT(120,88), "S15944C2.s15944c2f11");
    check_field_offset(lv, s15944c2f12, ABISELECT(136,100), "S15944C2.s15944c2f12");
    check_field_offset(lv, s15944c2f13, ABISELECT(144,104), "S15944C2.s15944c2f13");
  }
}
static Arrange_To_Call_Me vS15944C2(Test_S15944C2, "S15944C2", ABISELECT(152,112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15944C10  {
  char s15944c10f0[2];
  int s15944c10f1;
  char s15944c10f2;
  int s15944c10f3[2];
  short s15944c10f4;
  void *s15944c10f5[2];
  void  mf15944c10(); // _ZN9S15944C1010mf15944c10Ev
};
//SIG(-1 S15944C10) C1{ m Fc[2] Fi Fc Fi[2] Fs Fp[2]}


void  S15944C10 ::mf15944c10(){}

static void Test_S15944C10()
{
  {
    init_simple_test("S15944C10");
    S15944C10 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S15944C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15944C10)");
    check_field_offset(lv, s15944c10f0, 0, "S15944C10.s15944c10f0");
    check_field_offset(lv, s15944c10f1, 4, "S15944C10.s15944c10f1");
    check_field_offset(lv, s15944c10f2, 8, "S15944C10.s15944c10f2");
    check_field_offset(lv, s15944c10f3, 12, "S15944C10.s15944c10f3");
    check_field_offset(lv, s15944c10f4, 20, "S15944C10.s15944c10f4");
    check_field_offset(lv, s15944c10f5, 24, "S15944C10.s15944c10f5");
  }
}
static Arrange_To_Call_Me vS15944C10(Test_S15944C10, "S15944C10", ABISELECT(40,32));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S15944C13_nt  {
  int s15944c13f0[2];
  void  mf15944c13(); // _ZN12S15944C13_nt10mf15944c13Ev
};
//SIG(-1 S15944C13_nt) C1{ m Fi[2]}


void  S15944C13_nt ::mf15944c13(){}

//skip512 S15944C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15944C11_nt  {
  ::S708C6_nt s15944c11f0;
  ::S15944C13_nt s15944c11f1;
  void  mf15944c11(); // _ZN12S15944C11_nt10mf15944c11Ev
};
//SIG(-1 S15944C11_nt) C1{ m FC2{ m Fi[2]} FC3{ m Fi[2]}}


void  S15944C11_nt ::mf15944c11(){}

//skip512 S15944C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15944C9  : S15944C10 {
  ::S15944C11_nt s15944c9f0;
  ::S15944C13_nt s15944c9f1;
  int s15944c9f2;
  char s15944c9f3;
  int s15944c9f4[2];
  void *s15944c9f5[2];
  char s15944c9f6;
};
//SIG(-1 S15944C9) C1{ BC2{ m Fc[2] Fi Fc Fi[2] Fs Fp[2]} FC3{ m FC4{ m Fi[2]} FC5{ m Fi[2]}} FC5 Fi Fc Fi[2] Fp[2] Fc}



static void Test_S15944C9()
{
  extern Class_Descriptor cd_S15944C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,22)];
    init_test(&cd_S15944C9, buf);
    S15944C9 &lv = *(new (buf) S15944C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,84), "sizeof(S15944C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15944C9)");
    check_base_class_offset(lv, (S15944C10*), 0, "S15944C9");
    check_field_offset(lv, s15944c9f0, ABISELECT(40,32), "S15944C9.s15944c9f0");
    check_field_offset(lv, s15944c9f1, ABISELECT(56,48), "S15944C9.s15944c9f1");
    check_field_offset(lv, s15944c9f2, ABISELECT(64,56), "S15944C9.s15944c9f2");
    check_field_offset(lv, s15944c9f3, ABISELECT(68,60), "S15944C9.s15944c9f3");
    check_field_offset(lv, s15944c9f4, ABISELECT(72,64), "S15944C9.s15944c9f4");
    check_field_offset(lv, s15944c9f5, ABISELECT(80,72), "S15944C9.s15944c9f5");
    check_field_offset(lv, s15944c9f6, ABISELECT(96,80), "S15944C9.s15944c9f6");
    test_class_info(&lv, &cd_S15944C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15944C9(Test_S15944C9, "S15944C9", ABISELECT(104,84));

#else // __cplusplus

extern Class_Descriptor cd_S15944C10;
static Base_Class bases_S15944C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15944C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S15944C9 = {  "S15944C9", // class name
  bases_S15944C9, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(104,84), // 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  S15944C14_nt  {
  void *s15944c14f0;
  void  mf15944c14(); // _ZN12S15944C14_nt10mf15944c14Ev
};
//SIG(-1 S15944C14_nt) C1{ m Fp}


void  S15944C14_nt ::mf15944c14(){}

//skip512 S15944C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15944C1  {
  ::S15944C2 s15944c1f0;
  __tsi64 s15944c1f1;
  ::S15944C9 s15944c1f2;
  ::S15944C14_nt s15944c1f3;
  void *s15944c1f4;
  int s15944c1f5;
  void  mf15944c1(); // _ZN8S15944C19mf15944c1Ev
};
//SIG(1 S15944C1) C1{ m FC2{ m Fi FL Fp FC3{ m Fp Fi FC4{ m} FC4} Fi[2] FC5{ m Fp} Fi FC6{ m Fp Fi FC7{ m}} FC6 FL FC6 FC6 Fi FL} FL FC8{ BC9{ m Fc[2] Fi Fc Fi[2] Fs Fp[2]} FC10{ m FC11{ m Fi[2]} FC12{ m Fi[2]}} FC12 Fi Fc Fi[2] Fp[2] Fc} FC13{ m Fp} Fp Fi}


void  S15944C1 ::mf15944c1(){}

static void Test_S15944C1()
{
  {
    init_simple_test("S15944C1");
    S15944C1 lv;
    check2(sizeof(lv), ABISELECT(288,216), "sizeof(S15944C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15944C1)");
    check_field_offset(lv, s15944c1f0, 0, "S15944C1.s15944c1f0");
    check_field_offset(lv, s15944c1f1, ABISELECT(152,112), "S15944C1.s15944c1f1");
    check_field_offset(lv, s15944c1f2, ABISELECT(160,120), "S15944C1.s15944c1f2");
    check_field_offset(lv, s15944c1f3, ABISELECT(264,204), "S15944C1.s15944c1f3");
    check_field_offset(lv, s15944c1f4, ABISELECT(272,208), "S15944C1.s15944c1f4");
    check_field_offset(lv, s15944c1f5, ABISELECT(280,212), "S15944C1.s15944c1f5");
  }
}
static Arrange_To_Call_Me vS15944C1(Test_S15944C1, "S15944C1", ABISELECT(288,216));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4644C3  {
  void *s4644c3f0;
  int s4644c3f1;
  virtual  ~S4644C3(); // _ZN7S4644C3D1Ev
  virtual void  v20(); // _ZN7S4644C33v20Ev
  virtual void  v21(); // _ZN7S4644C33v21Ev
  virtual void  v22(); // _ZN7S4644C33v22Ev
  S4644C3(); // tgen
};
//SIG(-1 S4644C3) C1{ vd v1 v2 v3 Fp Fi}


 S4644C3 ::~S4644C3(){ note_dtor("S4644C3", this);}
void  S4644C3 ::v20(){vfunc_called(this, "_ZN7S4644C33v20Ev");}
void  S4644C3 ::v21(){vfunc_called(this, "_ZN7S4644C33v21Ev");}
void  S4644C3 ::v22(){vfunc_called(this, "_ZN7S4644C33v22Ev");}
S4644C3 ::S4644C3(){ note_ctor("S4644C3", this);} // tgen

static void Test_S4644C3()
{
  extern Class_Descriptor cd_S4644C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4644C3, buf);
    S4644C3 *dp, &lv = *(dp=new (buf) S4644C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4644C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4644C3)");
    check_field_offset(lv, s4644c3f0, ABISELECT(8,4), "S4644C3.s4644c3f0");
    check_field_offset(lv, s4644c3f1, ABISELECT(16,8), "S4644C3.s4644c3f1");
    test_class_info(&lv, &cd_S4644C3);
    dp->~S4644C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4644C3(Test_S4644C3, "S4644C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4644C3C1Ev();
extern void _ZN7S4644C3D1Ev();
Name_Map name_map_S4644C3[] = {
  NSPAIR(_ZN7S4644C3C1Ev),
  NSPAIR(_ZN7S4644C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4644C3[];
extern void _ZN7S4644C3D1Ev();
extern void _ZN7S4644C3D0Ev();
extern void _ZN7S4644C33v20Ev();
extern void _ZN7S4644C33v21Ev();
extern void _ZN7S4644C33v22Ev();
static  VTBL_ENTRY vtc_S4644C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4644C3[0]),
  (VTBL_ENTRY)&_ZN7S4644C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4644C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v22Ev,
};
extern VTBL_ENTRY _ZTI7S4644C3[];
extern  VTBL_ENTRY _ZTV7S4644C3[];
Class_Descriptor cd_S4644C3 = {  "S4644C3", // class name
  0,0,//no base classes
  &(vtc_S4644C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4644C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4644C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4644C2  : S4644C3 {
  virtual  ~S4644C2(); // _ZN7S4644C2D1Ev
  virtual void  v23(); // _ZN7S4644C23v23Ev
  virtual void  v24(); // _ZN7S4644C23v24Ev
  virtual void  v25(); // _ZN7S4644C23v25Ev
  virtual void  v26(); // _ZN7S4644C23v26Ev
  virtual void  v27(); // _ZN7S4644C23v27Ev
  virtual void  v28(); // _ZN7S4644C23v28Ev
  virtual void  v29(); // _ZN7S4644C23v29Ev
  virtual void  v30(); // _ZN7S4644C23v30Ev
  virtual void  v31(); // _ZN7S4644C23v31Ev
  virtual void  v32(); // _ZN7S4644C23v32Ev
  virtual void  v33(); // _ZN7S4644C23v33Ev
  virtual void  v34(); // _ZN7S4644C23v34Ev
  virtual void  v35(); // _ZN7S4644C23v35Ev
  virtual void  v36(); // _ZN7S4644C23v36Ev
  virtual void  v37(); // _ZN7S4644C23v37Ev
  virtual void  v38(); // _ZN7S4644C23v38Ev
  virtual void  v39(); // _ZN7S4644C23v39Ev
  virtual void  v40(); // _ZN7S4644C23v40Ev
  virtual void  v41(); // _ZN7S4644C23v41Ev
  S4644C2(); // tgen
};
//SIG(-1 S4644C2) C1{ BC2{ vd v20 v21 v22 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19}


 S4644C2 ::~S4644C2(){ note_dtor("S4644C2", this);}
void  S4644C2 ::v23(){vfunc_called(this, "_ZN7S4644C23v23Ev");}
void  S4644C2 ::v24(){vfunc_called(this, "_ZN7S4644C23v24Ev");}
void  S4644C2 ::v25(){vfunc_called(this, "_ZN7S4644C23v25Ev");}
void  S4644C2 ::v26(){vfunc_called(this, "_ZN7S4644C23v26Ev");}
void  S4644C2 ::v27(){vfunc_called(this, "_ZN7S4644C23v27Ev");}
void  S4644C2 ::v28(){vfunc_called(this, "_ZN7S4644C23v28Ev");}
void  S4644C2 ::v29(){vfunc_called(this, "_ZN7S4644C23v29Ev");}
void  S4644C2 ::v30(){vfunc_called(this, "_ZN7S4644C23v30Ev");}
void  S4644C2 ::v31(){vfunc_called(this, "_ZN7S4644C23v31Ev");}
void  S4644C2 ::v32(){vfunc_called(this, "_ZN7S4644C23v32Ev");}
void  S4644C2 ::v33(){vfunc_called(this, "_ZN7S4644C23v33Ev");}
void  S4644C2 ::v34(){vfunc_called(this, "_ZN7S4644C23v34Ev");}
void  S4644C2 ::v35(){vfunc_called(this, "_ZN7S4644C23v35Ev");}
void  S4644C2 ::v36(){vfunc_called(this, "_ZN7S4644C23v36Ev");}
void  S4644C2 ::v37(){vfunc_called(this, "_ZN7S4644C23v37Ev");}
void  S4644C2 ::v38(){vfunc_called(this, "_ZN7S4644C23v38Ev");}
void  S4644C2 ::v39(){vfunc_called(this, "_ZN7S4644C23v39Ev");}
void  S4644C2 ::v40(){vfunc_called(this, "_ZN7S4644C23v40Ev");}
void  S4644C2 ::v41(){vfunc_called(this, "_ZN7S4644C23v41Ev");}
S4644C2 ::S4644C2(){ note_ctor("S4644C2", this);} // tgen

static void Test_S4644C2()
{
  extern Class_Descriptor cd_S4644C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4644C2, buf);
    S4644C2 *dp, &lv = *(dp=new (buf) S4644C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4644C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4644C2)");
    check_base_class_offset(lv, (S4644C3*), 0, "S4644C2");
    test_class_info(&lv, &cd_S4644C2);
    dp->~S4644C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4644C2(Test_S4644C2, "S4644C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4644C2C1Ev();
extern void _ZN7S4644C2D1Ev();
Name_Map name_map_S4644C2[] = {
  NSPAIR(_ZN7S4644C2C1Ev),
  NSPAIR(_ZN7S4644C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4644C3;
extern VTBL_ENTRY _ZTI7S4644C3[];
extern  VTBL_ENTRY _ZTV7S4644C3[];
static Base_Class bases_S4644C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4644C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4644C2[];
extern void _ZN7S4644C2D1Ev();
extern void _ZN7S4644C2D0Ev();
extern void _ZN7S4644C33v20Ev();
extern void _ZN7S4644C33v21Ev();
extern void _ZN7S4644C33v22Ev();
extern void _ZN7S4644C23v23Ev();
extern void _ZN7S4644C23v24Ev();
extern void _ZN7S4644C23v25Ev();
extern void _ZN7S4644C23v26Ev();
extern void _ZN7S4644C23v27Ev();
extern void _ZN7S4644C23v28Ev();
extern void _ZN7S4644C23v29Ev();
extern void _ZN7S4644C23v30Ev();
extern void _ZN7S4644C23v31Ev();
extern void _ZN7S4644C23v32Ev();
extern void _ZN7S4644C23v33Ev();
extern void _ZN7S4644C23v34Ev();
extern void _ZN7S4644C23v35Ev();
extern void _ZN7S4644C23v36Ev();
extern void _ZN7S4644C23v37Ev();
extern void _ZN7S4644C23v38Ev();
extern void _ZN7S4644C23v39Ev();
extern void _ZN7S4644C23v40Ev();
extern void _ZN7S4644C23v41Ev();
static  VTBL_ENTRY vtc_S4644C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4644C2[0]),
  (VTBL_ENTRY)&_ZN7S4644C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4644C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v34Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v35Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v36Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v41Ev,
};
extern VTBL_ENTRY _ZTI7S4644C2[];
extern  VTBL_ENTRY _ZTV7S4644C2[];
Class_Descriptor cd_S4644C2 = {  "S4644C2", // class name
  bases_S4644C2, 1,
  &(vtc_S4644C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4644C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4644C2),26, //virtual function table var
  2, // 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  S4644C1  : S4644C2 {
  void *s4644c1f0[2];
  int s4644c1f1[7];
  char s4644c1f2[2];
  void *s4644c1f3;
  ::S3681C6_nt s4644c1f4;
  int s4644c1f5[3];
  virtual  ~S4644C1(); // _ZN7S4644C1D1Ev
  virtual void  v1(); // _ZN7S4644C12v1Ev
  virtual void  v2(); // _ZN7S4644C12v2Ev
  virtual void  v3(); // _ZN7S4644C12v3Ev
  virtual void  v4(); // _ZN7S4644C12v4Ev
  virtual void  v5(); // _ZN7S4644C12v5Ev
  virtual void  v6(); // _ZN7S4644C12v6Ev
  virtual void  v7(); // _ZN7S4644C12v7Ev
  virtual void  v8(); // _ZN7S4644C12v8Ev
  virtual void  v9(); // _ZN7S4644C12v9Ev
  virtual void  v10(); // _ZN7S4644C13v10Ev
  virtual void  v11(); // _ZN7S4644C13v11Ev
  virtual void  v12(); // _ZN7S4644C13v12Ev
  virtual void  v13(); // _ZN7S4644C13v13Ev
  virtual void  v14(); // _ZN7S4644C13v14Ev
  virtual void  v15(); // _ZN7S4644C13v15Ev
  virtual void  v16(); // _ZN7S4644C13v16Ev
  virtual void  v17(); // _ZN7S4644C13v17Ev
  virtual void  v18(); // _ZN7S4644C13v18Ev
  virtual void  v19(); // _ZN7S4644C13v19Ev
  S4644C1(); // tgen
};
//SIG(1 S4644C1) C1{ BC2{ BC3{ vd v20 v21 v22 Fp Fi} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[2] Fi[7] Fc[2] Fp FC4{ m Fp[2]} Fi[3]}


 S4644C1 ::~S4644C1(){ note_dtor("S4644C1", this);}
void  S4644C1 ::v1(){vfunc_called(this, "_ZN7S4644C12v1Ev");}
void  S4644C1 ::v2(){vfunc_called(this, "_ZN7S4644C12v2Ev");}
void  S4644C1 ::v3(){vfunc_called(this, "_ZN7S4644C12v3Ev");}
void  S4644C1 ::v4(){vfunc_called(this, "_ZN7S4644C12v4Ev");}
void  S4644C1 ::v5(){vfunc_called(this, "_ZN7S4644C12v5Ev");}
void  S4644C1 ::v6(){vfunc_called(this, "_ZN7S4644C12v6Ev");}
void  S4644C1 ::v7(){vfunc_called(this, "_ZN7S4644C12v7Ev");}
void  S4644C1 ::v8(){vfunc_called(this, "_ZN7S4644C12v8Ev");}
void  S4644C1 ::v9(){vfunc_called(this, "_ZN7S4644C12v9Ev");}
void  S4644C1 ::v10(){vfunc_called(this, "_ZN7S4644C13v10Ev");}
void  S4644C1 ::v11(){vfunc_called(this, "_ZN7S4644C13v11Ev");}
void  S4644C1 ::v12(){vfunc_called(this, "_ZN7S4644C13v12Ev");}
void  S4644C1 ::v13(){vfunc_called(this, "_ZN7S4644C13v13Ev");}
void  S4644C1 ::v14(){vfunc_called(this, "_ZN7S4644C13v14Ev");}
void  S4644C1 ::v15(){vfunc_called(this, "_ZN7S4644C13v15Ev");}
void  S4644C1 ::v16(){vfunc_called(this, "_ZN7S4644C13v16Ev");}
void  S4644C1 ::v17(){vfunc_called(this, "_ZN7S4644C13v17Ev");}
void  S4644C1 ::v18(){vfunc_called(this, "_ZN7S4644C13v18Ev");}
void  S4644C1 ::v19(){vfunc_called(this, "_ZN7S4644C13v19Ev");}
S4644C1 ::S4644C1(){ note_ctor("S4644C1", this);} // tgen

static void Test_S4644C1()
{
  extern Class_Descriptor cd_S4644C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S4644C1, buf);
    S4644C1 *dp, &lv = *(dp=new (buf) S4644C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S4644C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4644C1)");
    check_base_class_offset(lv, (S4644C3*)(S4644C2*), 0, "S4644C1");
    check_base_class_offset(lv, (S4644C2*), 0, "S4644C1");
    check_field_offset(lv, s4644c1f0, ABISELECT(24,12), "S4644C1.s4644c1f0");
    check_field_offset(lv, s4644c1f1, ABISELECT(40,20), "S4644C1.s4644c1f1");
    check_field_offset(lv, s4644c1f2, ABISELECT(68,48), "S4644C1.s4644c1f2");
    check_field_offset(lv, s4644c1f3, ABISELECT(72,52), "S4644C1.s4644c1f3");
    check_field_offset(lv, s4644c1f4, ABISELECT(80,56), "S4644C1.s4644c1f4");
    check_field_offset(lv, s4644c1f5, ABISELECT(96,64), "S4644C1.s4644c1f5");
    test_class_info(&lv, &cd_S4644C1);
    dp->~S4644C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4644C1(Test_S4644C1, "S4644C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S4644C1C1Ev();
extern void _ZN7S4644C1D1Ev();
Name_Map name_map_S4644C1[] = {
  NSPAIR(_ZN7S4644C1C1Ev),
  NSPAIR(_ZN7S4644C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4644C3;
extern VTBL_ENTRY _ZTI7S4644C3[];
extern  VTBL_ENTRY _ZTV7S4644C3[];
extern Class_Descriptor cd_S4644C2;
extern VTBL_ENTRY _ZTI7S4644C2[];
extern  VTBL_ENTRY _ZTV7S4644C2[];
static Base_Class bases_S4644C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4644C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4644C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4644C1[];
extern void _ZN7S4644C1D1Ev();
extern void _ZN7S4644C1D0Ev();
extern void _ZN7S4644C33v20Ev();
extern void _ZN7S4644C33v21Ev();
extern void _ZN7S4644C33v22Ev();
extern void _ZN7S4644C23v23Ev();
extern void _ZN7S4644C23v24Ev();
extern void _ZN7S4644C23v25Ev();
extern void _ZN7S4644C23v26Ev();
extern void _ZN7S4644C23v27Ev();
extern void _ZN7S4644C23v28Ev();
extern void _ZN7S4644C23v29Ev();
extern void _ZN7S4644C23v30Ev();
extern void _ZN7S4644C23v31Ev();
extern void _ZN7S4644C23v32Ev();
extern void _ZN7S4644C23v33Ev();
extern void _ZN7S4644C23v34Ev();
extern void _ZN7S4644C23v35Ev();
extern void _ZN7S4644C23v36Ev();
extern void _ZN7S4644C23v37Ev();
extern void _ZN7S4644C23v38Ev();
extern void _ZN7S4644C23v39Ev();
extern void _ZN7S4644C23v40Ev();
extern void _ZN7S4644C23v41Ev();
extern void _ZN7S4644C12v1Ev();
extern void _ZN7S4644C12v2Ev();
extern void _ZN7S4644C12v3Ev();
extern void _ZN7S4644C12v4Ev();
extern void _ZN7S4644C12v5Ev();
extern void _ZN7S4644C12v6Ev();
extern void _ZN7S4644C12v7Ev();
extern void _ZN7S4644C12v8Ev();
extern void _ZN7S4644C12v9Ev();
extern void _ZN7S4644C13v10Ev();
extern void _ZN7S4644C13v11Ev();
extern void _ZN7S4644C13v12Ev();
extern void _ZN7S4644C13v13Ev();
extern void _ZN7S4644C13v14Ev();
extern void _ZN7S4644C13v15Ev();
extern void _ZN7S4644C13v16Ev();
extern void _ZN7S4644C13v17Ev();
extern void _ZN7S4644C13v18Ev();
extern void _ZN7S4644C13v19Ev();
static  VTBL_ENTRY vtc_S4644C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4644C1[0]),
  (VTBL_ENTRY)&_ZN7S4644C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4644C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4644C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v34Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v35Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v36Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4644C23v41Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4644C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v18Ev,
  (VTBL_ENTRY)&_ZN7S4644C13v19Ev,
};
extern VTBL_ENTRY _ZTI7S4644C1[];
extern  VTBL_ENTRY _ZTV7S4644C1[];
Class_Descriptor cd_S4644C1 = {  "S4644C1", // class name
  bases_S4644C1, 2,
  &(vtc_S4644C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S4644C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4644C1),45, //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  S20940C3_nt  {
  virtual void  v9(); // _ZN11S20940C3_nt2v9Ev
  virtual void  v10(); // _ZN11S20940C3_nt3v10Ev
  virtual void  v11(); // _ZN11S20940C3_nt3v11Ev
  virtual void  v12(); // _ZN11S20940C3_nt3v12Ev
  virtual void  v13(); // _ZN11S20940C3_nt3v13Ev
  ~S20940C3_nt(); // tgen
  S20940C3_nt(); // tgen
};
//SIG(-1 S20940C3_nt) C1{ v1 v2 v3 v4 v5}


void  S20940C3_nt ::v9(){vfunc_called(this, "_ZN11S20940C3_nt2v9Ev");}
void  S20940C3_nt ::v10(){vfunc_called(this, "_ZN11S20940C3_nt3v10Ev");}
void  S20940C3_nt ::v11(){vfunc_called(this, "_ZN11S20940C3_nt3v11Ev");}
void  S20940C3_nt ::v12(){vfunc_called(this, "_ZN11S20940C3_nt3v12Ev");}
void  S20940C3_nt ::v13(){vfunc_called(this, "_ZN11S20940C3_nt3v13Ev");}
S20940C3_nt ::~S20940C3_nt(){ note_dtor("S20940C3_nt", this);} // tgen
S20940C3_nt ::S20940C3_nt(){ note_ctor("S20940C3_nt", this);} // tgen

//skip512 S20940C3_nt

#else // __cplusplus

extern void _ZN11S20940C3_ntC1Ev();
extern void _ZN11S20940C3_ntD1Ev();
Name_Map name_map_S20940C3_nt[] = {
  NSPAIR(_ZN11S20940C3_ntC1Ev),
  NSPAIR(_ZN11S20940C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20940C3_nt[];
extern void _ZN11S20940C3_nt2v9Ev();
extern void _ZN11S20940C3_nt3v10Ev();
extern void _ZN11S20940C3_nt3v11Ev();
extern void _ZN11S20940C3_nt3v12Ev();
extern void _ZN11S20940C3_nt3v13Ev();
static  VTBL_ENTRY vtc_S20940C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20940C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20940C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI11S20940C3_nt[];
VTBL_ENTRY *P__ZTI11S20940C3_nt = _ZTI11S20940C3_nt; 
extern  VTBL_ENTRY _ZTV11S20940C3_nt[];
Class_Descriptor cd_S20940C3_nt = {  "S20940C3_nt", // class name
  0,0,//no base classes
  &(vtc_S20940C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20940C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20940C3_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20940C2  : virtual S20940C3_nt {
  void *s20940c2f0[4];
  virtual void  v14(); // _ZN8S20940C23v14Ev
  virtual void  v15(); // _ZN8S20940C23v15Ev
  virtual void  v16(); // _ZN8S20940C23v16Ev
  virtual void  v17(); // _ZN8S20940C23v17Ev
  virtual void  v18(); // _ZN8S20940C23v18Ev
  virtual void  v19(); // _ZN8S20940C23v19Ev
  virtual void  v20(); // _ZN8S20940C23v20Ev
  ~S20940C2(); // tgen
  S20940C2(); // tgen
};
//SIG(-1 S20940C2) C1{ VBC2{ v8 v9 v10 v11 v12} v1 v2 v3 v4 v5 v6 v7 Fp[4]}


void  S20940C2 ::v14(){vfunc_called(this, "_ZN8S20940C23v14Ev");}
void  S20940C2 ::v15(){vfunc_called(this, "_ZN8S20940C23v15Ev");}
void  S20940C2 ::v16(){vfunc_called(this, "_ZN8S20940C23v16Ev");}
void  S20940C2 ::v17(){vfunc_called(this, "_ZN8S20940C23v17Ev");}
void  S20940C2 ::v18(){vfunc_called(this, "_ZN8S20940C23v18Ev");}
void  S20940C2 ::v19(){vfunc_called(this, "_ZN8S20940C23v19Ev");}
void  S20940C2 ::v20(){vfunc_called(this, "_ZN8S20940C23v20Ev");}
S20940C2 ::~S20940C2(){ note_dtor("S20940C2", this);} // tgen
S20940C2 ::S20940C2(){ note_ctor("S20940C2", this);} // tgen

static void Test_S20940C2()
{
  extern Class_Descriptor cd_S20940C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20940C2, buf);
    S20940C2 *dp, &lv = *(dp=new (buf) S20940C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20940C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20940C2)");
    check_base_class_offset(lv, (S20940C3_nt*), 0, "S20940C2");
    check_field_offset(lv, s20940c2f0, ABISELECT(8,4), "S20940C2.s20940c2f0");
    test_class_info(&lv, &cd_S20940C2);
    dp->~S20940C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20940C2(Test_S20940C2, "S20940C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20940C2C1Ev();
extern void _ZN8S20940C2D1Ev();
Name_Map name_map_S20940C2[] = {
  NSPAIR(_ZN8S20940C2C1Ev),
  NSPAIR(_ZN8S20940C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20940C3_nt;
extern VTBL_ENTRY _ZTI11S20940C3_nt[];
extern  VTBL_ENTRY _ZTV11S20940C3_nt[];
static Base_Class bases_S20940C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20940C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //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 _ZTI8S20940C2[];
extern void _ZN11S20940C3_nt2v9Ev();
extern void _ZN11S20940C3_nt3v10Ev();
extern void _ZN11S20940C3_nt3v11Ev();
extern void _ZN11S20940C3_nt3v12Ev();
extern void _ZN11S20940C3_nt3v13Ev();
extern void _ZN8S20940C23v14Ev();
extern void _ZN8S20940C23v15Ev();
extern void _ZN8S20940C23v16Ev();
extern void _ZN8S20940C23v17Ev();
extern void _ZN8S20940C23v18Ev();
extern void _ZN8S20940C23v19Ev();
extern void _ZN8S20940C23v20Ev();
static  VTBL_ENTRY vtc_S20940C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C2[0]),
  (VTBL_ENTRY)&_ZN11S20940C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v20Ev,
};
extern VTBL_ENTRY _ZTV8S20940C2[];
static  VTT_ENTRY vtt_S20940C2[] = {
  {&(_ZTV8S20940C2[8]),  8,20},
  {&(_ZTV8S20940C2[8]),  8,20},
};
extern VTBL_ENTRY _ZTI8S20940C2[];
extern  VTBL_ENTRY _ZTV8S20940C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20940C2[];
Class_Descriptor cd_S20940C2 = {  "S20940C2", // class name
  bases_S20940C2, 1,
  &(vtc_S20940C2[0]), // expected_vtbl_contents
  &(vtt_S20940C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20940C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20940C2),20, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20940C2),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  S20940C6_nt  {
  int s20940c6f0;
  virtual void  v21(); // _ZN11S20940C6_nt3v21Ev
  virtual void  v22(); // _ZN11S20940C6_nt3v22Ev
  virtual void  v23(); // _ZN11S20940C6_nt3v23Ev
  virtual void  v24(); // _ZN11S20940C6_nt3v24Ev
  virtual void  v25(); // _ZN11S20940C6_nt3v25Ev
  ~S20940C6_nt(); // tgen
  S20940C6_nt(); // tgen
};
//SIG(-1 S20940C6_nt) C1{ v1 v2 v3 v4 v5 Fi}


void  S20940C6_nt ::v21(){vfunc_called(this, "_ZN11S20940C6_nt3v21Ev");}
void  S20940C6_nt ::v22(){vfunc_called(this, "_ZN11S20940C6_nt3v22Ev");}
void  S20940C6_nt ::v23(){vfunc_called(this, "_ZN11S20940C6_nt3v23Ev");}
void  S20940C6_nt ::v24(){vfunc_called(this, "_ZN11S20940C6_nt3v24Ev");}
void  S20940C6_nt ::v25(){vfunc_called(this, "_ZN11S20940C6_nt3v25Ev");}
S20940C6_nt ::~S20940C6_nt(){ note_dtor("S20940C6_nt", this);} // tgen
S20940C6_nt ::S20940C6_nt(){ note_ctor("S20940C6_nt", this);} // tgen

//skip512 S20940C6_nt

#else // __cplusplus

extern void _ZN11S20940C6_ntC1Ev();
extern void _ZN11S20940C6_ntD1Ev();
Name_Map name_map_S20940C6_nt[] = {
  NSPAIR(_ZN11S20940C6_ntC1Ev),
  NSPAIR(_ZN11S20940C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20940C6_nt[];
extern void _ZN11S20940C6_nt3v21Ev();
extern void _ZN11S20940C6_nt3v22Ev();
extern void _ZN11S20940C6_nt3v23Ev();
extern void _ZN11S20940C6_nt3v24Ev();
extern void _ZN11S20940C6_nt3v25Ev();
static  VTBL_ENTRY vtc_S20940C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20940C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI11S20940C6_nt[];
VTBL_ENTRY *P__ZTI11S20940C6_nt = _ZTI11S20940C6_nt; 
extern  VTBL_ENTRY _ZTV11S20940C6_nt[];
Class_Descriptor cd_S20940C6_nt = {  "S20940C6_nt", // class name
  0,0,//no base classes
  &(vtc_S20940C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S20940C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20940C6_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20940C7  {
  long double s20940c7f0[3];
  virtual void  v26(); // _ZN8S20940C73v26Ev
  virtual void  v27(); // _ZN8S20940C73v27Ev
  virtual void  v28(); // _ZN8S20940C73v28Ev
  virtual void  v29(); // _ZN8S20940C73v29Ev
  virtual void  v30(); // _ZN8S20940C73v30Ev
  virtual void  v31(); // _ZN8S20940C73v31Ev
  virtual void  v32(); // _ZN8S20940C73v32Ev
  ~S20940C7(); // tgen
  S20940C7(); // tgen
};
//SIG(-1 S20940C7) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S20940C7 ::v26(){vfunc_called(this, "_ZN8S20940C73v26Ev");}
void  S20940C7 ::v27(){vfunc_called(this, "_ZN8S20940C73v27Ev");}
void  S20940C7 ::v28(){vfunc_called(this, "_ZN8S20940C73v28Ev");}
void  S20940C7 ::v29(){vfunc_called(this, "_ZN8S20940C73v29Ev");}
void  S20940C7 ::v30(){vfunc_called(this, "_ZN8S20940C73v30Ev");}
void  S20940C7 ::v31(){vfunc_called(this, "_ZN8S20940C73v31Ev");}
void  S20940C7 ::v32(){vfunc_called(this, "_ZN8S20940C73v32Ev");}
S20940C7 ::~S20940C7(){ note_dtor("S20940C7", this);} // tgen
S20940C7 ::S20940C7(){ note_ctor("S20940C7", this);} // tgen

static void Test_S20940C7()
{
  extern Class_Descriptor cd_S20940C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S20940C7, buf);
    S20940C7 *dp, &lv = *(dp=new (buf) S20940C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20940C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20940C7)");
    check_field_offset(lv, s20940c7f0, ABISELECT(16,4), "S20940C7.s20940c7f0");
    test_class_info(&lv, &cd_S20940C7);
    dp->~S20940C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20940C7(Test_S20940C7, "S20940C7", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S20940C7C1Ev();
extern void _ZN8S20940C7D1Ev();
Name_Map name_map_S20940C7[] = {
  NSPAIR(_ZN8S20940C7C1Ev),
  NSPAIR(_ZN8S20940C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20940C7[];
extern void _ZN8S20940C73v26Ev();
extern void _ZN8S20940C73v27Ev();
extern void _ZN8S20940C73v28Ev();
extern void _ZN8S20940C73v29Ev();
extern void _ZN8S20940C73v30Ev();
extern void _ZN8S20940C73v31Ev();
extern void _ZN8S20940C73v32Ev();
static  VTBL_ENTRY vtc_S20940C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C7[0]),
  (VTBL_ENTRY)&_ZN8S20940C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v32Ev,
};
extern VTBL_ENTRY _ZTI8S20940C7[];
extern  VTBL_ENTRY _ZTV8S20940C7[];
Class_Descriptor cd_S20940C7 = {  "S20940C7", // class name
  0,0,//no base classes
  &(vtc_S20940C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S20940C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20940C7),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20940C5  : S20940C6_nt , virtual S20940C7 {
  virtual void  v33(); // _ZN8S20940C53v33Ev
  virtual void  v34(); // _ZN8S20940C53v34Ev
  virtual void  v35(); // _ZN8S20940C53v35Ev
  virtual void  v36(); // _ZN8S20940C53v36Ev
  virtual void  v37(); // _ZN8S20940C53v37Ev
  ~S20940C5(); // tgen
  S20940C5(); // tgen
};
//SIG(-1 S20940C5) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S20940C5 ::v33(){vfunc_called(this, "_ZN8S20940C53v33Ev");}
void  S20940C5 ::v34(){vfunc_called(this, "_ZN8S20940C53v34Ev");}
void  S20940C5 ::v35(){vfunc_called(this, "_ZN8S20940C53v35Ev");}
void  S20940C5 ::v36(){vfunc_called(this, "_ZN8S20940C53v36Ev");}
void  S20940C5 ::v37(){vfunc_called(this, "_ZN8S20940C53v37Ev");}
S20940C5 ::~S20940C5(){ note_dtor("S20940C5", this);} // tgen
S20940C5 ::S20940C5(){ note_ctor("S20940C5", this);} // tgen

static void Test_S20940C5()
{
  extern Class_Descriptor cd_S20940C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S20940C5, buf);
    S20940C5 *dp, &lv = *(dp=new (buf) S20940C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S20940C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20940C5)");
    check_base_class_offset(lv, (S20940C6_nt*), 0, "S20940C5");
    check_base_class_offset(lv, (S20940C7*), ABISELECT(16,8), "S20940C5");
    test_class_info(&lv, &cd_S20940C5);
    dp->~S20940C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20940C5(Test_S20940C5, "S20940C5", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S20940C5C1Ev();
extern void _ZN8S20940C5D1Ev();
Name_Map name_map_S20940C5[] = {
  NSPAIR(_ZN8S20940C5C1Ev),
  NSPAIR(_ZN8S20940C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20940C6_nt;
extern VTBL_ENTRY _ZTI11S20940C6_nt[];
extern  VTBL_ENTRY _ZTV11S20940C6_nt[];
extern Class_Descriptor cd_S20940C7;
extern VTBL_ENTRY _ZTI8S20940C7[];
extern  VTBL_ENTRY _ZTV8S20940C7[];
static Base_Class bases_S20940C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20940C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20940C7,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S20940C5[];
extern void _ZN11S20940C6_nt3v21Ev();
extern void _ZN11S20940C6_nt3v22Ev();
extern void _ZN11S20940C6_nt3v23Ev();
extern void _ZN11S20940C6_nt3v24Ev();
extern void _ZN11S20940C6_nt3v25Ev();
extern void _ZN8S20940C53v33Ev();
extern void _ZN8S20940C53v34Ev();
extern void _ZN8S20940C53v35Ev();
extern void _ZN8S20940C53v36Ev();
extern void _ZN8S20940C53v37Ev();
extern void _ZN8S20940C73v26Ev();
extern void _ZN8S20940C73v27Ev();
extern void _ZN8S20940C73v28Ev();
extern void _ZN8S20940C73v29Ev();
extern void _ZN8S20940C73v30Ev();
extern void _ZN8S20940C73v31Ev();
extern void _ZN8S20940C73v32Ev();
static  VTBL_ENTRY vtc_S20940C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C5[0]),
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v37Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20940C5[0]),
  (VTBL_ENTRY)&_ZN8S20940C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v32Ev,
};
extern VTBL_ENTRY _ZTV8S20940C5[];
static  VTT_ENTRY vtt_S20940C5[] = {
  {&(_ZTV8S20940C5[3]),  3,29},
  {&(_ZTV8S20940C5[22]),  22,29},
};
extern VTBL_ENTRY _ZTI8S20940C5[];
extern  VTBL_ENTRY _ZTV8S20940C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20940C5[];
Class_Descriptor cd_S20940C5 = {  "S20940C5", // class name
  bases_S20940C5, 2,
  &(vtc_S20940C5[0]), // expected_vtbl_contents
  &(vtt_S20940C5[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S20940C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20940C5),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20940C5),2, //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  S20940C4  : S20940C5 {
  ::S20940C7 s20940c4f0;
  void *s20940c4f1;
  virtual void  v38(); // _ZN8S20940C43v38Ev
  virtual void  v39(); // _ZN8S20940C43v39Ev
  virtual void  v40(); // _ZN8S20940C43v40Ev
  virtual void  v41(); // _ZN8S20940C43v41Ev
  ~S20940C4(); // tgen
  S20940C4(); // tgen
};
//SIG(-1 S20940C4) C1{ BC2{ BC3{ v5 v6 v7 v8 v9 Fi} VBC4{ v10 v11 v12 v13 v14 v15 v16 FD[3]} v17 v18 v19 v20 v21} v1 v2 v3 v4 FC4 Fp}


void  S20940C4 ::v38(){vfunc_called(this, "_ZN8S20940C43v38Ev");}
void  S20940C4 ::v39(){vfunc_called(this, "_ZN8S20940C43v39Ev");}
void  S20940C4 ::v40(){vfunc_called(this, "_ZN8S20940C43v40Ev");}
void  S20940C4 ::v41(){vfunc_called(this, "_ZN8S20940C43v41Ev");}
S20940C4 ::~S20940C4(){ note_dtor("S20940C4", this);} // tgen
S20940C4 ::S20940C4(){ note_ctor("S20940C4", this);} // tgen

static void Test_S20940C4()
{
  extern Class_Descriptor cd_S20940C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,24)];
    init_test(&cd_S20940C4, buf);
    S20940C4 *dp, &lv = *(dp=new (buf) S20940C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,92), "sizeof(S20940C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20940C4)");
    check_base_class_offset(lv, (S20940C6_nt*)(S20940C5*), 0, "S20940C4");
    check_base_class_offset(lv, (S20940C7*)(S20940C5*), ABISELECT(96,52), "S20940C4");
    check_base_class_offset(lv, (S20940C5*), 0, "S20940C4");
    check_field_offset(lv, s20940c4f0, ABISELECT(16,8), "S20940C4.s20940c4f0");
    check_field_offset(lv, s20940c4f1, ABISELECT(80,48), "S20940C4.s20940c4f1");
    test_class_info(&lv, &cd_S20940C4);
    dp->~S20940C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20940C4(Test_S20940C4, "S20940C4", ABISELECT(160,92));

#else // __cplusplus

extern void _ZN8S20940C4C1Ev();
extern void _ZN8S20940C4D1Ev();
Name_Map name_map_S20940C4[] = {
  NSPAIR(_ZN8S20940C4C1Ev),
  NSPAIR(_ZN8S20940C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20940C6_nt;
extern VTBL_ENTRY _ZTI11S20940C6_nt[];
extern  VTBL_ENTRY _ZTV11S20940C6_nt[];
extern Class_Descriptor cd_S20940C7;
extern VTBL_ENTRY _ZTI8S20940C7[];
extern  VTBL_ENTRY _ZTV8S20940C7[];
extern Class_Descriptor cd_S20940C5;
extern VTBL_ENTRY _ZTI8S20940C5[];
extern  VTBL_ENTRY _ZTV8S20940C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20940C5[];
static Base_Class bases_S20940C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20940C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20940C7,    ABISELECT(96,52), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S20940C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20940C4[];
extern void _ZN11S20940C6_nt3v21Ev();
extern void _ZN11S20940C6_nt3v22Ev();
extern void _ZN11S20940C6_nt3v23Ev();
extern void _ZN11S20940C6_nt3v24Ev();
extern void _ZN11S20940C6_nt3v25Ev();
extern void _ZN8S20940C53v33Ev();
extern void _ZN8S20940C53v34Ev();
extern void _ZN8S20940C53v35Ev();
extern void _ZN8S20940C53v36Ev();
extern void _ZN8S20940C53v37Ev();
extern void _ZN8S20940C43v38Ev();
extern void _ZN8S20940C43v39Ev();
extern void _ZN8S20940C43v40Ev();
extern void _ZN8S20940C43v41Ev();
extern void _ZN8S20940C73v26Ev();
extern void _ZN8S20940C73v27Ev();
extern void _ZN8S20940C73v28Ev();
extern void _ZN8S20940C73v29Ev();
extern void _ZN8S20940C73v30Ev();
extern void _ZN8S20940C73v31Ev();
extern void _ZN8S20940C73v32Ev();
static  VTBL_ENTRY vtc_S20940C4[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C4[0]),
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v38Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v39Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v40Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v41Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20940C4[0]),
  (VTBL_ENTRY)&_ZN8S20940C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v32Ev,
};
extern VTBL_ENTRY _ZTV8S20940C4[];
extern void _ZN11S20940C6_nt3v21Ev();
extern void _ZN11S20940C6_nt3v22Ev();
extern void _ZN11S20940C6_nt3v23Ev();
extern void _ZN11S20940C6_nt3v24Ev();
extern void _ZN11S20940C6_nt3v25Ev();
extern void _ZN8S20940C53v33Ev();
extern void _ZN8S20940C53v34Ev();
extern void _ZN8S20940C53v35Ev();
extern void _ZN8S20940C53v36Ev();
extern void _ZN8S20940C53v37Ev();
static  VTBL_ENTRY _tg__ZTV8S20940C5__8S20940C4[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C5[0]),
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v37Ev,
};
extern void _ZN8S20940C73v26Ev();
extern void _ZN8S20940C73v27Ev();
extern void _ZN8S20940C73v28Ev();
extern void _ZN8S20940C73v29Ev();
extern void _ZN8S20940C73v30Ev();
extern void _ZN8S20940C73v31Ev();
extern void _ZN8S20940C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20940C7__8S20940C5__8S20940C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20940C5[0]),
  (VTBL_ENTRY)&_ZN8S20940C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v32Ev,
};
static  VTT_ENTRY vtt_S20940C4[] = {
  {&(_ZTV8S20940C4[3]),  3,33},
  {&(_tg__ZTV8S20940C5__8S20940C4[3]),  3,13},
  {&(_tg__ZTV8S20940C7__8S20940C5__8S20940C4[9]),  9,16},
  {&(_ZTV8S20940C4[26]),  26,33},
};
extern VTBL_ENTRY _ZTI8S20940C4[];
extern  VTBL_ENTRY _ZTV8S20940C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20940C4[];
Class_Descriptor cd_S20940C4 = {  "S20940C4", // class name
  bases_S20940C4, 3,
  &(vtc_S20940C4[0]), // expected_vtbl_contents
  &(vtt_S20940C4[0]), // expected_vtt_contents
  ABISELECT(160,92), // object size
  NSPAIRA(_ZTI8S20940C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20940C4),33, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20940C4),4, //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  S20940C1  : virtual S20940C2 , S20940C4 {
  short s20940c1f0;
  virtual void  v1(); // _ZN8S20940C12v1Ev
  virtual void  v2(); // _ZN8S20940C12v2Ev
  virtual void  v3(); // _ZN8S20940C12v3Ev
  virtual void  v4(); // _ZN8S20940C12v4Ev
  virtual void  v5(); // _ZN8S20940C12v5Ev
  virtual void  v6(); // _ZN8S20940C12v6Ev
  virtual void  v7(); // _ZN8S20940C12v7Ev
  virtual void  v8(); // _ZN8S20940C12v8Ev
  ~S20940C1(); // tgen
  S20940C1(); // tgen
};
//SIG(1 S20940C1) C1{ VBC2{ VBC3{ v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 Fp[4]} BC4{ BC5{ BC6{ v21 v22 v23 v24 v25 Fi} VBC7{ v26 v27 v28 v29 v30 v31 v32 FD[3]} v33 v34 v35 v36 v37} v38 v39 v40 v41 FC7 Fp} v1 v2 v3 v4 v5 v6 v7 v8 Fs}


void  S20940C1 ::v1(){vfunc_called(this, "_ZN8S20940C12v1Ev");}
void  S20940C1 ::v2(){vfunc_called(this, "_ZN8S20940C12v2Ev");}
void  S20940C1 ::v3(){vfunc_called(this, "_ZN8S20940C12v3Ev");}
void  S20940C1 ::v4(){vfunc_called(this, "_ZN8S20940C12v4Ev");}
void  S20940C1 ::v5(){vfunc_called(this, "_ZN8S20940C12v5Ev");}
void  S20940C1 ::v6(){vfunc_called(this, "_ZN8S20940C12v6Ev");}
void  S20940C1 ::v7(){vfunc_called(this, "_ZN8S20940C12v7Ev");}
void  S20940C1 ::v8(){vfunc_called(this, "_ZN8S20940C12v8Ev");}
S20940C1 ::~S20940C1(){ note_dtor("S20940C1", this);} // tgen
S20940C1 ::S20940C1(){ note_ctor("S20940C1", this);} // tgen

static void Test_S20940C1()
{
  extern Class_Descriptor cd_S20940C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,30)];
    init_test(&cd_S20940C1, buf);
    S20940C1 *dp, &lv = *(dp=new (buf) S20940C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,116), "sizeof(S20940C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20940C1)");
    check_base_class_offset(lv, (S20940C3_nt*)(S20940C2*), ABISELECT(96,56), "S20940C1");
    check_base_class_offset(lv, (S20940C2*), ABISELECT(96,56), "S20940C1");
    check_base_class_offset(lv, (S20940C6_nt*)(S20940C5*)(S20940C4*), 0, "S20940C1");
    check_base_class_offset(lv, (S20940C7*)(S20940C5*)(S20940C4*), ABISELECT(144,76), "S20940C1");
    check_base_class_offset(lv, (S20940C5*)(S20940C4*), 0, "S20940C1");
    check_base_class_offset(lv, (S20940C4*), 0, "S20940C1");
    check_field_offset(lv, s20940c1f0, ABISELECT(88,52), "S20940C1.s20940c1f0");
    test_class_info(&lv, &cd_S20940C1);
    dp->~S20940C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20940C1(Test_S20940C1, "S20940C1", ABISELECT(208,116));

#else // __cplusplus

extern void _ZN8S20940C1C1Ev();
extern void _ZN8S20940C1D1Ev();
Name_Map name_map_S20940C1[] = {
  NSPAIR(_ZN8S20940C1C1Ev),
  NSPAIR(_ZN8S20940C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20940C3_nt;
extern VTBL_ENTRY _ZTI11S20940C3_nt[];
extern  VTBL_ENTRY _ZTV11S20940C3_nt[];
extern Class_Descriptor cd_S20940C2;
extern VTBL_ENTRY _ZTI8S20940C2[];
extern  VTBL_ENTRY _ZTV8S20940C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20940C2[];
extern Class_Descriptor cd_S20940C6_nt;
extern VTBL_ENTRY _ZTI11S20940C6_nt[];
extern  VTBL_ENTRY _ZTV11S20940C6_nt[];
extern Class_Descriptor cd_S20940C7;
extern VTBL_ENTRY _ZTI8S20940C7[];
extern  VTBL_ENTRY _ZTV8S20940C7[];
extern Class_Descriptor cd_S20940C5;
extern VTBL_ENTRY _ZTI8S20940C5[];
extern  VTBL_ENTRY _ZTV8S20940C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20940C5[];
extern Class_Descriptor cd_S20940C4;
extern VTBL_ENTRY _ZTI8S20940C4[];
extern  VTBL_ENTRY _ZTV8S20940C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20940C4[];
static Base_Class bases_S20940C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20940C3_nt,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20940C2,    ABISELECT(96,56), //bcp->offset
    27, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20940C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20940C7,    ABISELECT(144,76), //bcp->offset
    54, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20940C5,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20940C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20940C1[];
extern void _ZN11S20940C6_nt3v21Ev();
extern void _ZN11S20940C6_nt3v22Ev();
extern void _ZN11S20940C6_nt3v23Ev();
extern void _ZN11S20940C6_nt3v24Ev();
extern void _ZN11S20940C6_nt3v25Ev();
extern void _ZN8S20940C53v33Ev();
extern void _ZN8S20940C53v34Ev();
extern void _ZN8S20940C53v35Ev();
extern void _ZN8S20940C53v36Ev();
extern void _ZN8S20940C53v37Ev();
extern void _ZN8S20940C43v38Ev();
extern void _ZN8S20940C43v39Ev();
extern void _ZN8S20940C43v40Ev();
extern void _ZN8S20940C43v41Ev();
extern void _ZN8S20940C12v1Ev();
extern void _ZN8S20940C12v2Ev();
extern void _ZN8S20940C12v3Ev();
extern void _ZN8S20940C12v4Ev();
extern void _ZN8S20940C12v5Ev();
extern void _ZN8S20940C12v6Ev();
extern void _ZN8S20940C12v7Ev();
extern void _ZN8S20940C12v8Ev();
extern void _ZN11S20940C3_nt2v9Ev();
extern void _ZN11S20940C3_nt3v10Ev();
extern void _ZN11S20940C3_nt3v11Ev();
extern void _ZN11S20940C3_nt3v12Ev();
extern void _ZN11S20940C3_nt3v13Ev();
extern void _ZN8S20940C23v14Ev();
extern void _ZN8S20940C23v15Ev();
extern void _ZN8S20940C23v16Ev();
extern void _ZN8S20940C23v17Ev();
extern void _ZN8S20940C23v18Ev();
extern void _ZN8S20940C23v19Ev();
extern void _ZN8S20940C23v20Ev();
extern void _ZN8S20940C73v26Ev();
extern void _ZN8S20940C73v27Ev();
extern void _ZN8S20940C73v28Ev();
extern void _ZN8S20940C73v29Ev();
extern void _ZN8S20940C73v30Ev();
extern void _ZN8S20940C73v31Ev();
extern void _ZN8S20940C73v32Ev();
static  VTBL_ENTRY vtc_S20940C1[] = {
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(144,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C1[0]),
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v38Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v39Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v40Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v41Ev,
  (VTBL_ENTRY)&_ZN8S20940C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20940C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20940C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20940C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20940C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20940C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20940C12v7Ev,
  (VTBL_ENTRY)&_ZN8S20940C12v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20940C1[0]),
  (VTBL_ENTRY)&_ZN11S20940C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI8S20940C1[0]),
  (VTBL_ENTRY)&_ZN8S20940C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v32Ev,
};
extern VTBL_ENTRY _ZTV8S20940C1[];
extern void _ZN11S20940C6_nt3v21Ev();
extern void _ZN11S20940C6_nt3v22Ev();
extern void _ZN11S20940C6_nt3v23Ev();
extern void _ZN11S20940C6_nt3v24Ev();
extern void _ZN11S20940C6_nt3v25Ev();
extern void _ZN8S20940C53v33Ev();
extern void _ZN8S20940C53v34Ev();
extern void _ZN8S20940C53v35Ev();
extern void _ZN8S20940C53v36Ev();
extern void _ZN8S20940C53v37Ev();
extern void _ZN8S20940C43v38Ev();
extern void _ZN8S20940C43v39Ev();
extern void _ZN8S20940C43v40Ev();
extern void _ZN8S20940C43v41Ev();
static  VTBL_ENTRY _tg__ZTV8S20940C4__8S20940C1[] = {
  ABISELECT(144,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C4[0]),
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v37Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v38Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v39Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v40Ev,
  (VTBL_ENTRY)&_ZN8S20940C43v41Ev,
};
extern void _ZN11S20940C6_nt3v21Ev();
extern void _ZN11S20940C6_nt3v22Ev();
extern void _ZN11S20940C6_nt3v23Ev();
extern void _ZN11S20940C6_nt3v24Ev();
extern void _ZN11S20940C6_nt3v25Ev();
extern void _ZN8S20940C53v33Ev();
extern void _ZN8S20940C53v34Ev();
extern void _ZN8S20940C53v35Ev();
extern void _ZN8S20940C53v36Ev();
extern void _ZN8S20940C53v37Ev();
static  VTBL_ENTRY _tg__ZTV8S20940C58S20940C4__8S20940C1[] = {
  ABISELECT(144,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C5[0]),
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S20940C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v33Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v34Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v35Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v36Ev,
  (VTBL_ENTRY)&_ZN8S20940C53v37Ev,
};
extern void _ZN8S20940C73v26Ev();
extern void _ZN8S20940C73v27Ev();
extern void _ZN8S20940C73v28Ev();
extern void _ZN8S20940C73v29Ev();
extern void _ZN8S20940C73v30Ev();
extern void _ZN8S20940C73v31Ev();
extern void _ZN8S20940C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20940C7__8S20940C58S20940C4__8S20940C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI8S20940C5[0]),
  (VTBL_ENTRY)&_ZN8S20940C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v32Ev,
};
extern void _ZN8S20940C73v26Ev();
extern void _ZN8S20940C73v27Ev();
extern void _ZN8S20940C73v28Ev();
extern void _ZN8S20940C73v29Ev();
extern void _ZN8S20940C73v30Ev();
extern void _ZN8S20940C73v31Ev();
extern void _ZN8S20940C73v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20940C7__8S20940C4__8S20940C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI8S20940C4[0]),
  (VTBL_ENTRY)&_ZN8S20940C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20940C73v32Ev,
};
extern void _ZN11S20940C3_nt2v9Ev();
extern void _ZN11S20940C3_nt3v10Ev();
extern void _ZN11S20940C3_nt3v11Ev();
extern void _ZN11S20940C3_nt3v12Ev();
extern void _ZN11S20940C3_nt3v13Ev();
extern void _ZN8S20940C23v14Ev();
extern void _ZN8S20940C23v15Ev();
extern void _ZN8S20940C23v16Ev();
extern void _ZN8S20940C23v17Ev();
extern void _ZN8S20940C23v18Ev();
extern void _ZN8S20940C23v19Ev();
extern void _ZN8S20940C23v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20940C2__8S20940C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20940C2[0]),
  (VTBL_ENTRY)&_ZN11S20940C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20940C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20940C23v20Ev,
};
static  VTT_ENTRY vtt_S20940C1[] = {
  {&(_ZTV8S20940C1[5]),  5,70},
  {&(_tg__ZTV8S20940C4__8S20940C1[3]),  3,17},
  {&(_tg__ZTV8S20940C58S20940C4__8S20940C1[3]),  3,13},
  {&(_tg__ZTV8S20940C7__8S20940C58S20940C4__8S20940C1[9]),  9,16},
  {&(_tg__ZTV8S20940C7__8S20940C4__8S20940C1[9]),  9,16},
  {&(_ZTV8S20940C1[42]),  42,70},
  {&(_ZTV8S20940C1[42]),  42,70},
  {&(_ZTV8S20940C1[63]),  63,70},
  {&(_tg__ZTV8S20940C2__8S20940C1[8]),  8,20},
  {&(_tg__ZTV8S20940C2__8S20940C1[8]),  8,20},
};
extern VTBL_ENTRY _ZTI8S20940C1[];
extern  VTBL_ENTRY _ZTV8S20940C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20940C1[];
Class_Descriptor cd_S20940C1 = {  "S20940C1", // class name
  bases_S20940C1, 6,
  &(vtc_S20940C1[0]), // expected_vtbl_contents
  &(vtt_S20940C1[0]), // expected_vtt_contents
  ABISELECT(208,116), // object size
  NSPAIRA(_ZTI8S20940C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20940C1),70, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20940C1),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5103C3  {
  ::S2123C20_nt s5103c3f0;
  int s5103c3f1[2];
  char s5103c3f2;
  virtual  ~S5103C3(); // _ZN7S5103C3D1Ev
  virtual void  v4(); // _ZN7S5103C32v4Ev
  virtual void  v5(); // _ZN7S5103C32v5Ev
  virtual void  v6(); // _ZN7S5103C32v6Ev
  S5103C3(); // tgen
};
//SIG(-1 S5103C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5103C3 ::~S5103C3(){ note_dtor("S5103C3", this);}
void  S5103C3 ::v4(){vfunc_called(this, "_ZN7S5103C32v4Ev");}
void  S5103C3 ::v5(){vfunc_called(this, "_ZN7S5103C32v5Ev");}
void  S5103C3 ::v6(){vfunc_called(this, "_ZN7S5103C32v6Ev");}
S5103C3 ::S5103C3(){ note_ctor("S5103C3", this);} // tgen

static void Test_S5103C3()
{
  extern Class_Descriptor cd_S5103C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5103C3, buf);
    S5103C3 *dp, &lv = *(dp=new (buf) S5103C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5103C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5103C3)");
    check_field_offset(lv, s5103c3f0, ABISELECT(8,4), "S5103C3.s5103c3f0");
    check_field_offset(lv, s5103c3f1, ABISELECT(24,16), "S5103C3.s5103c3f1");
    check_field_offset(lv, s5103c3f2, ABISELECT(32,24), "S5103C3.s5103c3f2");
    test_class_info(&lv, &cd_S5103C3);
    dp->~S5103C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5103C3(Test_S5103C3, "S5103C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5103C3C1Ev();
extern void _ZN7S5103C3D1Ev();
Name_Map name_map_S5103C3[] = {
  NSPAIR(_ZN7S5103C3C1Ev),
  NSPAIR(_ZN7S5103C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5103C3[];
extern void _ZN7S5103C3D1Ev();
extern void _ZN7S5103C3D0Ev();
extern void _ZN7S5103C32v4Ev();
extern void _ZN7S5103C32v5Ev();
extern void _ZN7S5103C32v6Ev();
static  VTBL_ENTRY vtc_S5103C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5103C3[0]),
  (VTBL_ENTRY)&_ZN7S5103C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5103C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5103C3[];
extern  VTBL_ENTRY _ZTV7S5103C3[];
Class_Descriptor cd_S5103C3 = {  "S5103C3", // class name
  0,0,//no base classes
  &(vtc_S5103C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5103C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5103C3),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  S5103C2  : S5103C3 {
  int s5103c2f0;
  char s5103c2f1[2];
  ::S2123C20_nt s5103c2f2;
  virtual  ~S5103C2(); // _ZN7S5103C2D1Ev
  virtual void  v7(); // _ZN7S5103C22v7Ev
  virtual void  v8(); // _ZN7S5103C22v8Ev
  S5103C2(); // tgen
};
//SIG(-1 S5103C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi Fc[2] FC3}


 S5103C2 ::~S5103C2(){ note_dtor("S5103C2", this);}
void  S5103C2 ::v7(){vfunc_called(this, "_ZN7S5103C22v7Ev");}
void  S5103C2 ::v8(){vfunc_called(this, "_ZN7S5103C22v8Ev");}
S5103C2 ::S5103C2(){ note_ctor("S5103C2", this);} // tgen

static void Test_S5103C2()
{
  extern Class_Descriptor cd_S5103C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S5103C2, buf);
    S5103C2 *dp, &lv = *(dp=new (buf) S5103C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S5103C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5103C2)");
    check_base_class_offset(lv, (S5103C3*), 0, "S5103C2");
    check_field_offset(lv, s5103c2f0, ABISELECT(36,28), "S5103C2.s5103c2f0");
    check_field_offset(lv, s5103c2f1, ABISELECT(40,32), "S5103C2.s5103c2f1");
    check_field_offset(lv, s5103c2f2, ABISELECT(48,36), "S5103C2.s5103c2f2");
    test_class_info(&lv, &cd_S5103C2);
    dp->~S5103C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5103C2(Test_S5103C2, "S5103C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S5103C2C1Ev();
extern void _ZN7S5103C2D1Ev();
Name_Map name_map_S5103C2[] = {
  NSPAIR(_ZN7S5103C2C1Ev),
  NSPAIR(_ZN7S5103C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5103C3;
extern VTBL_ENTRY _ZTI7S5103C3[];
extern  VTBL_ENTRY _ZTV7S5103C3[];
static Base_Class bases_S5103C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5103C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5103C2[];
extern void _ZN7S5103C2D1Ev();
extern void _ZN7S5103C2D0Ev();
extern void _ZN7S5103C32v4Ev();
extern void _ZN7S5103C32v5Ev();
extern void _ZN7S5103C32v6Ev();
extern void _ZN7S5103C22v7Ev();
extern void _ZN7S5103C22v8Ev();
static  VTBL_ENTRY vtc_S5103C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5103C2[0]),
  (VTBL_ENTRY)&_ZN7S5103C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5103C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5103C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5103C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5103C2[];
extern  VTBL_ENTRY _ZTV7S5103C2[];
Class_Descriptor cd_S5103C2 = {  "S5103C2", // class name
  bases_S5103C2, 1,
  &(vtc_S5103C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S5103C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5103C2),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  S5103C1  : S5103C2 {
  void *s5103c1f0[2];
  __tsi64 s5103c1f1;
  ::S5101C8_nt s5103c1f2;
  ::S5101C9_nt s5103c1f3;
  int s5103c1f4;
  char s5103c1f5[3];
  virtual  ~S5103C1(); // _ZN7S5103C1D1Ev
  virtual void  v1(); // _ZN7S5103C12v1Ev
  virtual void  v2(); // _ZN7S5103C12v2Ev
  virtual void  v3(); // _ZN7S5103C12v3Ev
  S5103C1(); // tgen
};
//SIG(1 S5103C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 Fi Fc[2] FC4} vd v1 v2 v3 Fp[2] FL FC6{ Fi Fc[331] Fi[2] Fc Fi Fc[812] Fi[5] Fc} FC7{ Fi[2] Fc[271] FL Fc[193] Fi Fc[65] Fi[2] Fc[96] FL Fc[68]} Fi Fc[3]}


 S5103C1 ::~S5103C1(){ note_dtor("S5103C1", this);}
void  S5103C1 ::v1(){vfunc_called(this, "_ZN7S5103C12v1Ev");}
void  S5103C1 ::v2(){vfunc_called(this, "_ZN7S5103C12v2Ev");}
void  S5103C1 ::v3(){vfunc_called(this, "_ZN7S5103C12v3Ev");}
S5103C1 ::S5103C1(){ note_ctor("S5103C1", this);} // tgen

static void Test_S5103C1()
{
  extern Class_Descriptor cd_S5103C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(255,500)];
    init_test(&cd_S5103C1, buf);
    S5103C1 *dp, &lv = *(dp=new (buf) S5103C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1996), "sizeof(S5103C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5103C1)");
    check_base_class_offset(lv, (S5103C3*)(S5103C2*), 0, "S5103C1");
    check_base_class_offset(lv, (S5103C2*), 0, "S5103C1");
    check_field_offset(lv, s5103c1f0, ABISELECT(64,48), "S5103C1.s5103c1f0");
    check_field_offset(lv, s5103c1f1, ABISELECT(80,56), "S5103C1.s5103c1f1");
    check_field_offset(lv, s5103c1f2, ABISELECT(88,64), "S5103C1.s5103c1f2");
    check_field_offset(lv, s5103c1f3, ABISELECT(1280,1252), "S5103C1.s5103c1f3");
    check_field_offset(lv, s5103c1f4, ABISELECT(2024,1988), "S5103C1.s5103c1f4");
    check_field_offset(lv, s5103c1f5, ABISELECT(2028,1992), "S5103C1.s5103c1f5");
    test_class_info(&lv, &cd_S5103C1);
    dp->~S5103C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5103C1(Test_S5103C1, "S5103C1", ABISELECT(2032,1996));

#else // __cplusplus

extern void _ZN7S5103C1C1Ev();
extern void _ZN7S5103C1D1Ev();
Name_Map name_map_S5103C1[] = {
  NSPAIR(_ZN7S5103C1C1Ev),
  NSPAIR(_ZN7S5103C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5103C3;
extern VTBL_ENTRY _ZTI7S5103C3[];
extern  VTBL_ENTRY _ZTV7S5103C3[];
extern Class_Descriptor cd_S5103C2;
extern VTBL_ENTRY _ZTI7S5103C2[];
extern  VTBL_ENTRY _ZTV7S5103C2[];
static Base_Class bases_S5103C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5103C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5103C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5103C1[];
extern void _ZN7S5103C1D1Ev();
extern void _ZN7S5103C1D0Ev();
extern void _ZN7S5103C32v4Ev();
extern void _ZN7S5103C32v5Ev();
extern void _ZN7S5103C32v6Ev();
extern void _ZN7S5103C22v7Ev();
extern void _ZN7S5103C22v8Ev();
extern void _ZN7S5103C12v1Ev();
extern void _ZN7S5103C12v2Ev();
extern void _ZN7S5103C12v3Ev();
static  VTBL_ENTRY vtc_S5103C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5103C1[0]),
  (VTBL_ENTRY)&_ZN7S5103C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5103C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5103C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5103C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5103C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5103C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5103C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5103C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5103C1[];
extern  VTBL_ENTRY _ZTV7S5103C1[];
Class_Descriptor cd_S5103C1 = {  "S5103C1", // class name
  bases_S5103C1, 2,
  &(vtc_S5103C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2032,1996), // object size
  NSPAIRA(_ZTI7S5103C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5103C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6611C2_nt  {
  virtual void  v2(); // _ZN10S6611C2_nt2v2Ev
  ~S6611C2_nt(); // tgen
  S6611C2_nt(); // tgen
};
//SIG(-1 S6611C2_nt) C1{ v1}


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

//skip512 S6611C2_nt

#else // __cplusplus

extern void _ZN10S6611C2_ntC1Ev();
extern void _ZN10S6611C2_ntD1Ev();
Name_Map name_map_S6611C2_nt[] = {
  NSPAIR(_ZN10S6611C2_ntC1Ev),
  NSPAIR(_ZN10S6611C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6611C2_nt[];
extern void _ZN10S6611C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S6611C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6611C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6611C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S6611C2_nt[];
VTBL_ENTRY *P__ZTI10S6611C2_nt = _ZTI10S6611C2_nt; 
extern  VTBL_ENTRY _ZTV10S6611C2_nt[];
Class_Descriptor cd_S6611C2_nt = {  "S6611C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6611C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6611C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6611C2_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6611C5_nt  {
  ::S708C29_nt s6611c5f0;
  ::S708C29_nt s6611c5f1;
  int s6611c5f2;
  void  mf6611c5(); // _ZN10S6611C5_nt8mf6611c5Ev
};
//SIG(-1 S6611C5_nt) C1{ m FC2{ m Fi[3]} FC2 Fi}


void  S6611C5_nt ::mf6611c5(){}

//skip512 S6611C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6611C8_nt  {
  int s6611c8f0;
  void  mf6611c8(); // _ZN10S6611C8_nt8mf6611c8Ev
};
//SIG(-1 S6611C8_nt) C1{ m Fi}


void  S6611C8_nt ::mf6611c8(){}

//skip512 S6611C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S6611C8_nt[];
VTBL_ENTRY *P__ZTI10S6611C8_nt = _ZTI10S6611C8_nt; 
Class_Descriptor cd_S6611C8_nt = {  "S6611C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S6611C8_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  S6611C1  : S6611C2_nt {
  void *s6611c1f0[4];
  ::S708C51 s6611c1f1;
  int s6611c1f2[2];
  unsigned int s6611c1f3:1;
  unsigned int s6611c1f4:1;
  unsigned int s6611c1f5:1;
  unsigned int s6611c1f6:1;
  unsigned int s6611c1f7:1;
  unsigned int s6611c1f8:1;
  unsigned int s6611c1f9:1;
  unsigned int s6611c1f10:1;
  unsigned int s6611c1f11:1;
  unsigned int s6611c1f12:1;
  unsigned int s6611c1f13:1;
  ::S6611C5_nt s6611c1f14;
  int s6611c1f15;
  ::S708C47 s6611c1f16;
  ::S6611C8_nt s6611c1f17;
  ::S2123C30 s6611c1f18;
  void *s6611c1f19;
  ::S15944C13_nt s6611c1f20;
  void *s6611c1f21;
  ::S708C21_nt s6611c1f22;
  ::S708C21_nt s6611c1f23;
  void *s6611c1f24[4];
  int s6611c1f25[2];
  virtual void  v1(); // _ZN7S6611C12v1Ev
  ~S6611C1(); // tgen
  S6611C1(); // tgen
};
//SIG(1 S6611C1) C1{ BC2{ v2} v1 Fp[4] FC3{ BC4{ m Fp Fi[2]}} Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m FC6{ m Fi[3]} FC6 Fi} Fi FC7{ BC4} FC8{ m Fi} FC9{ m} Fp FC10{ m Fi[2]} Fp FC11{ m Fi[4]} FC11 Fp[4] Fi[2]}


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

static void Test_S6611C1()
{
  extern Class_Descriptor cd_S6611C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,43)];
    init_test(&cd_S6611C1, buf);
    S6611C1 *dp, &lv = *(dp=new (buf) S6611C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,168), "sizeof(S6611C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6611C1)");
    check_base_class_offset(lv, (S6611C2_nt*), 0, "S6611C1");
    check_field_offset(lv, s6611c1f0, ABISELECT(8,4), "S6611C1.s6611c1f0");
    check_field_offset(lv, s6611c1f1, ABISELECT(40,20), "S6611C1.s6611c1f1");
    check_field_offset(lv, s6611c1f2, ABISELECT(56,32), "S6611C1.s6611c1f2");
    set_bf_and_test(lv, s6611c1f3, ABISELECT(64,40), 0, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f4, ABISELECT(64,40), 1, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f5, ABISELECT(64,40), 2, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f6, ABISELECT(64,40), 3, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f7, ABISELECT(64,40), 4, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f8, ABISELECT(64,40), 5, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f9, ABISELECT(64,40), 6, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f10, ABISELECT(64,40), 7, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f11, ABISELECT(65,41), 0, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f12, ABISELECT(65,41), 1, 1, 1, "S6611C1");
    set_bf_and_test(lv, s6611c1f13, ABISELECT(65,41), 2, 1, 1, "S6611C1");
    check_field_offset(lv, s6611c1f14, ABISELECT(68,44), "S6611C1.s6611c1f14");
    check_field_offset(lv, s6611c1f15, ABISELECT(96,72), "S6611C1.s6611c1f15");
    check_field_offset(lv, s6611c1f16, ABISELECT(104,76), "S6611C1.s6611c1f16");
    check_field_offset(lv, s6611c1f17, ABISELECT(120,88), "S6611C1.s6611c1f17");
    check_field_offset(lv, s6611c1f18, ABISELECT(124,92), "S6611C1.s6611c1f18");
    check_field_offset(lv, s6611c1f19, ABISELECT(128,96), "S6611C1.s6611c1f19");
    check_field_offset(lv, s6611c1f20, ABISELECT(136,100), "S6611C1.s6611c1f20");
    check_field_offset(lv, s6611c1f21, ABISELECT(144,108), "S6611C1.s6611c1f21");
    check_field_offset(lv, s6611c1f22, ABISELECT(152,112), "S6611C1.s6611c1f22");
    check_field_offset(lv, s6611c1f23, ABISELECT(168,128), "S6611C1.s6611c1f23");
    check_field_offset(lv, s6611c1f24, ABISELECT(184,144), "S6611C1.s6611c1f24");
    check_field_offset(lv, s6611c1f25, ABISELECT(216,160), "S6611C1.s6611c1f25");
    test_class_info(&lv, &cd_S6611C1);
    dp->~S6611C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6611C1(Test_S6611C1, "S6611C1", ABISELECT(224,168));

#else // __cplusplus

extern void _ZN7S6611C1C1Ev();
extern void _ZN7S6611C1D1Ev();
Name_Map name_map_S6611C1[] = {
  NSPAIR(_ZN7S6611C1C1Ev),
  NSPAIR(_ZN7S6611C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6611C2_nt;
extern VTBL_ENTRY _ZTI10S6611C2_nt[];
extern  VTBL_ENTRY _ZTV10S6611C2_nt[];
static Base_Class bases_S6611C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6611C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6611C1[];
extern void _ZN10S6611C2_nt2v2Ev();
extern void _ZN7S6611C12v1Ev();
static  VTBL_ENTRY vtc_S6611C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6611C1[0]),
  (VTBL_ENTRY)&_ZN10S6611C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S6611C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6611C1[];
extern  VTBL_ENTRY _ZTV7S6611C1[];
Class_Descriptor cd_S6611C1 = {  "S6611C1", // class name
  bases_S6611C1, 1,
  &(vtc_S6611C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,168), // object size
  NSPAIRA(_ZTI7S6611C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6611C1),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  S7508C3  {
  short s7508c3f0;
  virtual void  v1(); // _ZN7S7508C32v1Ev
  ~S7508C3(); // tgen
  S7508C3(); // tgen
};
//SIG(-1 S7508C3) C1{ v1 Fs}


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

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

#else // __cplusplus

extern void _ZN7S7508C3C1Ev();
extern void _ZN7S7508C3D1Ev();
Name_Map name_map_S7508C3[] = {
  NSPAIR(_ZN7S7508C3C1Ev),
  NSPAIR(_ZN7S7508C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7508C3[];
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY vtc_S7508C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C3[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7508C3[];
extern  VTBL_ENTRY _ZTV7S7508C3[];
Class_Descriptor cd_S7508C3 = {  "S7508C3", // class name
  0,0,//no base classes
  &(vtc_S7508C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7508C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7508C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7508C2  : virtual S7508C3 {
  int s7508c2f0;
  virtual void  v2(); // _ZN7S7508C22v2Ev
  ~S7508C2(); // tgen
  S7508C2(); // tgen
};
//SIG(-1 S7508C2) C1{ VBC2{ v2 Fs} v1 Fi}


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

static void Test_S7508C2()
{
  extern Class_Descriptor cd_S7508C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7508C2, buf);
    S7508C2 *dp, &lv = *(dp=new (buf) S7508C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7508C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7508C2)");
    check_base_class_offset(lv, (S7508C3*), ABISELECT(16,8), "S7508C2");
    check_field_offset(lv, s7508c2f0, ABISELECT(8,4), "S7508C2.s7508c2f0");
    test_class_info(&lv, &cd_S7508C2);
    dp->~S7508C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7508C2(Test_S7508C2, "S7508C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7508C2C1Ev();
extern void _ZN7S7508C2D1Ev();
Name_Map name_map_S7508C2[] = {
  NSPAIR(_ZN7S7508C2C1Ev),
  NSPAIR(_ZN7S7508C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7508C3;
extern VTBL_ENTRY _ZTI7S7508C3[];
extern  VTBL_ENTRY _ZTV7S7508C3[];
static Base_Class bases_S7508C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7508C3,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7508C2[];
extern void _ZN7S7508C22v2Ev();
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY vtc_S7508C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7508C2[];
static  VTT_ENTRY vtt_S7508C2[] = {
  {&(_ZTV7S7508C2[3]),  3,8},
  {&(_ZTV7S7508C2[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7508C2[];
extern  VTBL_ENTRY _ZTV7S7508C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C2[];
Class_Descriptor cd_S7508C2 = {  "S7508C2", // class name
  bases_S7508C2, 1,
  &(vtc_S7508C2[0]), // expected_vtbl_contents
  &(vtt_S7508C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7508C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7508C2),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7508C2),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  S7508C6  {
  ::S19737C2 s7508c6f0;
  int s7508c6f1;
  virtual void  v3(); // _ZN7S7508C62v3Ev
  ~S7508C6(); // tgen
  S7508C6(); // tgen
};
//SIG(-1 S7508C6) C1{ v1 FC2{ m FL Fp[8]} Fi}


void  S7508C6 ::v3(){vfunc_called(this, "_ZN7S7508C62v3Ev");}
S7508C6 ::~S7508C6(){ note_dtor("S7508C6", this);} // tgen
S7508C6 ::S7508C6(){ note_ctor("S7508C6", this);} // tgen

static void Test_S7508C6()
{
  extern Class_Descriptor cd_S7508C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S7508C6, buf);
    S7508C6 *dp, &lv = *(dp=new (buf) S7508C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S7508C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7508C6)");
    check_field_offset(lv, s7508c6f0, ABISELECT(8,4), "S7508C6.s7508c6f0");
    check_field_offset(lv, s7508c6f1, ABISELECT(80,44), "S7508C6.s7508c6f1");
    test_class_info(&lv, &cd_S7508C6);
    dp->~S7508C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7508C6(Test_S7508C6, "S7508C6", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S7508C6C1Ev();
extern void _ZN7S7508C6D1Ev();
Name_Map name_map_S7508C6[] = {
  NSPAIR(_ZN7S7508C6C1Ev),
  NSPAIR(_ZN7S7508C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7508C6[];
extern void _ZN7S7508C62v3Ev();
static  VTBL_ENTRY vtc_S7508C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C6[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S7508C6[];
extern  VTBL_ENTRY _ZTV7S7508C6[];
Class_Descriptor cd_S7508C6 = {  "S7508C6", // class name
  0,0,//no base classes
  &(vtc_S7508C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S7508C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7508C6),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  S7508C4  : virtual S7508C3 , virtual S7508C2 , virtual S19737C5 , virtual S7508C6 , virtual S19737C2 {
  int s7508c4f0;
  long double s7508c4f1;
  int s7508c4f2;
  ~S7508C4(); // tgen
  S7508C4(); // tgen
};
//SIG(-1 S7508C4) C1{ VBC2{ v1 Fs} VBC3{ VBC2 v2 Fi} VBC4{ m Fc Fi Fp[2]} VBC5{ v3 FC6{ m FL Fp[8]} Fi} VBC6 Fi FD Fi}


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

static void Test_S7508C4()
{
  extern Class_Descriptor cd_S7508C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,37)];
    init_test(&cd_S7508C4, buf);
    S7508C4 *dp, &lv = *(dp=new (buf) S7508C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,144), "sizeof(S7508C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7508C4)");
    check_base_class_offset(lv, (S7508C3*), ABISELECT(40,24), "S7508C4");
    check_base_class_offset(lv, (S7508C3*)(S7508C2*), ABISELECT(40,24), "S7508C4");
    check_base_class_offset(lv, (S7508C2*), ABISELECT(56,32), "S7508C4");
    check_base_class_offset(lv, (S19737C5*), ABISELECT(72,40), "S7508C4");
    check_base_class_offset(lv, (S7508C6*), ABISELECT(96,56), "S7508C4");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(184,104), "S7508C4");
    check_field_offset(lv, s7508c4f0, ABISELECT(8,4), "S7508C4.s7508c4f0");
    check_field_offset(lv, s7508c4f1, ABISELECT(16,8), "S7508C4.s7508c4f1");
    check_field_offset(lv, s7508c4f2, ABISELECT(32,20), "S7508C4.s7508c4f2");
    test_class_info(&lv, &cd_S7508C4);
    dp->~S7508C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7508C4(Test_S7508C4, "S7508C4", ABISELECT(256,144));

#else // __cplusplus

extern void _ZN7S7508C4C1Ev();
extern void _ZN7S7508C4D1Ev();
Name_Map name_map_S7508C4[] = {
  NSPAIR(_ZN7S7508C4C1Ev),
  NSPAIR(_ZN7S7508C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7508C3;
extern VTBL_ENTRY _ZTI7S7508C3[];
extern  VTBL_ENTRY _ZTV7S7508C3[];
extern Class_Descriptor cd_S7508C2;
extern VTBL_ENTRY _ZTI7S7508C2[];
extern  VTBL_ENTRY _ZTV7S7508C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C2[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S7508C6;
extern VTBL_ENTRY _ZTI7S7508C6[];
extern  VTBL_ENTRY _ZTV7S7508C6[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
static Base_Class bases_S7508C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7508C3,    ABISELECT(40,24), //bcp->offset
    7, //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_S7508C2,    ABISELECT(56,32), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C5,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7508C6,    ABISELECT(96,56), //bcp->offset
    16, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C2,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7508C4[];
extern void _ZN7S7508C32v1Ev();
extern void _ZN7S7508C22v2Ev();
extern void _ZN7S7508C62v3Ev();
static  VTBL_ENTRY vtc_S7508C4[] = {
  ABISELECT(184,104),
  ABISELECT(96,56),
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S7508C4[];
extern void _ZN7S7508C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C2__7S7508C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C2__7S7508C4[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
static  VTT_ENTRY vtt_S7508C4[] = {
  {&(_ZTV7S7508C4[7]),  7,20},
  {&(_ZTV7S7508C4[10]),  10,20},
  {&(_ZTV7S7508C4[15]),  15,20},
  {&(_ZTV7S7508C4[19]),  19,20},
  {&(_tg__ZTV7S7508C2__7S7508C4[3]),  3,4},
  {&(_tg__ZTV7S7508C3__7S7508C2__7S7508C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7508C4[];
extern  VTBL_ENTRY _ZTV7S7508C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C4[];
Class_Descriptor cd_S7508C4 = {  "S7508C4", // class name
  bases_S7508C4, 5,
  &(vtc_S7508C4[0]), // expected_vtbl_contents
  &(vtt_S7508C4[0]), // expected_vtt_contents
  ABISELECT(256,144), // object size
  NSPAIRA(_ZTI7S7508C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7508C4),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7508C4),6, //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  S7508C9  : S7508C6 , S19737C2 , virtual S7508C3 {
  char s7508c9f0[7];
  ::S19737C11 s7508c9f1[8];
  int s7508c9f2;
  virtual void  v4(); // _ZN7S7508C92v4Ev
  ~S7508C9(); // tgen
  S7508C9(); // tgen
};
//SIG(-1 S7508C9) C1{ BC2{ v2 FC3{ m FL Fp[8]} Fi} BC3 VBC4{ v3 Fs} v1 Fc[7] FU5{ m Fl[7] Fs[8] FL}[8] Fi}


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

static void Test_S7508C9()
{
  extern Class_Descriptor cd_S7508C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(81,84)];
    init_test(&cd_S7508C9, buf);
    S7508C9 *dp, &lv = *(dp=new (buf) S7508C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,332), "sizeof(S7508C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7508C9)");
    check_base_class_offset(lv, (S7508C6*), 0, "S7508C9");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(88,48), "S7508C9");
    check_base_class_offset(lv, (S7508C3*), ABISELECT(624,324), "S7508C9");
    check_field_offset(lv, s7508c9f0, ABISELECT(160,88), "S7508C9.s7508c9f0");
    check_field_offset(lv, s7508c9f1, ABISELECT(168,96), "S7508C9.s7508c9f1");
    check_field_offset(lv, s7508c9f2, ABISELECT(616,320), "S7508C9.s7508c9f2");
    test_class_info(&lv, &cd_S7508C9);
    dp->~S7508C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7508C9(Test_S7508C9, "S7508C9", ABISELECT(640,332));

#else // __cplusplus

extern void _ZN7S7508C9C1Ev();
extern void _ZN7S7508C9D1Ev();
Name_Map name_map_S7508C9[] = {
  NSPAIR(_ZN7S7508C9C1Ev),
  NSPAIR(_ZN7S7508C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7508C6;
extern VTBL_ENTRY _ZTI7S7508C6[];
extern  VTBL_ENTRY _ZTV7S7508C6[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7508C3;
extern VTBL_ENTRY _ZTI7S7508C3[];
extern  VTBL_ENTRY _ZTV7S7508C3[];
static Base_Class bases_S7508C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7508C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19737C2,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7508C3,    ABISELECT(624,324), //bcp->offset
    5, //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 _ZTI7S7508C9[];
extern void _ZN7S7508C62v3Ev();
extern void _ZN7S7508C92v4Ev();
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY vtc_S7508C9[] = {
  ABISELECT(624,324),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C9[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7508C92v4Ev,
  0,
  ABISELECT(-624,-324),
  (VTBL_ENTRY)&(_ZTI7S7508C9[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7508C9[];
static  VTT_ENTRY vtt_S7508C9[] = {
  {&(_ZTV7S7508C9[3]),  3,9},
  {&(_ZTV7S7508C9[8]),  8,9},
};
extern VTBL_ENTRY _ZTI7S7508C9[];
extern  VTBL_ENTRY _ZTV7S7508C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C9[];
Class_Descriptor cd_S7508C9 = {  "S7508C9", // class name
  bases_S7508C9, 3,
  &(vtc_S7508C9[0]), // expected_vtbl_contents
  &(vtt_S7508C9[0]), // expected_vtt_contents
  ABISELECT(640,332), // object size
  NSPAIRA(_ZTI7S7508C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7508C9),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7508C9),2, //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  S7508C8  : S19737C5 , S19737C2 , S7508C4 , virtual S7508C9 , S7508C3 {
  long double s7508c8f0;
  int s7508c8f1;
  ::S19737C11 s7508c8f2;
  void *s7508c8f3[4];
  virtual void  v5(); // _ZN7S7508C82v5Ev
  virtual void  v6(); // _ZN7S7508C82v6Ev
  ~S7508C8(); // tgen
  S7508C8(); // tgen
};
//SIG(-1 S7508C8) C1{ BC2{ m Fc Fi Fp[2]} BC3{ m FL Fp[8]} BC4{ VBC5{ v3 Fs} VBC6{ VBC5 v4 Fi} VBC2 VBC7{ v5 FC3 Fi} VBC3 Fi FD Fi} VBC8{ BC7 BC3 VBC5 v6 Fc[7] FU9{ m Fl[7] Fs[8] FL}[8] Fi} BC5 v1 v2 FD Fi FU9 Fp[4]}


void  S7508C8 ::v5(){vfunc_called(this, "_ZN7S7508C82v5Ev");}
void  S7508C8 ::v6(){vfunc_called(this, "_ZN7S7508C82v6Ev");}
S7508C8 ::~S7508C8(){ note_dtor("S7508C8", this);} // tgen
S7508C8 ::S7508C8(){ note_ctor("S7508C8", this);} // tgen

static void Test_S7508C8()
{
  extern Class_Descriptor cd_S7508C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(71,149)];
    init_test(&cd_S7508C8, buf);
    S7508C8 *dp, &lv = *(dp=new (buf) S7508C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1120,592), "sizeof(S7508C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7508C8)");
    /*is_ambiguous_... S7508C8::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*), ABISELECT(40,24), "S7508C8");
    /*is_ambiguous_... S7508C8::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*), ABISELECT(64,40), "S7508C8");
    check_base_class_offset(lv, (S7508C3*)(S7508C4*), ABISELECT(272,148), "S7508C8");
    check_base_class_offset(lv, (S7508C3*)(S7508C2*), ABISELECT(272,148), "S7508C8");
    check_base_class_offset(lv, (S7508C3*)(S7508C9*), ABISELECT(272,148), "S7508C8");
    check_base_class_offset(lv, (S7508C2*)(S7508C4*), ABISELECT(288,156), "S7508C8");
    check_base_class_offset(lv, (S19737C5*)(S7508C4*), ABISELECT(304,164), "S7508C8");
    check_base_class_offset(lv, (S7508C6*)(S7508C4*), ABISELECT(328,180), "S7508C8");
    check_base_class_offset(lv, (S19737C2*)(S7508C4*), ABISELECT(416,228), "S7508C8");
    check_base_class_offset(lv, (S7508C4*), 0, "S7508C8");
    check_base_class_offset(lv, (S7508C6*)(S7508C9*), ABISELECT(488,268), "S7508C8");
    check_base_class_offset(lv, (S19737C2*)(S7508C9*), ABISELECT(576,316), "S7508C8");
    check_base_class_offset(lv, (S7508C9*), ABISELECT(488,268), "S7508C8");
    /*is_ambiguous_... S7508C8::S7508C3 */ AMB_check_base_class_offset(lv, (S7508C3*), ABISELECT(136,80), "S7508C8");
    check_field_offset(lv, s7508c8f0, ABISELECT(160,88), "S7508C8.s7508c8f0");
    check_field_offset(lv, s7508c8f1, ABISELECT(176,100), "S7508C8.s7508c8f1");
    check_field_offset(lv, s7508c8f2, ABISELECT(184,104), "S7508C8.s7508c8f2");
    check_field_offset(lv, s7508c8f3, ABISELECT(240,132), "S7508C8.s7508c8f3");
    test_class_info(&lv, &cd_S7508C8);
    dp->~S7508C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7508C8(Test_S7508C8, "S7508C8", ABISELECT(1120,592));

#else // __cplusplus

extern void _ZN7S7508C8C1Ev();
extern void _ZN7S7508C8D1Ev();
Name_Map name_map_S7508C8[] = {
  NSPAIR(_ZN7S7508C8C1Ev),
  NSPAIR(_ZN7S7508C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7508C3;
extern VTBL_ENTRY _ZTI7S7508C3[];
extern  VTBL_ENTRY _ZTV7S7508C3[];
extern Class_Descriptor cd_S7508C2;
extern VTBL_ENTRY _ZTI7S7508C2[];
extern  VTBL_ENTRY _ZTV7S7508C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C2[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S7508C6;
extern VTBL_ENTRY _ZTI7S7508C6[];
extern  VTBL_ENTRY _ZTV7S7508C6[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7508C4;
extern VTBL_ENTRY _ZTI7S7508C4[];
extern  VTBL_ENTRY _ZTV7S7508C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C4[];
extern Class_Descriptor cd_S7508C6;
extern VTBL_ENTRY _ZTI7S7508C6[];
extern  VTBL_ENTRY _ZTV7S7508C6[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7508C9;
extern VTBL_ENTRY _ZTI7S7508C9[];
extern  VTBL_ENTRY _ZTV7S7508C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C9[];
extern Class_Descriptor cd_S7508C3;
extern VTBL_ENTRY _ZTI7S7508C3[];
extern  VTBL_ENTRY _ZTV7S7508C3[];
static Base_Class bases_S7508C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C5,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C2,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7508C3,    ABISELECT(272,148), //bcp->offset
    13, //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_S7508C2,    ABISELECT(288,156), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C5,    ABISELECT(304,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
    7, //immediately_derived
  0, 1},
  {&cd_S7508C6,    ABISELECT(328,180), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C2,    ABISELECT(416,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
    7, //immediately_derived
  0, 1},
  {&cd_S7508C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7508C6,    ABISELECT(488,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(576,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
    10, //immediately_derived
  0, 0},
  {&cd_S7508C9,    ABISELECT(488,268), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7508C3,    ABISELECT(136,80), //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 _ZTI7S7508C8[];
extern void _ZN7S7508C82v5Ev();
extern void _ZN7S7508C82v6Ev();
extern void _ZN7S7508C32v1Ev();
extern void _ZN7S7508C32v1Ev();
extern void _ZN7S7508C22v2Ev();
extern void _ZN7S7508C62v3Ev();
extern void _ZN7S7508C62v3Ev();
extern void _ZN7S7508C92v4Ev();
static  VTBL_ENTRY vtc_S7508C8[] = {
  ABISELECT(488,268),
  ABISELECT(416,228),
  ABISELECT(328,180),
  ABISELECT(304,164),
  ABISELECT(288,156),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7508C82v6Ev,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
  0,
  ABISELECT(-328,-180),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-488,-268),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7508C92v4Ev,
};
extern VTBL_ENTRY _ZTV7S7508C8[];
static  VTBL_ENTRY _tg__ZTV7S7508C4__7S7508C8[] = {
  ABISELECT(416,228),
  ABISELECT(328,180),
  ABISELECT(304,164),
  ABISELECT(288,156),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C4__7S7508C8[] = {
  0,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern void _ZN7S7508C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C2__7S7508C4__7S7508C8[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
};
extern void _ZN7S7508C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C6__7S7508C4__7S7508C8[] = {
  0,
  ABISELECT(-328,-180),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
};
extern void _ZN7S7508C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C2__7S7508C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C2__7S7508C8[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern void _ZN7S7508C62v3Ev();
extern void _ZN7S7508C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C9__7S7508C8[] = {
  ABISELECT(-216,-120),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C9[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7508C92v4Ev,
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C9__7S7508C8[] = {
  0,
  ABISELECT(216,120),
  (VTBL_ENTRY)&(_ZTI7S7508C9[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
static  VTT_ENTRY vtt_S7508C8[] = {
  {&(_ZTV7S7508C8[8]),  8,33},
  {&(_tg__ZTV7S7508C4__7S7508C8[7]),  7,7},
  {&(_tg__ZTV7S7508C3__7S7508C4__7S7508C8[3]),  3,4},
  {&(_tg__ZTV7S7508C2__7S7508C4__7S7508C8[4]),  4,5},
  {&(_tg__ZTV7S7508C6__7S7508C4__7S7508C8[3]),  3,4},
  {&(_ZTV7S7508C8[16]),  16,33},
  {&(_ZTV7S7508C8[21]),  21,33},
  {&(_ZTV7S7508C8[25]),  25,33},
  {&(_ZTV7S7508C8[31]),  31,33},
  {&(_tg__ZTV7S7508C2__7S7508C8[3]),  3,4},
  {&(_tg__ZTV7S7508C3__7S7508C2__7S7508C8[3]),  3,4},
  {&(_tg__ZTV7S7508C9__7S7508C8[3]),  3,5},
  {&(_tg__ZTV7S7508C3__7S7508C9__7S7508C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7508C8[];
extern  VTBL_ENTRY _ZTV7S7508C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C8[];
Class_Descriptor cd_S7508C8 = {  "S7508C8", // class name
  bases_S7508C8, 12,
  &(vtc_S7508C8[0]), // expected_vtbl_contents
  &(vtt_S7508C8[0]), // expected_vtt_contents
  ABISELECT(1120,592), // object size
  NSPAIRA(_ZTI7S7508C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7508C8),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7508C8),13, //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  S7508C1  : S7508C2 , S7508C4 , S7508C8 {
  int s7508c1f0;
  ~S7508C1(); // tgen
  S7508C1(); // tgen
};
//SIG(1 S7508C1) C1{ BC2{ VBC3{ v1 Fs} v2 Fi} BC4{ VBC3 VBC2 VBC5{ m Fc Fi Fp[2]} VBC6{ v3 FC7{ m FL Fp[8]} Fi} VBC7 Fi FD Fi} BC8{ BC5 BC7 BC4 VBC9{ BC6 BC7 VBC3 v4 Fc[7] FU10{ m Fl[7] Fs[8] FL}[8] Fi} BC3 v5 v6 FD Fi FU10 Fp[4]} Fi}


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

static void Test_S7508C1()
{
  extern Class_Descriptor cd_S7508C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,158)];
    init_test(&cd_S7508C1, buf);
    S7508C1 *dp, &lv = *(dp=new (buf) S7508C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,628), "sizeof(S7508C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7508C1)");
    /*is_ambiguous_... S7508C1::S7508C2 */ AMB_check_base_class_offset(lv, (S7508C3*)(S7508C2*), ABISELECT(344,184), "S7508C1");
    /*is_ambiguous_... S7508C1::S7508C4 */ AMB_check_base_class_offset(lv, (S7508C3*)(S7508C4*), ABISELECT(344,184), "S7508C1");
    /*is_ambiguous_... S7508C1::S7508C2 */ AMB_check_base_class_offset(lv, (S7508C3*)(S7508C2*), ABISELECT(344,184), "S7508C1");
    check_base_class_offset(lv, (S7508C3*)(S7508C4*)(S7508C8*), ABISELECT(344,184), "S7508C1");
    check_base_class_offset(lv, (S7508C3*)(S7508C9*), ABISELECT(344,184), "S7508C1");
    /*is_ambiguous_... S7508C1::S7508C2 */ AMB_check_base_class_offset(lv, (S7508C2*), 0, "S7508C1");
    /*is_ambiguous_... S7508C1::S7508C4 */ AMB_check_base_class_offset(lv, (S7508C2*)(S7508C4*), ABISELECT(360,192), "S7508C1");
    check_base_class_offset(lv, (S7508C2*)(S7508C4*)(S7508C8*), ABISELECT(360,192), "S7508C1");
    /*is_ambiguous_... S7508C1::S7508C4 */ AMB_check_base_class_offset(lv, (S19737C5*)(S7508C4*), ABISELECT(376,200), "S7508C1");
    check_base_class_offset(lv, (S19737C5*)(S7508C4*)(S7508C8*), ABISELECT(376,200), "S7508C1");
    /*is_ambiguous_... S7508C1::S7508C4 */ AMB_check_base_class_offset(lv, (S7508C6*)(S7508C4*), ABISELECT(400,216), "S7508C1");
    check_base_class_offset(lv, (S7508C6*)(S7508C4*)(S7508C8*), ABISELECT(400,216), "S7508C1");
    /*is_ambiguous_... S7508C1::S7508C4 */ AMB_check_base_class_offset(lv, (S19737C2*)(S7508C4*), ABISELECT(488,264), "S7508C1");
    check_base_class_offset(lv, (S19737C2*)(S7508C4*)(S7508C8*), ABISELECT(488,264), "S7508C1");
    /*is_ambiguous_... S7508C1::S7508C4 */ AMB_check_base_class_offset(lv, (S7508C4*), ABISELECT(16,8), "S7508C1");
    /*is_ambiguous_... S7508C8::S19737C5 */ AMB_check_base_class_offset(lv, (S19737C5*)(S7508C8*), ABISELECT(104,56), "S7508C1");
    /*is_ambiguous_... S7508C8::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*)(S7508C8*), ABISELECT(128,72), "S7508C1");
    check_base_class_offset(lv, (S7508C4*)(S7508C8*), ABISELECT(64,32), "S7508C1");
    check_base_class_offset(lv, (S7508C6*)(S7508C9*), ABISELECT(560,304), "S7508C1");
    check_base_class_offset(lv, (S19737C2*)(S7508C9*), ABISELECT(648,352), "S7508C1");
    check_base_class_offset(lv, (S7508C9*)(S7508C8*), ABISELECT(560,304), "S7508C1");
    /*is_ambiguous_... S7508C8::S7508C3 */ AMB_check_base_class_offset(lv, (S7508C3*)(S7508C8*), ABISELECT(200,112), "S7508C1");
    check_base_class_offset(lv, (S7508C8*), ABISELECT(64,32), "S7508C1");
    check_field_offset(lv, s7508c1f0, ABISELECT(336,180), "S7508C1.s7508c1f0");
    test_class_info(&lv, &cd_S7508C1);
    dp->~S7508C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7508C1(Test_S7508C1, "S7508C1", ABISELECT(1184,628));

#else // __cplusplus

extern void _ZN7S7508C1C1Ev();
extern void _ZN7S7508C1D1Ev();
Name_Map name_map_S7508C1[] = {
  NSPAIR(_ZN7S7508C1C1Ev),
  NSPAIR(_ZN7S7508C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7508C3;
extern VTBL_ENTRY _ZTI7S7508C3[];
extern  VTBL_ENTRY _ZTV7S7508C3[];
extern Class_Descriptor cd_S7508C2;
extern VTBL_ENTRY _ZTI7S7508C2[];
extern  VTBL_ENTRY _ZTV7S7508C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C2[];
extern Class_Descriptor cd_S7508C2;
extern VTBL_ENTRY _ZTI7S7508C2[];
extern  VTBL_ENTRY _ZTV7S7508C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C2[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S7508C6;
extern VTBL_ENTRY _ZTI7S7508C6[];
extern  VTBL_ENTRY _ZTV7S7508C6[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7508C4;
extern VTBL_ENTRY _ZTI7S7508C4[];
extern  VTBL_ENTRY _ZTV7S7508C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C4[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7508C4;
extern VTBL_ENTRY _ZTI7S7508C4[];
extern  VTBL_ENTRY _ZTV7S7508C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C4[];
extern Class_Descriptor cd_S7508C6;
extern VTBL_ENTRY _ZTI7S7508C6[];
extern  VTBL_ENTRY _ZTV7S7508C6[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S7508C9;
extern VTBL_ENTRY _ZTI7S7508C9[];
extern  VTBL_ENTRY _ZTV7S7508C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C9[];
extern Class_Descriptor cd_S7508C3;
extern VTBL_ENTRY _ZTI7S7508C3[];
extern  VTBL_ENTRY _ZTV7S7508C3[];
extern Class_Descriptor cd_S7508C8;
extern VTBL_ENTRY _ZTI7S7508C8[];
extern  VTBL_ENTRY _ZTV7S7508C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C8[];
static Base_Class bases_S7508C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7508C3,    ABISELECT(344,184), //bcp->offset
    29, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7508C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7508C2,    ABISELECT(360,192), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19737C5,    ABISELECT(376,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
    6, //immediately_derived
  0, 1},
  {&cd_S7508C6,    ABISELECT(400,216), //bcp->offset
    38, //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
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19737C2,    ABISELECT(488,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
    6, //immediately_derived
  0, 1},
  {&cd_S7508C4,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19737C5,    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
    14, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7508C4,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7508C6,    ABISELECT(560,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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(648,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7508C9,    ABISELECT(560,304), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7508C3,    ABISELECT(200,112), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7508C8,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7508C1[];
extern void _ZN7S7508C22v2Ev();
extern void _ZN7S7508C82v5Ev();
extern void _ZN7S7508C82v6Ev();
extern void _ZN7S7508C32v1Ev();
extern void _ZN7S7508C32v1Ev();
extern void _ZN7S7508C22v2Ev();
extern void _ZN7S7508C62v3Ev();
extern void _ZN7S7508C62v3Ev();
extern void _ZN7S7508C92v4Ev();
static  VTBL_ENTRY vtc_S7508C1[] = {
  ABISELECT(560,304),
  ABISELECT(488,264),
  ABISELECT(400,216),
  ABISELECT(376,200),
  ABISELECT(360,192),
  ABISELECT(344,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C1[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
  ABISELECT(472,256),
  ABISELECT(384,208),
  ABISELECT(360,192),
  ABISELECT(344,184),
  ABISELECT(328,176),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7508C1[0]),
  ABISELECT(496,272),
  ABISELECT(424,232),
  ABISELECT(336,184),
  ABISELECT(312,168),
  ABISELECT(296,160),
  ABISELECT(280,152),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7508C1[0]),
  (VTBL_ENTRY)&_ZN7S7508C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7508C82v6Ev,
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI7S7508C1[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
  0,
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI7S7508C1[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-360,-192),
  (VTBL_ENTRY)&(_ZTI7S7508C1[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
  0,
  ABISELECT(-400,-216),
  (VTBL_ENTRY)&(_ZTI7S7508C1[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-560,-304),
  (VTBL_ENTRY)&(_ZTI7S7508C1[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7508C92v4Ev,
};
extern VTBL_ENTRY _ZTV7S7508C1[];
extern void _ZN7S7508C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C2__A__7S7508C1[] = {
  ABISELECT(344,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C2__A__7S7508C1[] = {
  0,
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7508C4__7S7508C1[] = {
  ABISELECT(472,256),
  ABISELECT(384,208),
  ABISELECT(360,192),
  ABISELECT(344,184),
  ABISELECT(328,176),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C4__7S7508C1[] = {
  0,
  ABISELECT(-328,-176),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern void _ZN7S7508C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C2__7S7508C4__7S7508C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
};
extern void _ZN7S7508C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C6__7S7508C4__7S7508C1[] = {
  0,
  ABISELECT(-384,-208),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
};
extern void _ZN7S7508C82v5Ev();
extern void _ZN7S7508C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C8__7S7508C1[] = {
  ABISELECT(496,272),
  ABISELECT(424,232),
  ABISELECT(336,184),
  ABISELECT(312,168),
  ABISELECT(296,160),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C82v5Ev,
  (VTBL_ENTRY)&_ZN7S7508C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7508C47S7508C8__A1__7S7508C1[] = {
  ABISELECT(424,232),
  ABISELECT(336,184),
  ABISELECT(312,168),
  ABISELECT(296,160),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C47S7508C8__A1__7S7508C1[] = {
  0,
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern void _ZN7S7508C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C2__7S7508C47S7508C8__A1__7S7508C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-296,-160),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
};
extern void _ZN7S7508C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C6__7S7508C47S7508C8__A1__7S7508C1[] = {
  0,
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI7S7508C4[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C8__7S7508C1[] = {
  0,
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern void _ZN7S7508C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C2__7S7508C8__7S7508C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-296,-160),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
};
extern void _ZN7S7508C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C6__7S7508C8__7S7508C1[] = {
  0,
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
};
extern void _ZN7S7508C62v3Ev();
extern void _ZN7S7508C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C9__7S7508C8__7S7508C1[] = {
  0,
  0,
  ABISELECT(-216,-120),
  ABISELECT(-496,-272),
  (VTBL_ENTRY)&(_ZTI7S7508C8[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7508C92v4Ev,
};
extern void _ZN7S7508C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C2__A1__7S7508C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C22v2Ev,
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C2__A1__7S7508C1[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7508C2[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
extern void _ZN7S7508C62v3Ev();
extern void _ZN7S7508C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C9__7S7508C1[] = {
  ABISELECT(-216,-120),
  0,
  (VTBL_ENTRY)&(_ZTI7S7508C9[0]),
  (VTBL_ENTRY)&_ZN7S7508C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7508C92v4Ev,
};
extern void _ZN7S7508C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7508C3__7S7508C9__7S7508C1[] = {
  0,
  ABISELECT(216,120),
  (VTBL_ENTRY)&(_ZTI7S7508C9[0]),
  (VTBL_ENTRY)&_ZN7S7508C32v1Ev,
};
static  VTT_ENTRY vtt_S7508C1[] = {
  {&(_ZTV7S7508C1[8]),  8,49},
  {&(_tg__ZTV7S7508C2__A__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C3__7S7508C2__A__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C4__7S7508C1[7]),  7,7},
  {&(_tg__ZTV7S7508C3__7S7508C4__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C2__7S7508C4__7S7508C1[4]),  4,5},
  {&(_tg__ZTV7S7508C6__7S7508C4__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C8__7S7508C1[8]),  8,10},
  {&(_tg__ZTV7S7508C47S7508C8__A1__7S7508C1[7]),  7,7},
  {&(_tg__ZTV7S7508C3__7S7508C47S7508C8__A1__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C2__7S7508C47S7508C8__A1__7S7508C1[4]),  4,5},
  {&(_tg__ZTV7S7508C6__7S7508C47S7508C8__A1__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C3__7S7508C8__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C2__7S7508C8__7S7508C1[4]),  4,5},
  {&(_tg__ZTV7S7508C6__7S7508C8__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C9__7S7508C8__7S7508C1[5]),  5,7},
  {&(_ZTV7S7508C1[32]),  32,49},
  {&(_ZTV7S7508C1[16]),  16,49},
  {&(_ZTV7S7508C1[37]),  37,49},
  {&(_ZTV7S7508C1[41]),  41,49},
  {&(_ZTV7S7508C1[24]),  24,49},
  {&(_ZTV7S7508C1[47]),  47,49},
  {&(_tg__ZTV7S7508C2__A1__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C3__7S7508C2__A1__7S7508C1[3]),  3,4},
  {&(_tg__ZTV7S7508C9__7S7508C1[3]),  3,5},
  {&(_tg__ZTV7S7508C3__7S7508C9__7S7508C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7508C1[];
extern  VTBL_ENTRY _ZTV7S7508C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7508C1[];
Class_Descriptor cd_S7508C1 = {  "S7508C1", // class name
  bases_S7508C1, 15,
  &(vtc_S7508C1[0]), // expected_vtbl_contents
  &(vtt_S7508C1[0]), // expected_vtt_contents
  ABISELECT(1184,628), // object size
  NSPAIRA(_ZTI7S7508C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7508C1),49, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7508C1),26, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19075C4  {
  int s19075c4f0;
  virtual void  v7(); // _ZN8S19075C42v7Ev
  virtual void  v8(); // _ZN8S19075C42v8Ev
  virtual void  v9(); // _ZN8S19075C42v9Ev
  virtual void  v10(); // _ZN8S19075C43v10Ev
  virtual void  v11(); // _ZN8S19075C43v11Ev
  ~S19075C4(); // tgen
  S19075C4(); // tgen
};
//SIG(-1 S19075C4) C1{ v1 v2 v3 v4 v5 Fi}


void  S19075C4 ::v7(){vfunc_called(this, "_ZN8S19075C42v7Ev");}
void  S19075C4 ::v8(){vfunc_called(this, "_ZN8S19075C42v8Ev");}
void  S19075C4 ::v9(){vfunc_called(this, "_ZN8S19075C42v9Ev");}
void  S19075C4 ::v10(){vfunc_called(this, "_ZN8S19075C43v10Ev");}
void  S19075C4 ::v11(){vfunc_called(this, "_ZN8S19075C43v11Ev");}
S19075C4 ::~S19075C4(){ note_dtor("S19075C4", this);} // tgen
S19075C4 ::S19075C4(){ note_ctor("S19075C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19075C4C1Ev();
extern void _ZN8S19075C4D1Ev();
Name_Map name_map_S19075C4[] = {
  NSPAIR(_ZN8S19075C4C1Ev),
  NSPAIR(_ZN8S19075C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19075C4[];
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
static  VTBL_ENTRY vtc_S19075C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C4[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
};
extern VTBL_ENTRY _ZTI8S19075C4[];
extern  VTBL_ENTRY _ZTV8S19075C4[];
Class_Descriptor cd_S19075C4 = {  "S19075C4", // class name
  0,0,//no base classes
  &(vtc_S19075C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19075C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19075C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19075C5  {
  long double s19075c5f0[3];
  virtual void  v12(); // _ZN8S19075C53v12Ev
  virtual void  v13(); // _ZN8S19075C53v13Ev
  virtual void  v14(); // _ZN8S19075C53v14Ev
  virtual void  v15(); // _ZN8S19075C53v15Ev
  virtual void  v16(); // _ZN8S19075C53v16Ev
  virtual void  v17(); // _ZN8S19075C53v17Ev
  virtual void  v18(); // _ZN8S19075C53v18Ev
  ~S19075C5(); // tgen
  S19075C5(); // tgen
};
//SIG(-1 S19075C5) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S19075C5 ::v12(){vfunc_called(this, "_ZN8S19075C53v12Ev");}
void  S19075C5 ::v13(){vfunc_called(this, "_ZN8S19075C53v13Ev");}
void  S19075C5 ::v14(){vfunc_called(this, "_ZN8S19075C53v14Ev");}
void  S19075C5 ::v15(){vfunc_called(this, "_ZN8S19075C53v15Ev");}
void  S19075C5 ::v16(){vfunc_called(this, "_ZN8S19075C53v16Ev");}
void  S19075C5 ::v17(){vfunc_called(this, "_ZN8S19075C53v17Ev");}
void  S19075C5 ::v18(){vfunc_called(this, "_ZN8S19075C53v18Ev");}
S19075C5 ::~S19075C5(){ note_dtor("S19075C5", this);} // tgen
S19075C5 ::S19075C5(){ note_ctor("S19075C5", this);} // tgen

static void Test_S19075C5()
{
  extern Class_Descriptor cd_S19075C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S19075C5, buf);
    S19075C5 *dp, &lv = *(dp=new (buf) S19075C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S19075C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19075C5)");
    check_field_offset(lv, s19075c5f0, ABISELECT(16,4), "S19075C5.s19075c5f0");
    test_class_info(&lv, &cd_S19075C5);
    dp->~S19075C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19075C5(Test_S19075C5, "S19075C5", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S19075C5C1Ev();
extern void _ZN8S19075C5D1Ev();
Name_Map name_map_S19075C5[] = {
  NSPAIR(_ZN8S19075C5C1Ev),
  NSPAIR(_ZN8S19075C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19075C5[];
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY vtc_S19075C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C5[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
Class_Descriptor cd_S19075C5 = {  "S19075C5", // class name
  0,0,//no base classes
  &(vtc_S19075C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S19075C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19075C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19075C3  : S19075C4 , virtual S19075C5 {
  virtual void  v19(); // _ZN8S19075C33v19Ev
  virtual void  v20(); // _ZN8S19075C33v20Ev
  virtual void  v21(); // _ZN8S19075C33v21Ev
  virtual void  v22(); // _ZN8S19075C33v22Ev
  virtual void  v23(); // _ZN8S19075C33v23Ev
  ~S19075C3(); // tgen
  S19075C3(); // tgen
};
//SIG(-1 S19075C3) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S19075C3 ::v19(){vfunc_called(this, "_ZN8S19075C33v19Ev");}
void  S19075C3 ::v20(){vfunc_called(this, "_ZN8S19075C33v20Ev");}
void  S19075C3 ::v21(){vfunc_called(this, "_ZN8S19075C33v21Ev");}
void  S19075C3 ::v22(){vfunc_called(this, "_ZN8S19075C33v22Ev");}
void  S19075C3 ::v23(){vfunc_called(this, "_ZN8S19075C33v23Ev");}
S19075C3 ::~S19075C3(){ note_dtor("S19075C3", this);} // tgen
S19075C3 ::S19075C3(){ note_ctor("S19075C3", this);} // tgen

static void Test_S19075C3()
{
  extern Class_Descriptor cd_S19075C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S19075C3, buf);
    S19075C3 *dp, &lv = *(dp=new (buf) S19075C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S19075C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19075C3)");
    check_base_class_offset(lv, (S19075C4*), 0, "S19075C3");
    check_base_class_offset(lv, (S19075C5*), ABISELECT(16,8), "S19075C3");
    test_class_info(&lv, &cd_S19075C3);
    dp->~S19075C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19075C3(Test_S19075C3, "S19075C3", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S19075C3C1Ev();
extern void _ZN8S19075C3D1Ev();
Name_Map name_map_S19075C3[] = {
  NSPAIR(_ZN8S19075C3C1Ev),
  NSPAIR(_ZN8S19075C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19075C4;
extern VTBL_ENTRY _ZTI8S19075C4[];
extern  VTBL_ENTRY _ZTV8S19075C4[];
extern Class_Descriptor cd_S19075C5;
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
static Base_Class bases_S19075C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19075C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S19075C3[];
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY vtc_S19075C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern VTBL_ENTRY _ZTV8S19075C3[];
static  VTT_ENTRY vtt_S19075C3[] = {
  {&(_ZTV8S19075C3[3]),  3,29},
  {&(_ZTV8S19075C3[22]),  22,29},
};
extern VTBL_ENTRY _ZTI8S19075C3[];
extern  VTBL_ENTRY _ZTV8S19075C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C3[];
Class_Descriptor cd_S19075C3 = {  "S19075C3", // class name
  bases_S19075C3, 2,
  &(vtc_S19075C3[0]), // expected_vtbl_contents
  &(vtt_S19075C3[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S19075C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19075C3),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19075C3),2, //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  S19075C2  : S19075C3 {
  virtual void  v24(); // _ZN8S19075C23v24Ev
  virtual void  v25(); // _ZN8S19075C23v25Ev
  ~S19075C2(); // tgen
  S19075C2(); // tgen
};
//SIG(-1 S19075C2) C1{ BC2{ BC3{ v3 v4 v5 v6 v7 Fi} VBC4{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v1 v2}


void  S19075C2 ::v24(){vfunc_called(this, "_ZN8S19075C23v24Ev");}
void  S19075C2 ::v25(){vfunc_called(this, "_ZN8S19075C23v25Ev");}
S19075C2 ::~S19075C2(){ note_dtor("S19075C2", this);} // tgen
S19075C2 ::S19075C2(){ note_ctor("S19075C2", this);} // tgen

static void Test_S19075C2()
{
  extern Class_Descriptor cd_S19075C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S19075C2, buf);
    S19075C2 *dp, &lv = *(dp=new (buf) S19075C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S19075C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19075C2)");
    check_base_class_offset(lv, (S19075C4*)(S19075C3*), 0, "S19075C2");
    check_base_class_offset(lv, (S19075C5*)(S19075C3*), ABISELECT(16,8), "S19075C2");
    check_base_class_offset(lv, (S19075C3*), 0, "S19075C2");
    test_class_info(&lv, &cd_S19075C2);
    dp->~S19075C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19075C2(Test_S19075C2, "S19075C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S19075C2C1Ev();
extern void _ZN8S19075C2D1Ev();
Name_Map name_map_S19075C2[] = {
  NSPAIR(_ZN8S19075C2C1Ev),
  NSPAIR(_ZN8S19075C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19075C4;
extern VTBL_ENTRY _ZTI8S19075C4[];
extern  VTBL_ENTRY _ZTV8S19075C4[];
extern Class_Descriptor cd_S19075C5;
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
extern Class_Descriptor cd_S19075C3;
extern VTBL_ENTRY _ZTI8S19075C3[];
extern  VTBL_ENTRY _ZTV8S19075C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C3[];
static Base_Class bases_S19075C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19075C5,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19075C2[];
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C23v24Ev();
extern void _ZN8S19075C23v25Ev();
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY vtc_S19075C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C2[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C23v24Ev,
  (VTBL_ENTRY)&_ZN8S19075C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19075C2[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern VTBL_ENTRY _ZTV8S19075C2[];
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C3__8S19075C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C3__8S19075C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
static  VTT_ENTRY vtt_S19075C2[] = {
  {&(_ZTV8S19075C2[3]),  3,31},
  {&(_tg__ZTV8S19075C3__8S19075C2[3]),  3,13},
  {&(_tg__ZTV8S19075C5__8S19075C3__8S19075C2[9]),  9,16},
  {&(_ZTV8S19075C2[24]),  24,31},
};
extern VTBL_ENTRY _ZTI8S19075C2[];
extern  VTBL_ENTRY _ZTV8S19075C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C2[];
Class_Descriptor cd_S19075C2 = {  "S19075C2", // class name
  bases_S19075C2, 3,
  &(vtc_S19075C2[0]), // expected_vtbl_contents
  &(vtt_S19075C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S19075C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19075C2),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19075C2),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19075C7_nt  {
  virtual void  v26(); // _ZN11S19075C7_nt3v26Ev
  virtual void  v27(); // _ZN11S19075C7_nt3v27Ev
  ~S19075C7_nt(); // tgen
  S19075C7_nt(); // tgen
};
//SIG(-1 S19075C7_nt) C1{ v1 v2}


void  S19075C7_nt ::v26(){vfunc_called(this, "_ZN11S19075C7_nt3v26Ev");}
void  S19075C7_nt ::v27(){vfunc_called(this, "_ZN11S19075C7_nt3v27Ev");}
S19075C7_nt ::~S19075C7_nt(){ note_dtor("S19075C7_nt", this);} // tgen
S19075C7_nt ::S19075C7_nt(){ note_ctor("S19075C7_nt", this);} // tgen

//skip512 S19075C7_nt

#else // __cplusplus

extern void _ZN11S19075C7_ntC1Ev();
extern void _ZN11S19075C7_ntD1Ev();
Name_Map name_map_S19075C7_nt[] = {
  NSPAIR(_ZN11S19075C7_ntC1Ev),
  NSPAIR(_ZN11S19075C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19075C7_nt[];
extern void _ZN11S19075C7_nt3v26Ev();
extern void _ZN11S19075C7_nt3v27Ev();
static  VTBL_ENTRY vtc_S19075C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19075C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19075C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S19075C7_nt3v27Ev,
};
extern VTBL_ENTRY _ZTI11S19075C7_nt[];
VTBL_ENTRY *P__ZTI11S19075C7_nt = _ZTI11S19075C7_nt; 
extern  VTBL_ENTRY _ZTV11S19075C7_nt[];
Class_Descriptor cd_S19075C7_nt = {  "S19075C7_nt", // class name
  0,0,//no base classes
  &(vtc_S19075C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19075C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19075C7_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  S19075C8  : S19075C3 , S19075C5 {
  void *s19075c8f0;
  virtual void  v28(); // _ZN8S19075C83v28Ev
  virtual void  v29(); // _ZN8S19075C83v29Ev
  ~S19075C8(); // tgen
  S19075C8(); // tgen
};
//SIG(-1 S19075C8) C1{ BC2{ BC3{ v3 v4 v5 v6 v7 Fi} VBC4{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} BC4 v1 v2 Fp}


void  S19075C8 ::v28(){vfunc_called(this, "_ZN8S19075C83v28Ev");}
void  S19075C8 ::v29(){vfunc_called(this, "_ZN8S19075C83v29Ev");}
S19075C8 ::~S19075C8(){ note_dtor("S19075C8", this);} // tgen
S19075C8 ::S19075C8(){ note_ctor("S19075C8", this);} // tgen

static void Test_S19075C8()
{
  extern Class_Descriptor cd_S19075C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,24)];
    init_test(&cd_S19075C8, buf);
    S19075C8 *dp, &lv = *(dp=new (buf) S19075C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,92), "sizeof(S19075C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19075C8)");
    check_base_class_offset(lv, (S19075C4*)(S19075C3*), 0, "S19075C8");
    check_base_class_offset(lv, (S19075C5*)(S19075C3*), ABISELECT(96,52), "S19075C8");
    check_base_class_offset(lv, (S19075C3*), 0, "S19075C8");
    /*is_ambiguous_... S19075C8::S19075C5 */ AMB_check_base_class_offset(lv, (S19075C5*), ABISELECT(16,8), "S19075C8");
    check_field_offset(lv, s19075c8f0, ABISELECT(80,48), "S19075C8.s19075c8f0");
    test_class_info(&lv, &cd_S19075C8);
    dp->~S19075C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19075C8(Test_S19075C8, "S19075C8", ABISELECT(160,92));

#else // __cplusplus

extern void _ZN8S19075C8C1Ev();
extern void _ZN8S19075C8D1Ev();
Name_Map name_map_S19075C8[] = {
  NSPAIR(_ZN8S19075C8C1Ev),
  NSPAIR(_ZN8S19075C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19075C4;
extern VTBL_ENTRY _ZTI8S19075C4[];
extern  VTBL_ENTRY _ZTV8S19075C4[];
extern Class_Descriptor cd_S19075C5;
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
extern Class_Descriptor cd_S19075C3;
extern VTBL_ENTRY _ZTI8S19075C3[];
extern  VTBL_ENTRY _ZTV8S19075C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C3[];
extern Class_Descriptor cd_S19075C5;
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
static Base_Class bases_S19075C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19075C5,    ABISELECT(96,52), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19075C5,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19075C8[];
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C83v28Ev();
extern void _ZN8S19075C83v29Ev();
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY vtc_S19075C8[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C8[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v29Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19075C8[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19075C8[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern VTBL_ENTRY _ZTV8S19075C8[];
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C3__8S19075C8[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C3__8S19075C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
static  VTT_ENTRY vtt_S19075C8[] = {
  {&(_ZTV8S19075C8[3]),  3,40},
  {&(_tg__ZTV8S19075C3__8S19075C8[3]),  3,13},
  {&(_tg__ZTV8S19075C5__8S19075C3__8S19075C8[9]),  9,16},
  {&(_ZTV8S19075C8[33]),  33,40},
};
extern VTBL_ENTRY _ZTI8S19075C8[];
extern  VTBL_ENTRY _ZTV8S19075C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C8[];
Class_Descriptor cd_S19075C8 = {  "S19075C8", // class name
  bases_S19075C8, 4,
  &(vtc_S19075C8[0]), // expected_vtbl_contents
  &(vtt_S19075C8[0]), // expected_vtt_contents
  ABISELECT(160,92), // object size
  NSPAIRA(_ZTI8S19075C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19075C8),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19075C8),4, //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  S19075C6  : S19075C7_nt , S19075C8 {
  ::S19075C5 s19075c6f0;
  virtual void  v30(); // _ZN8S19075C63v30Ev
  virtual void  v31(); // _ZN8S19075C63v31Ev
  virtual void  v32(); // _ZN8S19075C63v32Ev
  virtual void  v33(); // _ZN8S19075C63v33Ev
  virtual void  v34(); // _ZN8S19075C63v34Ev
  ~S19075C6(); // tgen
  S19075C6(); // tgen
};
//SIG(-1 S19075C6) C1{ BC2{ v6 v7} BC3{ BC4{ BC5{ v8 v9 v10 v11 v12 Fi} VBC6{ v13 v14 v15 v16 v17 v18 v19 FD[3]} v20 v21 v22 v23 v24} BC6 v25 v26 Fp} v1 v2 v3 v4 v5 FC6}


void  S19075C6 ::v30(){vfunc_called(this, "_ZN8S19075C63v30Ev");}
void  S19075C6 ::v31(){vfunc_called(this, "_ZN8S19075C63v31Ev");}
void  S19075C6 ::v32(){vfunc_called(this, "_ZN8S19075C63v32Ev");}
void  S19075C6 ::v33(){vfunc_called(this, "_ZN8S19075C63v33Ev");}
void  S19075C6 ::v34(){vfunc_called(this, "_ZN8S19075C63v34Ev");}
S19075C6 ::~S19075C6(){ note_dtor("S19075C6", this);} // tgen
S19075C6 ::S19075C6(){ note_ctor("S19075C6", this);} // tgen

static void Test_S19075C6()
{
  extern Class_Descriptor cd_S19075C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,35)];
    init_test(&cd_S19075C6, buf);
    S19075C6 *dp, &lv = *(dp=new (buf) S19075C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S19075C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19075C6)");
    check_base_class_offset(lv, (S19075C7_nt*), 0, "S19075C6");
    check_base_class_offset(lv, (S19075C4*)(S19075C3*)(S19075C8*), ABISELECT(16,4), "S19075C6");
    check_base_class_offset(lv, (S19075C5*)(S19075C3*)(S19075C8*), ABISELECT(176,96), "S19075C6");
    check_base_class_offset(lv, (S19075C3*)(S19075C8*), ABISELECT(16,4), "S19075C6");
    /*is_ambiguous_... S19075C8::S19075C5 */ AMB_check_base_class_offset(lv, (S19075C5*)(S19075C8*), ABISELECT(32,12), "S19075C6");
    check_base_class_offset(lv, (S19075C8*), ABISELECT(16,4), "S19075C6");
    check_field_offset(lv, s19075c6f0, ABISELECT(112,56), "S19075C6.s19075c6f0");
    test_class_info(&lv, &cd_S19075C6);
    dp->~S19075C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19075C6(Test_S19075C6, "S19075C6", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN8S19075C6C1Ev();
extern void _ZN8S19075C6D1Ev();
Name_Map name_map_S19075C6[] = {
  NSPAIR(_ZN8S19075C6C1Ev),
  NSPAIR(_ZN8S19075C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19075C7_nt;
extern VTBL_ENTRY _ZTI11S19075C7_nt[];
extern  VTBL_ENTRY _ZTV11S19075C7_nt[];
extern Class_Descriptor cd_S19075C4;
extern VTBL_ENTRY _ZTI8S19075C4[];
extern  VTBL_ENTRY _ZTV8S19075C4[];
extern Class_Descriptor cd_S19075C5;
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
extern Class_Descriptor cd_S19075C3;
extern VTBL_ENTRY _ZTI8S19075C3[];
extern  VTBL_ENTRY _ZTV8S19075C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C3[];
extern Class_Descriptor cd_S19075C5;
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
extern Class_Descriptor cd_S19075C8;
extern VTBL_ENTRY _ZTI8S19075C8[];
extern  VTBL_ENTRY _ZTV8S19075C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C8[];
static Base_Class bases_S19075C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19075C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19075C4,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19075C5,    ABISELECT(176,96), //bcp->offset
    34, //bcp->virtual_function_table_offset
    9, //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_S19075C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19075C5,    ABISELECT(32,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19075C8,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19075C6[];
extern void _ZN11S19075C7_nt3v26Ev();
extern void _ZN11S19075C7_nt3v27Ev();
extern void _ZN8S19075C63v30Ev();
extern void _ZN8S19075C63v31Ev();
extern void _ZN8S19075C63v32Ev();
extern void _ZN8S19075C63v33Ev();
extern void _ZN8S19075C63v34Ev();
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C83v28Ev();
extern void _ZN8S19075C83v29Ev();
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY vtc_S19075C6[] = {
  ABISELECT(176,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C6[0]),
  (VTBL_ENTRY)&_ZN11S19075C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S19075C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v30Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v31Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v32Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v33Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v34Ev,
  ABISELECT(160,92),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19075C6[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v29Ev,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19075C6[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI8S19075C6[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern VTBL_ENTRY _ZTV8S19075C6[];
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C83v28Ev();
extern void _ZN8S19075C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C8__8S19075C6[] = {
  ABISELECT(160,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C8[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v29Ev,
};
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C38S19075C8__8S19075C6[] = {
  ABISELECT(160,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C38S19075C8__8S19075C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C8__8S19075C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI8S19075C8[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
static  VTT_ENTRY vtt_S19075C6[] = {
  {&(_ZTV8S19075C6[3]),  3,50},
  {&(_tg__ZTV8S19075C8__8S19075C6[3]),  3,15},
  {&(_tg__ZTV8S19075C38S19075C8__8S19075C6[3]),  3,13},
  {&(_tg__ZTV8S19075C5__8S19075C38S19075C8__8S19075C6[9]),  9,16},
  {&(_tg__ZTV8S19075C5__8S19075C8__8S19075C6[9]),  9,16},
  {&(_ZTV8S19075C6[13]),  13,50},
  {&(_ZTV8S19075C6[43]),  43,50},
};
extern VTBL_ENTRY _ZTI8S19075C6[];
extern  VTBL_ENTRY _ZTV8S19075C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C6[];
Class_Descriptor cd_S19075C6 = {  "S19075C6", // class name
  bases_S19075C6, 6,
  &(vtc_S19075C6[0]), // expected_vtbl_contents
  &(vtt_S19075C6[0]), // expected_vtt_contents
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI8S19075C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19075C6),50, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19075C6),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19075C1  : virtual S19075C2 , virtual S19075C6 {
  ::S19075C5 s19075c1f0;
  long double s19075c1f1;
  int s19075c1f2;
  virtual  ~S19075C1(); // _ZN8S19075C1D2Ev
  virtual void  v1(); // _ZN8S19075C12v1Ev
  virtual void  v2(); // _ZN8S19075C12v2Ev
  virtual void  v3(); // _ZN8S19075C12v3Ev
  virtual void  v4(); // _ZN8S19075C12v4Ev
  virtual void  v5(); // _ZN8S19075C12v5Ev
  virtual void  v6(); // _ZN8S19075C12v6Ev
  S19075C1(); // tgen
};
//SIG(1 S19075C1) C1{ VBC2{ BC3{ BC4{ v7 v8 v9 v10 v11 Fi} VBC5{ v12 v13 v14 v15 v16 v17 v18 FD[3]} v19 v20 v21 v22 v23} v24 v25} VBC6{ BC7{ v26 v27} BC8{ BC3 BC5 v28 v29 Fp} v30 v31 v32 v33 v34 FC5} vd v1 v2 v3 v4 v5 v6 FC5 FD Fi}


 S19075C1 ::~S19075C1(){ note_dtor("S19075C1", this);}
void  S19075C1 ::v1(){vfunc_called(this, "_ZN8S19075C12v1Ev");}
void  S19075C1 ::v2(){vfunc_called(this, "_ZN8S19075C12v2Ev");}
void  S19075C1 ::v3(){vfunc_called(this, "_ZN8S19075C12v3Ev");}
void  S19075C1 ::v4(){vfunc_called(this, "_ZN8S19075C12v4Ev");}
void  S19075C1 ::v5(){vfunc_called(this, "_ZN8S19075C12v5Ev");}
void  S19075C1 ::v6(){vfunc_called(this, "_ZN8S19075C12v6Ev");}
S19075C1 ::S19075C1(){ note_ctor("S19075C1", this);} // tgen

static void Test_S19075C1()
{
  extern Class_Descriptor cd_S19075C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,52)];
    init_test(&cd_S19075C1, buf);
    S19075C1 *dp, &lv = *(dp=new (buf) S19075C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,204), "sizeof(S19075C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19075C1)");
    check_base_class_offset(lv, (S19075C4*)(S19075C3*)(S19075C2*), ABISELECT(104,60), "S19075C1");
    check_base_class_offset(lv, (S19075C5*)(S19075C3*)(S19075C2*), ABISELECT(128,68), "S19075C1");
    check_base_class_offset(lv, (S19075C5*)(S19075C3*)(S19075C8*)(S19075C6*), ABISELECT(128,68), "S19075C1");
    check_base_class_offset(lv, (S19075C3*)(S19075C2*), ABISELECT(104,60), "S19075C1");
    check_base_class_offset(lv, (S19075C2*), ABISELECT(104,60), "S19075C1");
    check_base_class_offset(lv, (S19075C7_nt*)(S19075C6*), ABISELECT(192,108), "S19075C1");
    check_base_class_offset(lv, (S19075C4*)(S19075C3*)(S19075C8*)(S19075C6*), ABISELECT(208,112), "S19075C1");
    check_base_class_offset(lv, (S19075C3*)(S19075C8*)(S19075C6*), ABISELECT(208,112), "S19075C1");
    /*is_ambiguous_... S19075C8::S19075C5 */ AMB_check_base_class_offset(lv, (S19075C5*)(S19075C8*)(S19075C6*), ABISELECT(224,120), "S19075C1");
    check_base_class_offset(lv, (S19075C8*)(S19075C6*), ABISELECT(208,112), "S19075C1");
    check_base_class_offset(lv, (S19075C6*), ABISELECT(192,108), "S19075C1");
    check_field_offset(lv, s19075c1f0, ABISELECT(16,4), "S19075C1.s19075c1f0");
    check_field_offset(lv, s19075c1f1, ABISELECT(80,44), "S19075C1.s19075c1f1");
    check_field_offset(lv, s19075c1f2, ABISELECT(96,56), "S19075C1.s19075c1f2");
    test_class_info(&lv, &cd_S19075C1);
    dp->~S19075C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19075C1(Test_S19075C1, "S19075C1", ABISELECT(368,204));

#else // __cplusplus

extern void _ZN8S19075C1C1Ev();
extern void _ZN8S19075C1D2Ev();
Name_Map name_map_S19075C1[] = {
  NSPAIR(_ZN8S19075C1C1Ev),
  NSPAIR(_ZN8S19075C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19075C4;
extern VTBL_ENTRY _ZTI8S19075C4[];
extern  VTBL_ENTRY _ZTV8S19075C4[];
extern Class_Descriptor cd_S19075C5;
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
extern Class_Descriptor cd_S19075C3;
extern VTBL_ENTRY _ZTI8S19075C3[];
extern  VTBL_ENTRY _ZTV8S19075C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C3[];
extern Class_Descriptor cd_S19075C2;
extern VTBL_ENTRY _ZTI8S19075C2[];
extern  VTBL_ENTRY _ZTV8S19075C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C2[];
extern Class_Descriptor cd_S19075C7_nt;
extern VTBL_ENTRY _ZTI11S19075C7_nt[];
extern  VTBL_ENTRY _ZTV11S19075C7_nt[];
extern Class_Descriptor cd_S19075C4;
extern VTBL_ENTRY _ZTI8S19075C4[];
extern  VTBL_ENTRY _ZTV8S19075C4[];
extern Class_Descriptor cd_S19075C3;
extern VTBL_ENTRY _ZTI8S19075C3[];
extern  VTBL_ENTRY _ZTV8S19075C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C3[];
extern Class_Descriptor cd_S19075C5;
extern VTBL_ENTRY _ZTI8S19075C5[];
extern  VTBL_ENTRY _ZTV8S19075C5[];
extern Class_Descriptor cd_S19075C8;
extern VTBL_ENTRY _ZTI8S19075C8[];
extern  VTBL_ENTRY _ZTV8S19075C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C8[];
extern Class_Descriptor cd_S19075C6;
extern VTBL_ENTRY _ZTI8S19075C6[];
extern  VTBL_ENTRY _ZTV8S19075C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C6[];
static Base_Class bases_S19075C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19075C4,    ABISELECT(104,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19075C5,    ABISELECT(128,68), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //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_S19075C3,    ABISELECT(104,60), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19075C2,    ABISELECT(104,60), //bcp->offset
    13, //bcp->virtual_function_table_offset
    15, //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_S19075C7_nt,    ABISELECT(192,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19075C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19075C3,    ABISELECT(208,112), //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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19075C5,    ABISELECT(224,120), //bcp->offset
    107, //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
    8, //immediately_derived
  0, 0},
  {&cd_S19075C8,    ABISELECT(208,112), //bcp->offset
    92, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19075C6,    ABISELECT(192,108), //bcp->offset
    56, //bcp->virtual_function_table_offset
    29, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19075C1[];
extern void _ZN8S19075C1D1Ev();
extern void _ZN8S19075C1D0Ev();
extern void _ZN8S19075C12v1Ev();
extern void _ZN8S19075C12v2Ev();
extern void _ZN8S19075C12v3Ev();
extern void _ZN8S19075C12v4Ev();
extern void _ZN8S19075C12v5Ev();
extern void _ZN8S19075C12v6Ev();
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C23v24Ev();
extern void _ZN8S19075C23v25Ev();
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
extern void _ZN11S19075C7_nt3v26Ev();
extern void _ZN11S19075C7_nt3v27Ev();
extern void _ZN8S19075C63v30Ev();
extern void _ZN8S19075C63v31Ev();
extern void _ZN8S19075C63v32Ev();
extern void _ZN8S19075C63v33Ev();
extern void _ZN8S19075C63v34Ev();
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C83v28Ev();
extern void _ZN8S19075C83v29Ev();
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY vtc_S19075C1[] = {
  ABISELECT(192,108),
  ABISELECT(128,68),
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C1[0]),
  (VTBL_ENTRY)&_ZN8S19075C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19075C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19075C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19075C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19075C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19075C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19075C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19075C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,8),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19075C1[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C23v24Ev,
  (VTBL_ENTRY)&_ZN8S19075C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19075C1[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
  ABISELECT(32,12),
  ABISELECT(32,12),
  ABISELECT(32,12),
  ABISELECT(32,12),
  ABISELECT(32,12),
  ABISELECT(32,12),
  ABISELECT(32,12),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19075C1[0]),
  (VTBL_ENTRY)&_ZN11S19075C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S19075C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v30Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v31Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v32Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v33Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v34Ev,
  ABISELECT(-80,-44),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S19075C1[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v29Ev,
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI8S19075C1[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern VTBL_ENTRY _ZTV8S19075C1[];
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C23v24Ev();
extern void _ZN8S19075C23v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C2__8S19075C1[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C2[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C23v24Ev,
  (VTBL_ENTRY)&_ZN8S19075C23v25Ev,
};
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C38S19075C2__8S19075C1[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C38S19075C2__8S19075C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C2__8S19075C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19075C2[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern void _ZN11S19075C7_nt3v26Ev();
extern void _ZN11S19075C7_nt3v27Ev();
extern void _ZN8S19075C63v30Ev();
extern void _ZN8S19075C63v31Ev();
extern void _ZN8S19075C63v32Ev();
extern void _ZN8S19075C63v33Ev();
extern void _ZN8S19075C63v34Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C6__8S19075C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C6[0]),
  (VTBL_ENTRY)&_ZN11S19075C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S19075C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v30Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v31Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v32Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v33Ev,
  (VTBL_ENTRY)&_ZN8S19075C63v34Ev,
};
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C83v28Ev();
extern void _ZN8S19075C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C88S19075C6__8S19075C1[] = {
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C8[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v29Ev,
};
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C38S19075C88S19075C6__A1__8S19075C1[] = {
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C38S19075C88S19075C6__A1__8S19075C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19075C3[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C88S19075C6__8S19075C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19075C8[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
extern void _ZN8S19075C42v7Ev();
extern void _ZN8S19075C42v8Ev();
extern void _ZN8S19075C42v9Ev();
extern void _ZN8S19075C43v10Ev();
extern void _ZN8S19075C43v11Ev();
extern void _ZN8S19075C33v19Ev();
extern void _ZN8S19075C33v20Ev();
extern void _ZN8S19075C33v21Ev();
extern void _ZN8S19075C33v22Ev();
extern void _ZN8S19075C33v23Ev();
extern void _ZN8S19075C83v28Ev();
extern void _ZN8S19075C83v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C8__8S19075C6__8S19075C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19075C6[0]),
  (VTBL_ENTRY)&_ZN8S19075C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19075C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19075C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v19Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v20Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19075C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19075C83v29Ev,
};
extern void _ZN8S19075C53v12Ev();
extern void _ZN8S19075C53v13Ev();
extern void _ZN8S19075C53v14Ev();
extern void _ZN8S19075C53v15Ev();
extern void _ZN8S19075C53v16Ev();
extern void _ZN8S19075C53v17Ev();
extern void _ZN8S19075C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19075C5__8S19075C6__8S19075C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S19075C6[0]),
  (VTBL_ENTRY)&_ZN8S19075C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19075C53v18Ev,
};
static  VTT_ENTRY vtt_S19075C1[] = {
  {&(_ZTV8S19075C1[5]),  5,116},
  {&(_ZTV8S19075C1[28]),  28,116},
  {&(_ZTV8S19075C1[49]),  49,116},
  {&(_ZTV8S19075C1[85]),  85,116},
  {&(_ZTV8S19075C1[95]),  95,116},
  {&(_ZTV8S19075C1[109]),  109,116},
  {&(_tg__ZTV8S19075C2__8S19075C1[3]),  3,15},
  {&(_tg__ZTV8S19075C38S19075C2__8S19075C1[3]),  3,13},
  {&(_tg__ZTV8S19075C5__8S19075C38S19075C2__8S19075C1[9]),  9,16},
  {&(_tg__ZTV8S19075C5__8S19075C2__8S19075C1[9]),  9,16},
  {&(_tg__ZTV8S19075C6__8S19075C1[3]),  3,10},
  {&(_tg__ZTV8S19075C88S19075C6__8S19075C1[3]),  3,15},
  {&(_tg__ZTV8S19075C38S19075C88S19075C6__A1__8S19075C1[3]),  3,13},
  {&(_tg__ZTV8S19075C5__8S19075C38S19075C88S19075C6__A1__8S19075C1[9]),  9,16},
  {&(_tg__ZTV8S19075C5__8S19075C88S19075C6__8S19075C1[9]),  9,16},
  {&(_tg__ZTV8S19075C8__8S19075C6__8S19075C1[3]),  3,15},
  {&(_tg__ZTV8S19075C5__8S19075C6__8S19075C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S19075C1[];
extern  VTBL_ENTRY _ZTV8S19075C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19075C1[];
Class_Descriptor cd_S19075C1 = {  "S19075C1", // class name
  bases_S19075C1, 10,
  &(vtc_S19075C1[0]), // expected_vtbl_contents
  &(vtt_S19075C1[0]), // expected_vtt_contents
  ABISELECT(368,204), // object size
  NSPAIRA(_ZTI8S19075C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19075C1),116, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19075C1),17, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19144C4  : virtual S7394C3 {
  __tsi64 s19144c4f0[4];
  ::S7394C3 s19144c4f1;
  int s19144c4f2;
  ::S7394C3 s19144c4f3;
  __tsi64 s19144c4f4;
  void *s19144c4f5;
  ::S7394C3 s19144c4f6;
  void *s19144c4f7[4];
  ~S19144C4(); // tgen
  S19144C4(); // tgen
};
//SIG(-1 S19144C4) C1{ VBC2{ m FD[2] Fc[8]} FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]}


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

static void Test_S19144C4()
{
  extern Class_Descriptor cd_S19144C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S19144C4, buf);
    S19144C4 *dp, &lv = *(dp=new (buf) S19144C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S19144C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19144C4)");
    check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S19144C4");
    check_field_offset(lv, s19144c4f0, ABISELECT(8,4), "S19144C4.s19144c4f0");
    check_field_offset(lv, s19144c4f1, ABISELECT(48,36), "S19144C4.s19144c4f1");
    check_field_offset(lv, s19144c4f2, ABISELECT(96,68), "S19144C4.s19144c4f2");
    check_field_offset(lv, s19144c4f3, ABISELECT(112,72), "S19144C4.s19144c4f3");
    check_field_offset(lv, s19144c4f4, ABISELECT(160,104), "S19144C4.s19144c4f4");
    check_field_offset(lv, s19144c4f5, ABISELECT(168,112), "S19144C4.s19144c4f5");
    check_field_offset(lv, s19144c4f6, ABISELECT(176,116), "S19144C4.s19144c4f6");
    check_field_offset(lv, s19144c4f7, ABISELECT(224,148), "S19144C4.s19144c4f7");
    test_class_info(&lv, &cd_S19144C4);
    dp->~S19144C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19144C4(Test_S19144C4, "S19144C4", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN8S19144C4C1Ev();
extern void _ZN8S19144C4D1Ev();
Name_Map name_map_S19144C4[] = {
  NSPAIR(_ZN8S19144C4C1Ev),
  NSPAIR(_ZN8S19144C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
static Base_Class bases_S19144C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19144C4[];
static  VTBL_ENTRY vtc_S19144C4[] = {
  ABISELECT(256,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19144C4[0]),
};
extern VTBL_ENTRY _ZTV8S19144C4[];
static  VTT_ENTRY vtt_S19144C4[] = {
  {&(_ZTV8S19144C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19144C4[];
extern  VTBL_ENTRY _ZTV8S19144C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19144C4[];
Class_Descriptor cd_S19144C4 = {  "S19144C4", // class name
  bases_S19144C4, 1,
  &(vtc_S19144C4[0]), // expected_vtbl_contents
  &(vtt_S19144C4[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI8S19144C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19144C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19144C4),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  S19144C5  {
  ::S19144C4 s19144c5f0;
  void *s19144c5f1;
  __tsi64 s19144c5f2;
  int s19144c5f3;
  void *s19144c5f4;
  ::S7394C6 s19144c5f5[8];
  char s19144c5f6;
  void *s19144c5f7;
  virtual  ~S19144C5(); // _ZN8S19144C5D1Ev
  virtual void  v2(); // _ZN8S19144C52v2Ev
  virtual void  v3(); // _ZN8S19144C52v3Ev
  S19144C5(); // tgen
};
//SIG(-1 S19144C5) C1{ vd v1 v2 FC2{ VBC3{ m FD[2] Fc[8]} FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} Fp FL Fi Fp FU4{ m FD FL FD FL Fi}[8] Fc Fp}


 S19144C5 ::~S19144C5(){ note_dtor("S19144C5", this);}
void  S19144C5 ::v2(){vfunc_called(this, "_ZN8S19144C52v2Ev");}
void  S19144C5 ::v3(){vfunc_called(this, "_ZN8S19144C52v3Ev");}
S19144C5 ::S19144C5(){ note_ctor("S19144C5", this);} // tgen

static void Test_S19144C5()
{
  extern Class_Descriptor cd_S19144C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,82)];
    init_test(&cd_S19144C5, buf);
    S19144C5 *dp, &lv = *(dp=new (buf) S19144C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,324), "sizeof(S19144C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19144C5)");
    check_field_offset(lv, s19144c5f0, ABISELECT(16,4), "S19144C5.s19144c5f0");
    check_field_offset(lv, s19144c5f1, ABISELECT(320,200), "S19144C5.s19144c5f1");
    check_field_offset(lv, s19144c5f2, ABISELECT(328,204), "S19144C5.s19144c5f2");
    check_field_offset(lv, s19144c5f3, ABISELECT(336,212), "S19144C5.s19144c5f3");
    check_field_offset(lv, s19144c5f4, ABISELECT(344,216), "S19144C5.s19144c5f4");
    check_field_offset(lv, s19144c5f5, ABISELECT(352,220), "S19144C5.s19144c5f5");
    check_field_offset(lv, s19144c5f6, ABISELECT(480,316), "S19144C5.s19144c5f6");
    check_field_offset(lv, s19144c5f7, ABISELECT(488,320), "S19144C5.s19144c5f7");
    test_class_info(&lv, &cd_S19144C5);
    dp->~S19144C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19144C5(Test_S19144C5, "S19144C5", ABISELECT(496,324));

#else // __cplusplus

extern void _ZN8S19144C5C1Ev();
extern void _ZN8S19144C5D1Ev();
Name_Map name_map_S19144C5[] = {
  NSPAIR(_ZN8S19144C5C1Ev),
  NSPAIR(_ZN8S19144C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19144C5[];
extern void _ZN8S19144C5D1Ev();
extern void _ZN8S19144C5D0Ev();
extern void _ZN8S19144C52v2Ev();
extern void _ZN8S19144C52v3Ev();
static  VTBL_ENTRY vtc_S19144C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19144C5[0]),
  (VTBL_ENTRY)&_ZN8S19144C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19144C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19144C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19144C52v3Ev,
};
extern VTBL_ENTRY _ZTI8S19144C5[];
extern  VTBL_ENTRY _ZTV8S19144C5[];
Class_Descriptor cd_S19144C5 = {  "S19144C5", // class name
  0,0,//no base classes
  &(vtc_S19144C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,324), // object size
  NSPAIRA(_ZTI8S19144C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19144C5),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  S19144C2  : S7394C3 , S19144C4 , virtual S19144C5 {
  void *s19144c2f0[4];
  __tsi64 s19144c2f1;
  void *s19144c2f2[3];
  ::S7394C6 s19144c2f3;
  ::S19144C5 s19144c2f4;
  long double s19144c2f5;
  short  :0;
  ::S7394C3 s19144c2f7;
  long double s19144c2f8;
  void *s19144c2f9;
  virtual  ~S19144C2(); // _ZN8S19144C2D2Ev
  virtual void  v4(); // _ZN8S19144C22v4Ev
  S19144C2(); // tgen
};
//SIG(-1 S19144C2) C1{ BC2{ m FD[2] Fc[8]} BC3{ VBC2 FL[4] FC2 Fi FC2 FL Fp FC2 Fp[4]} VBC4{ vd v2 v3 FC3 Fp FL Fi Fp FU5{ m FD FL FD FL Fi}[8] Fc Fp} vd v1 Fp[4] FL Fp[3] FU5 FC4 FD Fs:0 FC2 FD Fp}


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

static void Test_S19144C2()
{
  extern Class_Descriptor cd_S19144C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,247)];
    init_test(&cd_S19144C2, buf);
    S19144C2 *dp, &lv = *(dp=new (buf) S19144C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,984), "sizeof(S19144C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19144C2)");
    /*is_ambiguous_... S19144C2::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*), ABISELECT(256,164), "S19144C2");
    check_base_class_offset(lv, (S7394C3*)(S19144C4*), ABISELECT(976,628), "S19144C2");
    check_base_class_offset(lv, (S19144C4*), 0, "S19144C2");
    check_base_class_offset(lv, (S19144C5*), ABISELECT(1024,660), "S19144C2");
    check_field_offset(lv, s19144c2f0, ABISELECT(304,196), "S19144C2.s19144c2f0");
    check_field_offset(lv, s19144c2f1, ABISELECT(336,212), "S19144C2.s19144c2f1");
    check_field_offset(lv, s19144c2f2, ABISELECT(344,220), "S19144C2.s19144c2f2");
    check_field_offset(lv, s19144c2f3, ABISELECT(368,232), "S19144C2.s19144c2f3");
    check_field_offset(lv, s19144c2f4, ABISELECT(384,244), "S19144C2.s19144c2f4");
    check_field_offset(lv, s19144c2f5, ABISELECT(880,568), "S19144C2.s19144c2f5");
    check_field_offset(lv, s19144c2f7, ABISELECT(896,580), "S19144C2.s19144c2f7");
    check_field_offset(lv, s19144c2f8, ABISELECT(944,612), "S19144C2.s19144c2f8");
    check_field_offset(lv, s19144c2f9, ABISELECT(960,624), "S19144C2.s19144c2f9");
    test_class_info(&lv, &cd_S19144C2);
    dp->~S19144C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19144C2(Test_S19144C2, "S19144C2", ABISELECT(1520,984));

#else // __cplusplus

extern void _ZN8S19144C2C1Ev();
extern void _ZN8S19144C2D2Ev();
Name_Map name_map_S19144C2[] = {
  NSPAIR(_ZN8S19144C2C1Ev),
  NSPAIR(_ZN8S19144C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19144C4;
extern VTBL_ENTRY _ZTI8S19144C4[];
extern  VTBL_ENTRY _ZTV8S19144C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19144C4[];
extern Class_Descriptor cd_S19144C5;
extern VTBL_ENTRY _ZTI8S19144C5[];
extern  VTBL_ENTRY _ZTV8S19144C5[];
static Base_Class bases_S19144C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S7394C3,    ABISELECT(976,628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19144C4,    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_S19144C5,    ABISELECT(1024,660), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19144C2[];
extern void _ZN8S19144C2D1Ev();
extern void _ZN8S19144C2D0Ev();
extern void _ZN8S19144C22v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19144C2D1Ev,_ZTv0_n12_N8S19144C2D1Ev)();
extern void ABISELECT(_ZThn1024_N8S19144C2D1Ev,_ZThn660_N8S19144C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19144C2D0Ev,_ZTv0_n12_N8S19144C2D0Ev)();
extern void ABISELECT(_ZThn1024_N8S19144C2D0Ev,_ZThn660_N8S19144C2D0Ev)() __attribute__((weak));
extern void _ZN8S19144C52v2Ev();
extern void _ZN8S19144C52v3Ev();
static  VTBL_ENTRY vtc_S19144C2[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19144C2[0]),
  (VTBL_ENTRY)&_ZN8S19144C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19144C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19144C22v4Ev,
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI8S19144C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19144C2D1Ev,_ZTv0_n12_N8S19144C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19144C2D0Ev,_ZTv0_n12_N8S19144C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19144C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19144C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S19144C2[];
static  VTBL_ENTRY _tg__ZTV8S19144C4__8S19144C2[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19144C4[0]),
};
static  VTT_ENTRY vtt_S19144C2[] = {
  {&(_ZTV8S19144C2[4]),  4,16},
  {&(_tg__ZTV8S19144C4__8S19144C2[3]),  3,3},
  {&(_ZTV8S19144C2[12]),  12,16},
};
extern VTBL_ENTRY _ZTI8S19144C2[];
extern  VTBL_ENTRY _ZTV8S19144C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19144C2[];
static VTBL_ENTRY alt_thunk_names135[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19144C2D0Ev,_ZTv0_n12_N8S19144C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19144C2D0Ev,_ZThn660_N8S19144C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19144C2D1Ev,_ZTv0_n12_N8S19144C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19144C2D1Ev,_ZThn660_N8S19144C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19144C2 = {  "S19144C2", // class name
  bases_S19144C2, 4,
  &(vtc_S19144C2[0]), // expected_vtbl_contents
  &(vtt_S19144C2[0]), // expected_vtt_contents
  ABISELECT(1520,984), // object size
  NSPAIRA(_ZTI8S19144C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19144C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19144C2),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names135,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19144C1  : virtual S19144C2 {
  __tsi64 s19144c1f0;
  __tsi64 s19144c1f1;
  ::S19144C4 s19144c1f2;
  long double s19144c1f3;
  virtual void  v1(); // _ZN8S19144C12v1Ev
  ~S19144C1(); // tgen
  S19144C1(); // tgen
};
//SIG(1 S19144C1) C1{ VBC2{ BC3{ m FD[2] Fc[8]} BC4{ VBC3 FL[4] FC3 Fi FC3 FL Fp FC3 Fp[4]} VBC5{ vd v2 v3 FC4 Fp FL Fi Fp FU6{ m FD FL FD FL Fi}[8] Fc Fp} vd v4 Fp[4] FL Fp[3] FU6 FC5 FD Fs:0 FC3 FD Fp} v1 FL FL FC4 FD}


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

static void Test_S19144C1()
{
  extern Class_Descriptor cd_S19144C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(118,304)];
    init_test(&cd_S19144C1, buf);
    S19144C1 *dp, &lv = *(dp=new (buf) S19144C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1872,1212), "sizeof(S19144C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19144C1)");
    /*is_ambiguous_... S19144C2::S7394C3 */ AMB_check_base_class_offset(lv, (S7394C3*)(S19144C2*), ABISELECT(608,392), "S19144C1");
    check_base_class_offset(lv, (S7394C3*)(S19144C4*)(S19144C2*), ABISELECT(1328,856), "S19144C1");
    check_base_class_offset(lv, (S19144C4*)(S19144C2*), ABISELECT(352,228), "S19144C1");
    check_base_class_offset(lv, (S19144C5*)(S19144C2*), ABISELECT(1376,888), "S19144C1");
    check_base_class_offset(lv, (S19144C2*), ABISELECT(352,228), "S19144C1");
    check_field_offset(lv, s19144c1f0, ABISELECT(8,4), "S19144C1.s19144c1f0");
    check_field_offset(lv, s19144c1f1, ABISELECT(16,12), "S19144C1.s19144c1f1");
    check_field_offset(lv, s19144c1f2, ABISELECT(32,20), "S19144C1.s19144c1f2");
    check_field_offset(lv, s19144c1f3, ABISELECT(336,216), "S19144C1.s19144c1f3");
    test_class_info(&lv, &cd_S19144C1);
    dp->~S19144C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19144C1(Test_S19144C1, "S19144C1", ABISELECT(1872,1212));

#else // __cplusplus

extern void _ZN8S19144C1C1Ev();
extern void _ZN8S19144C1D1Ev();
Name_Map name_map_S19144C1[] = {
  NSPAIR(_ZN8S19144C1C1Ev),
  NSPAIR(_ZN8S19144C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S7394C3;
extern VTBL_ENTRY _ZTI7S7394C3[];
extern Class_Descriptor cd_S19144C4;
extern VTBL_ENTRY _ZTI8S19144C4[];
extern  VTBL_ENTRY _ZTV8S19144C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19144C4[];
extern Class_Descriptor cd_S19144C5;
extern VTBL_ENTRY _ZTI8S19144C5[];
extern  VTBL_ENTRY _ZTV8S19144C5[];
extern Class_Descriptor cd_S19144C2;
extern VTBL_ENTRY _ZTI8S19144C2[];
extern  VTBL_ENTRY _ZTV8S19144C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19144C2[];
static Base_Class bases_S19144C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7394C3,    ABISELECT(608,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
    4, //immediately_derived
  0, 0},
  {&cd_S7394C3,    ABISELECT(1328,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19144C4,    ABISELECT(352,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19144C5,    ABISELECT(1376,888), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19144C2,    ABISELECT(352,228), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19144C1[];
extern void _ZN8S19144C12v1Ev();
extern void _ZN8S19144C1D1Ev();
extern void _ZN8S19144C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19144C1D1Ev,_ZTv0_n20_N8S19144C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S19144C1D1Ev,_ZThn228_N8S19144C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19144C1D0Ev,_ZTv0_n20_N8S19144C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S19144C1D0Ev,_ZThn228_N8S19144C1D0Ev)() __attribute__((weak));
extern void _ZN8S19144C22v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19144C1D1Ev,_ZTv0_n12_N8S19144C1D1Ev)();
extern void ABISELECT(_ZThn1376_N8S19144C1D1Ev,_ZThn888_N8S19144C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19144C1D0Ev,_ZTv0_n12_N8S19144C1D0Ev)();
extern void ABISELECT(_ZThn1376_N8S19144C1D0Ev,_ZThn888_N8S19144C1D0Ev)() __attribute__((weak));
extern void _ZN8S19144C52v2Ev();
extern void _ZN8S19144C52v3Ev();
static  VTBL_ENTRY vtc_S19144C1[] = {
  ABISELECT(1376,888),
  ABISELECT(1328,856),
  ABISELECT(352,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19144C1[0]),
  (VTBL_ENTRY)&_ZN8S19144C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19144C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19144C1D0Ev,
  0,
  ABISELECT(-352,-228),
  ABISELECT(1024,660),
  ABISELECT(976,628),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI8S19144C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19144C1D1Ev,_ZTv0_n20_N8S19144C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19144C1D0Ev,_ZTv0_n20_N8S19144C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19144C22v4Ev,
  0,
  0,
  ABISELECT(-1376,-888),
  ABISELECT(-1376,-888),
  (VTBL_ENTRY)&(_ZTI8S19144C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19144C1D1Ev,_ZTv0_n12_N8S19144C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19144C1D0Ev,_ZTv0_n12_N8S19144C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19144C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19144C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S19144C1[];
extern void _ZN8S19144C2D1Ev();
extern void _ZN8S19144C2D0Ev();
extern void _ZN8S19144C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19144C2__8S19144C1[] = {
  ABISELECT(1024,660),
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19144C2[0]),
  (VTBL_ENTRY)&_ZN8S19144C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19144C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19144C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19144C48S19144C2__8S19144C1[] = {
  ABISELECT(976,628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19144C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19144C2D1Ev,_ZTv0_n12_N8S19144C2D1Ev)();
extern void ABISELECT(_ZThn1024_N8S19144C2D1Ev,_ZThn660_N8S19144C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19144C2D0Ev,_ZTv0_n12_N8S19144C2D0Ev)();
extern void ABISELECT(_ZThn1024_N8S19144C2D0Ev,_ZThn660_N8S19144C2D0Ev)() __attribute__((weak));
extern void _ZN8S19144C52v2Ev();
extern void _ZN8S19144C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19144C5__8S19144C2__8S19144C1[] = {
  0,
  0,
  ABISELECT(-1024,-660),
  ABISELECT(-1024,-660),
  (VTBL_ENTRY)&(_ZTI8S19144C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19144C2D1Ev,_ZTv0_n12_N8S19144C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19144C2D0Ev,_ZTv0_n12_N8S19144C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19144C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19144C52v3Ev,
};
static  VTT_ENTRY vtt_S19144C1[] = {
  {&(_ZTV8S19144C1[5]),  5,26},
  {&(_ZTV8S19144C1[14]),  14,26},
  {&(_ZTV8S19144C1[22]),  22,26},
  {&(_tg__ZTV8S19144C2__8S19144C1[4]),  4,7},
  {&(_tg__ZTV8S19144C48S19144C2__8S19144C1[3]),  3,3},
  {&(_tg__ZTV8S19144C5__8S19144C2__8S19144C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19144C1[];
extern  VTBL_ENTRY _ZTV8S19144C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19144C1[];
static VTBL_ENTRY alt_thunk_names136[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19144C2D0Ev,_ZTv0_n12_N8S19144C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19144C2D0Ev,_ZThn660_N8S19144C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19144C2D1Ev,_ZTv0_n12_N8S19144C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N8S19144C2D1Ev,_ZThn660_N8S19144C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19144C1D0Ev,_ZTv0_n12_N8S19144C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N8S19144C1D0Ev,_ZThn888_N8S19144C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19144C1D1Ev,_ZTv0_n12_N8S19144C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N8S19144C1D1Ev,_ZThn888_N8S19144C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19144C1D0Ev,_ZTv0_n20_N8S19144C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19144C1D0Ev,_ZThn228_N8S19144C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19144C1D1Ev,_ZTv0_n20_N8S19144C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19144C1D1Ev,_ZThn228_N8S19144C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19144C1 = {  "S19144C1", // class name
  bases_S19144C1, 5,
  &(vtc_S19144C1[0]), // expected_vtbl_contents
  &(vtt_S19144C1[0]), // expected_vtt_contents
  ABISELECT(1872,1212), // object size
  NSPAIRA(_ZTI8S19144C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19144C1),26, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19144C1),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names136,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18973C6  {
  int s18973c6f0;
  virtual void  v5(); // _ZN8S18973C62v5Ev
  virtual void  v6(); // _ZN8S18973C62v6Ev
  virtual void  v7(); // _ZN8S18973C62v7Ev
  virtual void  v8(); // _ZN8S18973C62v8Ev
  virtual void  v9(); // _ZN8S18973C62v9Ev
  ~S18973C6(); // tgen
  S18973C6(); // tgen
};
//SIG(-1 S18973C6) C1{ v1 v2 v3 v4 v5 Fi}


void  S18973C6 ::v5(){vfunc_called(this, "_ZN8S18973C62v5Ev");}
void  S18973C6 ::v6(){vfunc_called(this, "_ZN8S18973C62v6Ev");}
void  S18973C6 ::v7(){vfunc_called(this, "_ZN8S18973C62v7Ev");}
void  S18973C6 ::v8(){vfunc_called(this, "_ZN8S18973C62v8Ev");}
void  S18973C6 ::v9(){vfunc_called(this, "_ZN8S18973C62v9Ev");}
S18973C6 ::~S18973C6(){ note_dtor("S18973C6", this);} // tgen
S18973C6 ::S18973C6(){ note_ctor("S18973C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18973C6C1Ev();
extern void _ZN8S18973C6D1Ev();
Name_Map name_map_S18973C6[] = {
  NSPAIR(_ZN8S18973C6C1Ev),
  NSPAIR(_ZN8S18973C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18973C6[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
static  VTBL_ENTRY vtc_S18973C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C6[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
};
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
Class_Descriptor cd_S18973C6 = {  "S18973C6", // class name
  0,0,//no base classes
  &(vtc_S18973C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18973C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18973C6),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18973C7  {
  long double s18973c7f0[3];
  virtual void  v10(); // _ZN8S18973C73v10Ev
  virtual void  v11(); // _ZN8S18973C73v11Ev
  virtual void  v12(); // _ZN8S18973C73v12Ev
  virtual void  v13(); // _ZN8S18973C73v13Ev
  virtual void  v14(); // _ZN8S18973C73v14Ev
  virtual void  v15(); // _ZN8S18973C73v15Ev
  virtual void  v16(); // _ZN8S18973C73v16Ev
  ~S18973C7(); // tgen
  S18973C7(); // tgen
};
//SIG(-1 S18973C7) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S18973C7 ::v10(){vfunc_called(this, "_ZN8S18973C73v10Ev");}
void  S18973C7 ::v11(){vfunc_called(this, "_ZN8S18973C73v11Ev");}
void  S18973C7 ::v12(){vfunc_called(this, "_ZN8S18973C73v12Ev");}
void  S18973C7 ::v13(){vfunc_called(this, "_ZN8S18973C73v13Ev");}
void  S18973C7 ::v14(){vfunc_called(this, "_ZN8S18973C73v14Ev");}
void  S18973C7 ::v15(){vfunc_called(this, "_ZN8S18973C73v15Ev");}
void  S18973C7 ::v16(){vfunc_called(this, "_ZN8S18973C73v16Ev");}
S18973C7 ::~S18973C7(){ note_dtor("S18973C7", this);} // tgen
S18973C7 ::S18973C7(){ note_ctor("S18973C7", this);} // tgen

static void Test_S18973C7()
{
  extern Class_Descriptor cd_S18973C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S18973C7, buf);
    S18973C7 *dp, &lv = *(dp=new (buf) S18973C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S18973C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18973C7)");
    check_field_offset(lv, s18973c7f0, ABISELECT(16,4), "S18973C7.s18973c7f0");
    test_class_info(&lv, &cd_S18973C7);
    dp->~S18973C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18973C7(Test_S18973C7, "S18973C7", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S18973C7C1Ev();
extern void _ZN8S18973C7D1Ev();
Name_Map name_map_S18973C7[] = {
  NSPAIR(_ZN8S18973C7C1Ev),
  NSPAIR(_ZN8S18973C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18973C7[];
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY vtc_S18973C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C7[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern VTBL_ENTRY _ZTI8S18973C7[];
extern  VTBL_ENTRY _ZTV8S18973C7[];
Class_Descriptor cd_S18973C7 = {  "S18973C7", // class name
  0,0,//no base classes
  &(vtc_S18973C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S18973C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18973C7),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18973C5  : S18973C6 , virtual S18973C7 {
  virtual void  v17(); // _ZN8S18973C53v17Ev
  virtual void  v18(); // _ZN8S18973C53v18Ev
  virtual void  v19(); // _ZN8S18973C53v19Ev
  virtual void  v20(); // _ZN8S18973C53v20Ev
  virtual void  v21(); // _ZN8S18973C53v21Ev
  ~S18973C5(); // tgen
  S18973C5(); // tgen
};
//SIG(-1 S18973C5) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S18973C5 ::v17(){vfunc_called(this, "_ZN8S18973C53v17Ev");}
void  S18973C5 ::v18(){vfunc_called(this, "_ZN8S18973C53v18Ev");}
void  S18973C5 ::v19(){vfunc_called(this, "_ZN8S18973C53v19Ev");}
void  S18973C5 ::v20(){vfunc_called(this, "_ZN8S18973C53v20Ev");}
void  S18973C5 ::v21(){vfunc_called(this, "_ZN8S18973C53v21Ev");}
S18973C5 ::~S18973C5(){ note_dtor("S18973C5", this);} // tgen
S18973C5 ::S18973C5(){ note_ctor("S18973C5", this);} // tgen

static void Test_S18973C5()
{
  extern Class_Descriptor cd_S18973C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S18973C5, buf);
    S18973C5 *dp, &lv = *(dp=new (buf) S18973C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S18973C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18973C5)");
    check_base_class_offset(lv, (S18973C6*), 0, "S18973C5");
    check_base_class_offset(lv, (S18973C7*), ABISELECT(16,8), "S18973C5");
    test_class_info(&lv, &cd_S18973C5);
    dp->~S18973C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18973C5(Test_S18973C5, "S18973C5", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S18973C5C1Ev();
extern void _ZN8S18973C5D1Ev();
Name_Map name_map_S18973C5[] = {
  NSPAIR(_ZN8S18973C5C1Ev),
  NSPAIR(_ZN8S18973C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18973C6;
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
extern Class_Descriptor cd_S18973C7;
extern VTBL_ENTRY _ZTI8S18973C7[];
extern  VTBL_ENTRY _ZTV8S18973C7[];
static Base_Class bases_S18973C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18973C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S18973C7,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S18973C5[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY vtc_S18973C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern VTBL_ENTRY _ZTV8S18973C5[];
static  VTT_ENTRY vtt_S18973C5[] = {
  {&(_ZTV8S18973C5[3]),  3,29},
  {&(_ZTV8S18973C5[22]),  22,29},
};
extern VTBL_ENTRY _ZTI8S18973C5[];
extern  VTBL_ENTRY _ZTV8S18973C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C5[];
Class_Descriptor cd_S18973C5 = {  "S18973C5", // class name
  bases_S18973C5, 2,
  &(vtc_S18973C5[0]), // expected_vtbl_contents
  &(vtt_S18973C5[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S18973C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18973C5),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18973C5),2, //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  S18973C4  : S18973C5 {
  virtual void  v22(); // _ZN8S18973C43v22Ev
  virtual void  v23(); // _ZN8S18973C43v23Ev
  ~S18973C4(); // tgen
  S18973C4(); // tgen
};
//SIG(-1 S18973C4) C1{ BC2{ BC3{ v3 v4 v5 v6 v7 Fi} VBC4{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v1 v2}


void  S18973C4 ::v22(){vfunc_called(this, "_ZN8S18973C43v22Ev");}
void  S18973C4 ::v23(){vfunc_called(this, "_ZN8S18973C43v23Ev");}
S18973C4 ::~S18973C4(){ note_dtor("S18973C4", this);} // tgen
S18973C4 ::S18973C4(){ note_ctor("S18973C4", this);} // tgen

static void Test_S18973C4()
{
  extern Class_Descriptor cd_S18973C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S18973C4, buf);
    S18973C4 *dp, &lv = *(dp=new (buf) S18973C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S18973C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18973C4)");
    check_base_class_offset(lv, (S18973C6*)(S18973C5*), 0, "S18973C4");
    check_base_class_offset(lv, (S18973C7*)(S18973C5*), ABISELECT(16,8), "S18973C4");
    check_base_class_offset(lv, (S18973C5*), 0, "S18973C4");
    test_class_info(&lv, &cd_S18973C4);
    dp->~S18973C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18973C4(Test_S18973C4, "S18973C4", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S18973C4C1Ev();
extern void _ZN8S18973C4D1Ev();
Name_Map name_map_S18973C4[] = {
  NSPAIR(_ZN8S18973C4C1Ev),
  NSPAIR(_ZN8S18973C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18973C6;
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
extern Class_Descriptor cd_S18973C7;
extern VTBL_ENTRY _ZTI8S18973C7[];
extern  VTBL_ENTRY _ZTV8S18973C7[];
extern Class_Descriptor cd_S18973C5;
extern VTBL_ENTRY _ZTI8S18973C5[];
extern  VTBL_ENTRY _ZTV8S18973C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C5[];
static Base_Class bases_S18973C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18973C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18973C7,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S18973C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18973C4[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY vtc_S18973C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C4[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18973C4[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern VTBL_ENTRY _ZTV8S18973C4[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C5__8S18973C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C5__8S18973C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
static  VTT_ENTRY vtt_S18973C4[] = {
  {&(_ZTV8S18973C4[3]),  3,31},
  {&(_tg__ZTV8S18973C5__8S18973C4[3]),  3,13},
  {&(_tg__ZTV8S18973C7__8S18973C5__8S18973C4[9]),  9,16},
  {&(_ZTV8S18973C4[24]),  24,31},
};
extern VTBL_ENTRY _ZTI8S18973C4[];
extern  VTBL_ENTRY _ZTV8S18973C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C4[];
Class_Descriptor cd_S18973C4 = {  "S18973C4", // class name
  bases_S18973C4, 3,
  &(vtc_S18973C4[0]), // expected_vtbl_contents
  &(vtt_S18973C4[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S18973C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18973C4),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18973C4),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18973C3  : S18973C4 , S18973C6 {
  long s18973c3f0;
  virtual void  v24(); // _ZN8S18973C33v24Ev
  virtual void  v25(); // _ZN8S18973C33v25Ev
  ~S18973C3(); // tgen
  S18973C3(); // tgen
};
//SIG(-1 S18973C3) C1{ BC2{ BC3{ BC4{ v3 v4 v5 v6 v7 Fi} VBC5{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v20 v21} BC4 v1 v2 Fl}


void  S18973C3 ::v24(){vfunc_called(this, "_ZN8S18973C33v24Ev");}
void  S18973C3 ::v25(){vfunc_called(this, "_ZN8S18973C33v25Ev");}
S18973C3 ::~S18973C3(){ note_dtor("S18973C3", this);} // tgen
S18973C3 ::S18973C3(){ note_ctor("S18973C3", this);} // tgen

static void Test_S18973C3()
{
  extern Class_Descriptor cd_S18973C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,16)];
    init_test(&cd_S18973C3, buf);
    S18973C3 *dp, &lv = *(dp=new (buf) S18973C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S18973C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18973C3)");
    check_base_class_offset(lv, (S18973C6*)(S18973C5*)(S18973C4*), 0, "S18973C3");
    check_base_class_offset(lv, (S18973C7*)(S18973C5*)(S18973C4*), ABISELECT(48,20), "S18973C3");
    check_base_class_offset(lv, (S18973C5*)(S18973C4*), 0, "S18973C3");
    check_base_class_offset(lv, (S18973C4*), 0, "S18973C3");
    /*is_ambiguous_... S18973C3::S18973C6 */ AMB_check_base_class_offset(lv, (S18973C6*), ABISELECT(16,8), "S18973C3");
    check_field_offset(lv, s18973c3f0, ABISELECT(32,16), "S18973C3.s18973c3f0");
    test_class_info(&lv, &cd_S18973C3);
    dp->~S18973C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18973C3(Test_S18973C3, "S18973C3", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN8S18973C3C1Ev();
extern void _ZN8S18973C3D1Ev();
Name_Map name_map_S18973C3[] = {
  NSPAIR(_ZN8S18973C3C1Ev),
  NSPAIR(_ZN8S18973C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18973C6;
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
extern Class_Descriptor cd_S18973C7;
extern VTBL_ENTRY _ZTI8S18973C7[];
extern  VTBL_ENTRY _ZTV8S18973C7[];
extern Class_Descriptor cd_S18973C5;
extern VTBL_ENTRY _ZTI8S18973C5[];
extern  VTBL_ENTRY _ZTV8S18973C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C5[];
extern Class_Descriptor cd_S18973C4;
extern VTBL_ENTRY _ZTI8S18973C4[];
extern  VTBL_ENTRY _ZTV8S18973C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C4[];
extern Class_Descriptor cd_S18973C6;
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
static Base_Class bases_S18973C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18973C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18973C7,    ABISELECT(48,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //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_S18973C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18973C4,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18973C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18973C3[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
extern void _ZN8S18973C33v24Ev();
extern void _ZN8S18973C33v25Ev();
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY vtc_S18973C3[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C3[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v25Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18973C3[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S18973C3[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern VTBL_ENTRY _ZTV8S18973C3[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C4__8S18973C3[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C4[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
};
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C58S18973C4__8S18973C3[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C58S18973C4__8S18973C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C4__8S18973C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S18973C4[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
static  VTT_ENTRY vtt_S18973C3[] = {
  {&(_ZTV8S18973C3[3]),  3,40},
  {&(_tg__ZTV8S18973C4__8S18973C3[3]),  3,15},
  {&(_tg__ZTV8S18973C58S18973C4__8S18973C3[3]),  3,13},
  {&(_tg__ZTV8S18973C7__8S18973C58S18973C4__8S18973C3[9]),  9,16},
  {&(_tg__ZTV8S18973C7__8S18973C4__8S18973C3[9]),  9,16},
  {&(_ZTV8S18973C3[33]),  33,40},
};
extern VTBL_ENTRY _ZTI8S18973C3[];
extern  VTBL_ENTRY _ZTV8S18973C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C3[];
Class_Descriptor cd_S18973C3 = {  "S18973C3", // class name
  bases_S18973C3, 5,
  &(vtc_S18973C3[0]), // expected_vtbl_contents
  &(vtt_S18973C3[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S18973C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18973C3),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18973C3),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18973C8  {
  virtual void  v26(); // _ZN8S18973C83v26Ev
  virtual void  v27(); // _ZN8S18973C83v27Ev
  ~S18973C8(); // tgen
  S18973C8(); // tgen
};
//SIG(-1 S18973C8) C1{ v1 v2}


void  S18973C8 ::v26(){vfunc_called(this, "_ZN8S18973C83v26Ev");}
void  S18973C8 ::v27(){vfunc_called(this, "_ZN8S18973C83v27Ev");}
S18973C8 ::~S18973C8(){ note_dtor("S18973C8", this);} // tgen
S18973C8 ::S18973C8(){ note_ctor("S18973C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18973C8C1Ev();
extern void _ZN8S18973C8D1Ev();
Name_Map name_map_S18973C8[] = {
  NSPAIR(_ZN8S18973C8C1Ev),
  NSPAIR(_ZN8S18973C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18973C8[];
extern void _ZN8S18973C83v26Ev();
extern void _ZN8S18973C83v27Ev();
static  VTBL_ENTRY vtc_S18973C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C8[0]),
  (VTBL_ENTRY)&_ZN8S18973C83v26Ev,
  (VTBL_ENTRY)&_ZN8S18973C83v27Ev,
};
extern VTBL_ENTRY _ZTI8S18973C8[];
extern  VTBL_ENTRY _ZTV8S18973C8[];
Class_Descriptor cd_S18973C8 = {  "S18973C8", // class name
  0,0,//no base classes
  &(vtc_S18973C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18973C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18973C8),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  S18973C2  : S18973C3 , S18973C8 {
  ::S18973C6 s18973c2f0[5];
  virtual void  v28(); // _ZN8S18973C23v28Ev
  virtual void  v29(); // _ZN8S18973C23v29Ev
  ~S18973C2(); // tgen
  S18973C2(); // tgen
};
//SIG(-1 S18973C2) C1{ BC2{ BC3{ BC4{ BC5{ v3 v4 v5 v6 v7 Fi} VBC6{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v20 v21} BC5 v22 v23 Fl} BC7{ v24 v25} v1 v2 FC5[5]}


void  S18973C2 ::v28(){vfunc_called(this, "_ZN8S18973C23v28Ev");}
void  S18973C2 ::v29(){vfunc_called(this, "_ZN8S18973C23v29Ev");}
S18973C2 ::~S18973C2(){ note_dtor("S18973C2", this);} // tgen
S18973C2 ::S18973C2(){ note_ctor("S18973C2", this);} // tgen

static void Test_S18973C2()
{
  extern Class_Descriptor cd_S18973C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,27)];
    init_test(&cd_S18973C2, buf);
    S18973C2 *dp, &lv = *(dp=new (buf) S18973C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,104), "sizeof(S18973C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18973C2)");
    check_base_class_offset(lv, (S18973C6*)(S18973C5*)(S18973C4*)(S18973C3*), 0, "S18973C2");
    check_base_class_offset(lv, (S18973C7*)(S18973C5*)(S18973C4*)(S18973C3*), ABISELECT(128,64), "S18973C2");
    check_base_class_offset(lv, (S18973C5*)(S18973C4*)(S18973C3*), 0, "S18973C2");
    check_base_class_offset(lv, (S18973C4*)(S18973C3*), 0, "S18973C2");
    /*is_ambiguous_... S18973C3::S18973C6 */ AMB_check_base_class_offset(lv, (S18973C6*)(S18973C3*), ABISELECT(16,8), "S18973C2");
    check_base_class_offset(lv, (S18973C3*), 0, "S18973C2");
    check_base_class_offset(lv, (S18973C8*), ABISELECT(40,20), "S18973C2");
    check_field_offset(lv, s18973c2f0, ABISELECT(48,24), "S18973C2.s18973c2f0");
    test_class_info(&lv, &cd_S18973C2);
    dp->~S18973C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18973C2(Test_S18973C2, "S18973C2", ABISELECT(192,104));

#else // __cplusplus

extern void _ZN8S18973C2C1Ev();
extern void _ZN8S18973C2D1Ev();
Name_Map name_map_S18973C2[] = {
  NSPAIR(_ZN8S18973C2C1Ev),
  NSPAIR(_ZN8S18973C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18973C6;
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
extern Class_Descriptor cd_S18973C7;
extern VTBL_ENTRY _ZTI8S18973C7[];
extern  VTBL_ENTRY _ZTV8S18973C7[];
extern Class_Descriptor cd_S18973C5;
extern VTBL_ENTRY _ZTI8S18973C5[];
extern  VTBL_ENTRY _ZTV8S18973C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C5[];
extern Class_Descriptor cd_S18973C4;
extern VTBL_ENTRY _ZTI8S18973C4[];
extern  VTBL_ENTRY _ZTV8S18973C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C4[];
extern Class_Descriptor cd_S18973C6;
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
extern Class_Descriptor cd_S18973C3;
extern VTBL_ENTRY _ZTI8S18973C3[];
extern  VTBL_ENTRY _ZTV8S18973C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C3[];
extern Class_Descriptor cd_S18973C8;
extern VTBL_ENTRY _ZTI8S18973C8[];
extern  VTBL_ENTRY _ZTV8S18973C8[];
static Base_Class bases_S18973C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18973C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18973C7,    ABISELECT(128,64), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //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_S18973C5,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18973C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18973C6,    ABISELECT(16,8), //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18973C8,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18973C2[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
extern void _ZN8S18973C33v24Ev();
extern void _ZN8S18973C33v25Ev();
extern void _ZN8S18973C23v28Ev();
extern void _ZN8S18973C23v29Ev();
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C83v26Ev();
extern void _ZN8S18973C83v27Ev();
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY vtc_S18973C2[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C2[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18973C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18973C23v29Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18973C2[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18973C2[0]),
  (VTBL_ENTRY)&_ZN8S18973C83v26Ev,
  (VTBL_ENTRY)&_ZN8S18973C83v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C2[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern VTBL_ENTRY _ZTV8S18973C2[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
extern void _ZN8S18973C33v24Ev();
extern void _ZN8S18973C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C3__8S18973C2[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C3[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v25Ev,
};
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C48S18973C3__8S18973C2[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C4[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
};
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C58S18973C48S18973C3__8S18973C2[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C58S18973C48S18973C3__8S18973C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C48S18973C3__8S18973C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C4[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C3__8S18973C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C3[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
static  VTT_ENTRY vtt_S18973C2[] = {
  {&(_ZTV8S18973C2[3]),  3,46},
  {&(_tg__ZTV8S18973C3__8S18973C2[3]),  3,17},
  {&(_tg__ZTV8S18973C48S18973C3__8S18973C2[3]),  3,15},
  {&(_tg__ZTV8S18973C58S18973C48S18973C3__8S18973C2[3]),  3,13},
  {&(_tg__ZTV8S18973C7__8S18973C58S18973C48S18973C3__8S18973C2[9]),  9,16},
  {&(_tg__ZTV8S18973C7__8S18973C48S18973C3__8S18973C2[9]),  9,16},
  {&(_tg__ZTV8S18973C7__8S18973C3__8S18973C2[9]),  9,16},
  {&(_ZTV8S18973C2[39]),  39,46},
};
extern VTBL_ENTRY _ZTI8S18973C2[];
extern  VTBL_ENTRY _ZTV8S18973C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C2[];
Class_Descriptor cd_S18973C2 = {  "S18973C2", // class name
  bases_S18973C2, 7,
  &(vtc_S18973C2[0]), // expected_vtbl_contents
  &(vtt_S18973C2[0]), // expected_vtt_contents
  ABISELECT(192,104), // object size
  NSPAIRA(_ZTI8S18973C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18973C2),46, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18973C2),8, //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  S18973C9  : virtual S18973C7 {
  virtual void  v30(); // _ZN8S18973C93v30Ev
  virtual void  v31(); // _ZN8S18973C93v31Ev
  virtual void  v32(); // _ZN8S18973C93v32Ev
  ~S18973C9(); // tgen
  S18973C9(); // tgen
};
//SIG(-1 S18973C9) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 FD[3]} v1 v2 v3}


void  S18973C9 ::v30(){vfunc_called(this, "_ZN8S18973C93v30Ev");}
void  S18973C9 ::v31(){vfunc_called(this, "_ZN8S18973C93v31Ev");}
void  S18973C9 ::v32(){vfunc_called(this, "_ZN8S18973C93v32Ev");}
S18973C9 ::~S18973C9(){ note_dtor("S18973C9", this);} // tgen
S18973C9 ::S18973C9(){ note_ctor("S18973C9", this);} // tgen

static void Test_S18973C9()
{
  extern Class_Descriptor cd_S18973C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S18973C9, buf);
    S18973C9 *dp, &lv = *(dp=new (buf) S18973C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S18973C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18973C9)");
    check_base_class_offset(lv, (S18973C7*), ABISELECT(16,4), "S18973C9");
    test_class_info(&lv, &cd_S18973C9);
    dp->~S18973C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18973C9(Test_S18973C9, "S18973C9", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S18973C9C1Ev();
extern void _ZN8S18973C9D1Ev();
Name_Map name_map_S18973C9[] = {
  NSPAIR(_ZN8S18973C9C1Ev),
  NSPAIR(_ZN8S18973C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18973C7;
extern VTBL_ENTRY _ZTI8S18973C7[];
extern  VTBL_ENTRY _ZTV8S18973C7[];
static Base_Class bases_S18973C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18973C7,    ABISELECT(16,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S18973C9[];
extern void _ZN8S18973C93v30Ev();
extern void _ZN8S18973C93v31Ev();
extern void _ZN8S18973C93v32Ev();
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY vtc_S18973C9[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C9[0]),
  (VTBL_ENTRY)&_ZN8S18973C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18973C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18973C93v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18973C9[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern VTBL_ENTRY _ZTV8S18973C9[];
static  VTT_ENTRY vtt_S18973C9[] = {
  {&(_ZTV8S18973C9[3]),  3,22},
  {&(_ZTV8S18973C9[15]),  15,22},
};
extern VTBL_ENTRY _ZTI8S18973C9[];
extern  VTBL_ENTRY _ZTV8S18973C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C9[];
Class_Descriptor cd_S18973C9 = {  "S18973C9", // class name
  bases_S18973C9, 1,
  &(vtc_S18973C9[0]), // expected_vtbl_contents
  &(vtt_S18973C9[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S18973C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18973C9),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18973C9),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  S18973C1  : virtual S18973C2 {
  ::S18973C9 s18973c1f0;
  __tsi64 s18973c1f1;
  virtual void  v1(); // _ZN8S18973C12v1Ev
  virtual void  v2(); // _ZN8S18973C12v2Ev
  virtual void  v3(); // _ZN8S18973C12v3Ev
  virtual void  v4(); // _ZN8S18973C12v4Ev
  ~S18973C1(); // tgen
  S18973C1(); // tgen
};
//SIG(1 S18973C1) C1{ VBC2{ BC3{ BC4{ BC5{ BC6{ v5 v6 v7 v8 v9 Fi} VBC7{ v10 v11 v12 v13 v14 v15 v16 FD[3]} v17 v18 v19 v20 v21} v22 v23} BC6 v24 v25 Fl} BC8{ v26 v27} v28 v29 FC6[5]} v1 v2 v3 v4 FC9{ VBC7 v30 v31 v32} FL}


void  S18973C1 ::v1(){vfunc_called(this, "_ZN8S18973C12v1Ev");}
void  S18973C1 ::v2(){vfunc_called(this, "_ZN8S18973C12v2Ev");}
void  S18973C1 ::v3(){vfunc_called(this, "_ZN8S18973C12v3Ev");}
void  S18973C1 ::v4(){vfunc_called(this, "_ZN8S18973C12v4Ev");}
S18973C1 ::~S18973C1(){ note_dtor("S18973C1", this);} // tgen
S18973C1 ::S18973C1(){ note_ctor("S18973C1", this);} // tgen

static void Test_S18973C1()
{
  extern Class_Descriptor cd_S18973C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,41)];
    init_test(&cd_S18973C1, buf);
    S18973C1 *dp, &lv = *(dp=new (buf) S18973C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,160), "sizeof(S18973C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18973C1)");
    check_base_class_offset(lv, (S18973C6*)(S18973C5*)(S18973C4*)(S18973C3*)(S18973C2*), ABISELECT(104,56), "S18973C1");
    check_base_class_offset(lv, (S18973C7*)(S18973C5*)(S18973C4*)(S18973C3*)(S18973C2*), ABISELECT(240,120), "S18973C1");
    check_base_class_offset(lv, (S18973C5*)(S18973C4*)(S18973C3*)(S18973C2*), ABISELECT(104,56), "S18973C1");
    check_base_class_offset(lv, (S18973C4*)(S18973C3*)(S18973C2*), ABISELECT(104,56), "S18973C1");
    /*is_ambiguous_... S18973C3::S18973C6 */ AMB_check_base_class_offset(lv, (S18973C6*)(S18973C3*)(S18973C2*), ABISELECT(120,64), "S18973C1");
    check_base_class_offset(lv, (S18973C3*)(S18973C2*), ABISELECT(104,56), "S18973C1");
    check_base_class_offset(lv, (S18973C8*)(S18973C2*), ABISELECT(144,76), "S18973C1");
    check_base_class_offset(lv, (S18973C2*), ABISELECT(104,56), "S18973C1");
    check_field_offset(lv, s18973c1f0, ABISELECT(16,4), "S18973C1.s18973c1f0");
    check_field_offset(lv, s18973c1f1, ABISELECT(96,48), "S18973C1.s18973c1f1");
    test_class_info(&lv, &cd_S18973C1);
    dp->~S18973C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18973C1(Test_S18973C1, "S18973C1", ABISELECT(304,160));

#else // __cplusplus

extern void _ZN8S18973C1C1Ev();
extern void _ZN8S18973C1D1Ev();
Name_Map name_map_S18973C1[] = {
  NSPAIR(_ZN8S18973C1C1Ev),
  NSPAIR(_ZN8S18973C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18973C6;
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
extern Class_Descriptor cd_S18973C7;
extern VTBL_ENTRY _ZTI8S18973C7[];
extern  VTBL_ENTRY _ZTV8S18973C7[];
extern Class_Descriptor cd_S18973C5;
extern VTBL_ENTRY _ZTI8S18973C5[];
extern  VTBL_ENTRY _ZTV8S18973C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C5[];
extern Class_Descriptor cd_S18973C4;
extern VTBL_ENTRY _ZTI8S18973C4[];
extern  VTBL_ENTRY _ZTV8S18973C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C4[];
extern Class_Descriptor cd_S18973C6;
extern VTBL_ENTRY _ZTI8S18973C6[];
extern  VTBL_ENTRY _ZTV8S18973C6[];
extern Class_Descriptor cd_S18973C3;
extern VTBL_ENTRY _ZTI8S18973C3[];
extern  VTBL_ENTRY _ZTV8S18973C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C3[];
extern Class_Descriptor cd_S18973C8;
extern VTBL_ENTRY _ZTI8S18973C8[];
extern  VTBL_ENTRY _ZTV8S18973C8[];
extern Class_Descriptor cd_S18973C2;
extern VTBL_ENTRY _ZTI8S18973C2[];
extern  VTBL_ENTRY _ZTV8S18973C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C2[];
static Base_Class bases_S18973C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18973C6,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18973C7,    ABISELECT(240,120), //bcp->offset
    56, //bcp->virtual_function_table_offset
    9, //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_S18973C5,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18973C4,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18973C6,    ABISELECT(120,64), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18973C3,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S18973C8,    ABISELECT(144,76), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S18973C2,    ABISELECT(104,56), //bcp->offset
    8, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18973C1[];
extern void _ZN8S18973C12v1Ev();
extern void _ZN8S18973C12v2Ev();
extern void _ZN8S18973C12v3Ev();
extern void _ZN8S18973C12v4Ev();
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
extern void _ZN8S18973C33v24Ev();
extern void _ZN8S18973C33v25Ev();
extern void _ZN8S18973C23v28Ev();
extern void _ZN8S18973C23v29Ev();
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C83v26Ev();
extern void _ZN8S18973C83v27Ev();
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY vtc_S18973C1[] = {
  ABISELECT(240,120),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C1[0]),
  (VTBL_ENTRY)&_ZN8S18973C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18973C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18973C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18973C12v4Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(136,64),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S18973C1[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18973C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18973C23v29Ev,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C1[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI8S18973C1[0]),
  (VTBL_ENTRY)&_ZN8S18973C83v26Ev,
  (VTBL_ENTRY)&_ZN8S18973C83v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S18973C1[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern VTBL_ENTRY _ZTV8S18973C1[];
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
extern void _ZN8S18973C33v24Ev();
extern void _ZN8S18973C33v25Ev();
extern void _ZN8S18973C23v28Ev();
extern void _ZN8S18973C23v29Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C2__8S18973C1[] = {
  ABISELECT(136,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C2[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18973C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18973C23v29Ev,
};
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
extern void _ZN8S18973C33v24Ev();
extern void _ZN8S18973C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C38S18973C2__8S18973C1[] = {
  ABISELECT(136,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C3[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18973C33v25Ev,
};
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
extern void _ZN8S18973C43v22Ev();
extern void _ZN8S18973C43v23Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C48S18973C38S18973C2__8S18973C1[] = {
  ABISELECT(136,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C4[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18973C43v23Ev,
};
extern void _ZN8S18973C62v5Ev();
extern void _ZN8S18973C62v6Ev();
extern void _ZN8S18973C62v7Ev();
extern void _ZN8S18973C62v8Ev();
extern void _ZN8S18973C62v9Ev();
extern void _ZN8S18973C53v17Ev();
extern void _ZN8S18973C53v18Ev();
extern void _ZN8S18973C53v19Ev();
extern void _ZN8S18973C53v20Ev();
extern void _ZN8S18973C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C58S18973C48S18973C38S18973C2__8S18973C1[] = {
  ABISELECT(136,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v7Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18973C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v19Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18973C53v21Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C58S18973C48S18973C38S18973C2__8S18973C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C5[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C48S18973C38S18973C2__8S18973C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C4[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C38S18973C2__8S18973C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C3[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
extern void _ZN8S18973C73v10Ev();
extern void _ZN8S18973C73v11Ev();
extern void _ZN8S18973C73v12Ev();
extern void _ZN8S18973C73v13Ev();
extern void _ZN8S18973C73v14Ev();
extern void _ZN8S18973C73v15Ev();
extern void _ZN8S18973C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S18973C7__8S18973C2__8S18973C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S18973C2[0]),
  (VTBL_ENTRY)&_ZN8S18973C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v13Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v14Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v15Ev,
  (VTBL_ENTRY)&_ZN8S18973C73v16Ev,
};
static  VTT_ENTRY vtt_S18973C1[] = {
  {&(_ZTV8S18973C1[4]),  4,72},
  {&(_ZTV8S18973C1[29]),  29,72},
  {&(_ZTV8S18973C1[65]),  65,72},
  {&(_ZTV8S18973C1[47]),  47,72},
  {&(_ZTV8S18973C1[54]),  54,72},
  {&(_tg__ZTV8S18973C2__8S18973C1[3]),  3,19},
  {&(_tg__ZTV8S18973C38S18973C2__8S18973C1[3]),  3,17},
  {&(_tg__ZTV8S18973C48S18973C38S18973C2__8S18973C1[3]),  3,15},
  {&(_tg__ZTV8S18973C58S18973C48S18973C38S18973C2__8S18973C1[3]),  3,13},
  {&(_tg__ZTV8S18973C7__8S18973C58S18973C48S18973C38S18973C2__8S18973C1[9]),  9,16},
  {&(_tg__ZTV8S18973C7__8S18973C48S18973C38S18973C2__8S18973C1[9]),  9,16},
  {&(_tg__ZTV8S18973C7__8S18973C38S18973C2__8S18973C1[9]),  9,16},
  {&(_tg__ZTV8S18973C7__8S18973C2__8S18973C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S18973C1[];
extern  VTBL_ENTRY _ZTV8S18973C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18973C1[];
Class_Descriptor cd_S18973C1 = {  "S18973C1", // class name
  bases_S18973C1, 8,
  &(vtc_S18973C1[0]), // expected_vtbl_contents
  &(vtt_S18973C1[0]), // expected_vtt_contents
  ABISELECT(304,160), // object size
  NSPAIRA(_ZTI8S18973C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18973C1),72, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18973C1),13, //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  S15399C4_nt  {
  char s15399c4f0;
  char s15399c4f1[15];
  void  mf15399c4(); // _ZN11S15399C4_nt9mf15399c4Ev
};
//SIG(-1 S15399C4_nt) C1{ m Fc[16]}


void  S15399C4_nt ::mf15399c4(){}

//skip512 S15399C4_nt

#else // __cplusplus

Class_Descriptor cd_S15399C4_nt = {  "S15399C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15399C3_nt  {
  ::S15399C4_nt s15399c3f0;
  ::S15399C4_nt s15399c3f1;
  ::S15399C4_nt s15399c3f2;
  ::S15399C4_nt s15399c3f3;
  void  mf15399c3(); // _ZN11S15399C3_nt9mf15399c3Ev
};
//SIG(-1 S15399C3_nt) C1{ m FC2{ m Fc[16]} FC2 FC2 FC2}


void  S15399C3_nt ::mf15399c3(){}

//skip512 S15399C3_nt

#else // __cplusplus

Class_Descriptor cd_S15399C3_nt = {  "S15399C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  64, // 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  S15399C2_nt  : S15399C3_nt {
};
//SIG(-1 S15399C2_nt) C1{ BC2{ m FC3{ m Fc[16]} FC3 FC3 FC3}}



//skip512 S15399C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S15399C3_nt;
static Base_Class bases_S15399C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15399C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15399C10_nt  {
};
//SIG(-1 S15399C10_nt) C1{}



//skip512 S15399C10_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S15399C9_nt  : S15399C10_nt {
};
//SIG(-1 S15399C9_nt) C1{ BC2{}}



//skip512 S15399C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S15399C10_nt;
static Base_Class bases_S15399C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15399C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15399C7_nt  : S468C20_nt {
  ::S15399C9_nt s15399c7f0;
};
//SIG(-1 S15399C7_nt) C1{ BC2{} FC3{ BC4{}}}



//skip512 S15399C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S468C20_nt;
static Base_Class bases_S15399C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C20_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S15399C7_nt = {  "S15399C7_nt", // class name
  bases_S15399C7_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15399C6_nt  : S15399C7_nt {
  void *s15399c6f0[3];
};
//SIG(-1 S15399C6_nt) C1{ BC2{ BC3{} FC4{ BC5{}}} Fp[3]}



//skip512 S15399C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S468C20_nt;
extern Class_Descriptor cd_S15399C7_nt;
static Base_Class bases_S15399C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S468C20_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S15399C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15399C12_nt  : S15399C4_nt {
};
//SIG(-1 S15399C12_nt) C1{ BC2{ m Fc[16]}}



//skip512 S15399C12_nt

#else // __cplusplus

extern Class_Descriptor cd_S15399C4_nt;
static Base_Class bases_S15399C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15399C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15399C1  {
  ::S15399C2_nt s15399c1f0;
  void *s15399c1f1[4];
  int s15399c1f2;
  void *s15399c1f3[10];
  ::S21777C11_nt s15399c1f4;
  ::S15399C6_nt s15399c1f5;
  int s15399c1f6;
  void *s15399c1f7[2];
  int s15399c1f8;
  void *s15399c1f9;
  ::S15944C14_nt s15399c1f10;
  void *s15399c1f11[2];
  char s15399c1f12[5];
  int s15399c1f13;
  ::S15399C2_nt s15399c1f14;
  int s15399c1f15[2];
  ::S15399C12_nt s15399c1f16;
  int s15399c1f17[8];
  char s15399c1f18;
  int s15399c1f19[2];
  char s15399c1f20[3];
  void  mf15399c1(); // _ZN8S15399C19mf15399c1Ev
};
//SIG(1 S15399C1) C1{ m FC2{ BC3{ m FC4{ m Fc[16]} FC4 FC4 FC4}} Fp[4] Fi Fp[10] FC5{ m Fp} FC6{ BC7{ BC8{} FC9{ BC10{}}} Fp[3]} Fi Fp[2] Fi Fp FC11{ m Fp} Fp[2] Fc[5] Fi FC2 Fi[2] FC12{ BC4} Fi[8] Fc Fi[2] Fc[3]}


void  S15399C1 ::mf15399c1(){}

static void Test_S15399C1()
{
  {
    init_simple_test("S15399C1");
    S15399C1 lv;
    check2(sizeof(lv), ABISELECT(440,324), "sizeof(S15399C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15399C1)");
    check_field_offset(lv, s15399c1f0, 0, "S15399C1.s15399c1f0");
    check_field_offset(lv, s15399c1f1, 64, "S15399C1.s15399c1f1");
    check_field_offset(lv, s15399c1f2, ABISELECT(96,80), "S15399C1.s15399c1f2");
    check_field_offset(lv, s15399c1f3, ABISELECT(104,84), "S15399C1.s15399c1f3");
    check_field_offset(lv, s15399c1f4, ABISELECT(184,124), "S15399C1.s15399c1f4");
    check_field_offset(lv, s15399c1f5, ABISELECT(192,128), "S15399C1.s15399c1f5");
    check_field_offset(lv, s15399c1f6, ABISELECT(224,144), "S15399C1.s15399c1f6");
    check_field_offset(lv, s15399c1f7, ABISELECT(232,148), "S15399C1.s15399c1f7");
    check_field_offset(lv, s15399c1f8, ABISELECT(248,156), "S15399C1.s15399c1f8");
    check_field_offset(lv, s15399c1f9, ABISELECT(256,160), "S15399C1.s15399c1f9");
    check_field_offset(lv, s15399c1f10, ABISELECT(264,164), "S15399C1.s15399c1f10");
    check_field_offset(lv, s15399c1f11, ABISELECT(272,168), "S15399C1.s15399c1f11");
    check_field_offset(lv, s15399c1f12, ABISELECT(288,176), "S15399C1.s15399c1f12");
    check_field_offset(lv, s15399c1f13, ABISELECT(296,184), "S15399C1.s15399c1f13");
    check_field_offset(lv, s15399c1f14, ABISELECT(300,188), "S15399C1.s15399c1f14");
    check_field_offset(lv, s15399c1f15, ABISELECT(364,252), "S15399C1.s15399c1f15");
    check_field_offset(lv, s15399c1f16, ABISELECT(372,260), "S15399C1.s15399c1f16");
    check_field_offset(lv, s15399c1f17, ABISELECT(388,276), "S15399C1.s15399c1f17");
    check_field_offset(lv, s15399c1f18, ABISELECT(420,308), "S15399C1.s15399c1f18");
    check_field_offset(lv, s15399c1f19, ABISELECT(424,312), "S15399C1.s15399c1f19");
    check_field_offset(lv, s15399c1f20, ABISELECT(432,320), "S15399C1.s15399c1f20");
  }
}
static Arrange_To_Call_Me vS15399C1(Test_S15399C1, "S15399C1", ABISELECT(440,324));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18970C6  {
  int s18970c6f0;
  virtual void  v2(); // _ZN8S18970C62v2Ev
  virtual void  v3(); // _ZN8S18970C62v3Ev
  virtual void  v4(); // _ZN8S18970C62v4Ev
  virtual void  v5(); // _ZN8S18970C62v5Ev
  virtual void  v6(); // _ZN8S18970C62v6Ev
  ~S18970C6(); // tgen
  S18970C6(); // tgen
};
//SIG(-1 S18970C6) C1{ v1 v2 v3 v4 v5 Fi}


void  S18970C6 ::v2(){vfunc_called(this, "_ZN8S18970C62v2Ev");}
void  S18970C6 ::v3(){vfunc_called(this, "_ZN8S18970C62v3Ev");}
void  S18970C6 ::v4(){vfunc_called(this, "_ZN8S18970C62v4Ev");}
void  S18970C6 ::v5(){vfunc_called(this, "_ZN8S18970C62v5Ev");}
void  S18970C6 ::v6(){vfunc_called(this, "_ZN8S18970C62v6Ev");}
S18970C6 ::~S18970C6(){ note_dtor("S18970C6", this);} // tgen
S18970C6 ::S18970C6(){ note_ctor("S18970C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18970C6C1Ev();
extern void _ZN8S18970C6D1Ev();
Name_Map name_map_S18970C6[] = {
  NSPAIR(_ZN8S18970C6C1Ev),
  NSPAIR(_ZN8S18970C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18970C6[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
static  VTBL_ENTRY vtc_S18970C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C6[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
};
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
Class_Descriptor cd_S18970C6 = {  "S18970C6", // class name
  0,0,//no base classes
  &(vtc_S18970C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18970C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18970C6),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18970C7  {
  long double s18970c7f0[3];
  virtual void  v7(); // _ZN8S18970C72v7Ev
  virtual void  v8(); // _ZN8S18970C72v8Ev
  virtual void  v9(); // _ZN8S18970C72v9Ev
  virtual void  v10(); // _ZN8S18970C73v10Ev
  virtual void  v11(); // _ZN8S18970C73v11Ev
  virtual void  v12(); // _ZN8S18970C73v12Ev
  virtual void  v13(); // _ZN8S18970C73v13Ev
  ~S18970C7(); // tgen
  S18970C7(); // tgen
};
//SIG(-1 S18970C7) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S18970C7 ::v7(){vfunc_called(this, "_ZN8S18970C72v7Ev");}
void  S18970C7 ::v8(){vfunc_called(this, "_ZN8S18970C72v8Ev");}
void  S18970C7 ::v9(){vfunc_called(this, "_ZN8S18970C72v9Ev");}
void  S18970C7 ::v10(){vfunc_called(this, "_ZN8S18970C73v10Ev");}
void  S18970C7 ::v11(){vfunc_called(this, "_ZN8S18970C73v11Ev");}
void  S18970C7 ::v12(){vfunc_called(this, "_ZN8S18970C73v12Ev");}
void  S18970C7 ::v13(){vfunc_called(this, "_ZN8S18970C73v13Ev");}
S18970C7 ::~S18970C7(){ note_dtor("S18970C7", this);} // tgen
S18970C7 ::S18970C7(){ note_ctor("S18970C7", this);} // tgen

static void Test_S18970C7()
{
  extern Class_Descriptor cd_S18970C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S18970C7, buf);
    S18970C7 *dp, &lv = *(dp=new (buf) S18970C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S18970C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18970C7)");
    check_field_offset(lv, s18970c7f0, ABISELECT(16,4), "S18970C7.s18970c7f0");
    test_class_info(&lv, &cd_S18970C7);
    dp->~S18970C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18970C7(Test_S18970C7, "S18970C7", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S18970C7C1Ev();
extern void _ZN8S18970C7D1Ev();
Name_Map name_map_S18970C7[] = {
  NSPAIR(_ZN8S18970C7C1Ev),
  NSPAIR(_ZN8S18970C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18970C7[];
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY vtc_S18970C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C7[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern VTBL_ENTRY _ZTI8S18970C7[];
extern  VTBL_ENTRY _ZTV8S18970C7[];
Class_Descriptor cd_S18970C7 = {  "S18970C7", // class name
  0,0,//no base classes
  &(vtc_S18970C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S18970C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18970C7),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18970C5  : S18970C6 , virtual S18970C7 {
  virtual void  v14(); // _ZN8S18970C53v14Ev
  virtual void  v15(); // _ZN8S18970C53v15Ev
  virtual void  v16(); // _ZN8S18970C53v16Ev
  virtual void  v17(); // _ZN8S18970C53v17Ev
  virtual void  v18(); // _ZN8S18970C53v18Ev
  ~S18970C5(); // tgen
  S18970C5(); // tgen
};
//SIG(-1 S18970C5) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S18970C5 ::v14(){vfunc_called(this, "_ZN8S18970C53v14Ev");}
void  S18970C5 ::v15(){vfunc_called(this, "_ZN8S18970C53v15Ev");}
void  S18970C5 ::v16(){vfunc_called(this, "_ZN8S18970C53v16Ev");}
void  S18970C5 ::v17(){vfunc_called(this, "_ZN8S18970C53v17Ev");}
void  S18970C5 ::v18(){vfunc_called(this, "_ZN8S18970C53v18Ev");}
S18970C5 ::~S18970C5(){ note_dtor("S18970C5", this);} // tgen
S18970C5 ::S18970C5(){ note_ctor("S18970C5", this);} // tgen

static void Test_S18970C5()
{
  extern Class_Descriptor cd_S18970C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S18970C5, buf);
    S18970C5 *dp, &lv = *(dp=new (buf) S18970C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S18970C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18970C5)");
    check_base_class_offset(lv, (S18970C6*), 0, "S18970C5");
    check_base_class_offset(lv, (S18970C7*), ABISELECT(16,8), "S18970C5");
    test_class_info(&lv, &cd_S18970C5);
    dp->~S18970C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18970C5(Test_S18970C5, "S18970C5", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S18970C5C1Ev();
extern void _ZN8S18970C5D1Ev();
Name_Map name_map_S18970C5[] = {
  NSPAIR(_ZN8S18970C5C1Ev),
  NSPAIR(_ZN8S18970C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18970C6;
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
extern Class_Descriptor cd_S18970C7;
extern VTBL_ENTRY _ZTI8S18970C7[];
extern  VTBL_ENTRY _ZTV8S18970C7[];
static Base_Class bases_S18970C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S18970C7,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S18970C5[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY vtc_S18970C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern VTBL_ENTRY _ZTV8S18970C5[];
static  VTT_ENTRY vtt_S18970C5[] = {
  {&(_ZTV8S18970C5[3]),  3,29},
  {&(_ZTV8S18970C5[22]),  22,29},
};
extern VTBL_ENTRY _ZTI8S18970C5[];
extern  VTBL_ENTRY _ZTV8S18970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C5[];
Class_Descriptor cd_S18970C5 = {  "S18970C5", // class name
  bases_S18970C5, 2,
  &(vtc_S18970C5[0]), // expected_vtbl_contents
  &(vtt_S18970C5[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S18970C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18970C5),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18970C5),2, //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  S18970C4  : S18970C5 {
  virtual void  v19(); // _ZN8S18970C43v19Ev
  virtual void  v20(); // _ZN8S18970C43v20Ev
  ~S18970C4(); // tgen
  S18970C4(); // tgen
};
//SIG(-1 S18970C4) C1{ BC2{ BC3{ v3 v4 v5 v6 v7 Fi} VBC4{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v1 v2}


void  S18970C4 ::v19(){vfunc_called(this, "_ZN8S18970C43v19Ev");}
void  S18970C4 ::v20(){vfunc_called(this, "_ZN8S18970C43v20Ev");}
S18970C4 ::~S18970C4(){ note_dtor("S18970C4", this);} // tgen
S18970C4 ::S18970C4(){ note_ctor("S18970C4", this);} // tgen

static void Test_S18970C4()
{
  extern Class_Descriptor cd_S18970C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S18970C4, buf);
    S18970C4 *dp, &lv = *(dp=new (buf) S18970C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S18970C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18970C4)");
    check_base_class_offset(lv, (S18970C6*)(S18970C5*), 0, "S18970C4");
    check_base_class_offset(lv, (S18970C7*)(S18970C5*), ABISELECT(16,8), "S18970C4");
    check_base_class_offset(lv, (S18970C5*), 0, "S18970C4");
    test_class_info(&lv, &cd_S18970C4);
    dp->~S18970C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18970C4(Test_S18970C4, "S18970C4", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S18970C4C1Ev();
extern void _ZN8S18970C4D1Ev();
Name_Map name_map_S18970C4[] = {
  NSPAIR(_ZN8S18970C4C1Ev),
  NSPAIR(_ZN8S18970C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18970C6;
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
extern Class_Descriptor cd_S18970C7;
extern VTBL_ENTRY _ZTI8S18970C7[];
extern  VTBL_ENTRY _ZTV8S18970C7[];
extern Class_Descriptor cd_S18970C5;
extern VTBL_ENTRY _ZTI8S18970C5[];
extern  VTBL_ENTRY _ZTV8S18970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C5[];
static Base_Class bases_S18970C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18970C7,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S18970C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18970C4[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY vtc_S18970C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C4[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18970C4[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern VTBL_ENTRY _ZTV8S18970C4[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C5__8S18970C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C5__8S18970C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
static  VTT_ENTRY vtt_S18970C4[] = {
  {&(_ZTV8S18970C4[3]),  3,31},
  {&(_tg__ZTV8S18970C5__8S18970C4[3]),  3,13},
  {&(_tg__ZTV8S18970C7__8S18970C5__8S18970C4[9]),  9,16},
  {&(_ZTV8S18970C4[24]),  24,31},
};
extern VTBL_ENTRY _ZTI8S18970C4[];
extern  VTBL_ENTRY _ZTV8S18970C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C4[];
Class_Descriptor cd_S18970C4 = {  "S18970C4", // class name
  bases_S18970C4, 3,
  &(vtc_S18970C4[0]), // expected_vtbl_contents
  &(vtt_S18970C4[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S18970C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18970C4),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18970C4),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18970C3  : S18970C4 , S18970C6 {
  long s18970c3f0;
  virtual void  v21(); // _ZN8S18970C33v21Ev
  virtual void  v22(); // _ZN8S18970C33v22Ev
  ~S18970C3(); // tgen
  S18970C3(); // tgen
};
//SIG(-1 S18970C3) C1{ BC2{ BC3{ BC4{ v3 v4 v5 v6 v7 Fi} VBC5{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v20 v21} BC4 v1 v2 Fl}


void  S18970C3 ::v21(){vfunc_called(this, "_ZN8S18970C33v21Ev");}
void  S18970C3 ::v22(){vfunc_called(this, "_ZN8S18970C33v22Ev");}
S18970C3 ::~S18970C3(){ note_dtor("S18970C3", this);} // tgen
S18970C3 ::S18970C3(){ note_ctor("S18970C3", this);} // tgen

static void Test_S18970C3()
{
  extern Class_Descriptor cd_S18970C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,16)];
    init_test(&cd_S18970C3, buf);
    S18970C3 *dp, &lv = *(dp=new (buf) S18970C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S18970C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18970C3)");
    check_base_class_offset(lv, (S18970C6*)(S18970C5*)(S18970C4*), 0, "S18970C3");
    check_base_class_offset(lv, (S18970C7*)(S18970C5*)(S18970C4*), ABISELECT(48,20), "S18970C3");
    check_base_class_offset(lv, (S18970C5*)(S18970C4*), 0, "S18970C3");
    check_base_class_offset(lv, (S18970C4*), 0, "S18970C3");
    /*is_ambiguous_... S18970C3::S18970C6 */ AMB_check_base_class_offset(lv, (S18970C6*), ABISELECT(16,8), "S18970C3");
    check_field_offset(lv, s18970c3f0, ABISELECT(32,16), "S18970C3.s18970c3f0");
    test_class_info(&lv, &cd_S18970C3);
    dp->~S18970C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18970C3(Test_S18970C3, "S18970C3", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN8S18970C3C1Ev();
extern void _ZN8S18970C3D1Ev();
Name_Map name_map_S18970C3[] = {
  NSPAIR(_ZN8S18970C3C1Ev),
  NSPAIR(_ZN8S18970C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18970C6;
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
extern Class_Descriptor cd_S18970C7;
extern VTBL_ENTRY _ZTI8S18970C7[];
extern  VTBL_ENTRY _ZTV8S18970C7[];
extern Class_Descriptor cd_S18970C5;
extern VTBL_ENTRY _ZTI8S18970C5[];
extern  VTBL_ENTRY _ZTV8S18970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C5[];
extern Class_Descriptor cd_S18970C4;
extern VTBL_ENTRY _ZTI8S18970C4[];
extern  VTBL_ENTRY _ZTV8S18970C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C4[];
extern Class_Descriptor cd_S18970C6;
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
static Base_Class bases_S18970C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18970C7,    ABISELECT(48,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //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_S18970C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18970C4,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18970C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18970C3[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
extern void _ZN8S18970C33v21Ev();
extern void _ZN8S18970C33v22Ev();
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY vtc_S18970C3[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C3[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v22Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18970C3[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S18970C3[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern VTBL_ENTRY _ZTV8S18970C3[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C4__8S18970C3[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C4[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
};
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C58S18970C4__8S18970C3[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C58S18970C4__8S18970C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C4__8S18970C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S18970C4[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
static  VTT_ENTRY vtt_S18970C3[] = {
  {&(_ZTV8S18970C3[3]),  3,40},
  {&(_tg__ZTV8S18970C4__8S18970C3[3]),  3,15},
  {&(_tg__ZTV8S18970C58S18970C4__8S18970C3[3]),  3,13},
  {&(_tg__ZTV8S18970C7__8S18970C58S18970C4__8S18970C3[9]),  9,16},
  {&(_tg__ZTV8S18970C7__8S18970C4__8S18970C3[9]),  9,16},
  {&(_ZTV8S18970C3[33]),  33,40},
};
extern VTBL_ENTRY _ZTI8S18970C3[];
extern  VTBL_ENTRY _ZTV8S18970C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C3[];
Class_Descriptor cd_S18970C3 = {  "S18970C3", // class name
  bases_S18970C3, 5,
  &(vtc_S18970C3[0]), // expected_vtbl_contents
  &(vtt_S18970C3[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S18970C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18970C3),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18970C3),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18970C8  {
  virtual void  v23(); // _ZN8S18970C83v23Ev
  virtual void  v24(); // _ZN8S18970C83v24Ev
  ~S18970C8(); // tgen
  S18970C8(); // tgen
};
//SIG(-1 S18970C8) C1{ v1 v2}


void  S18970C8 ::v23(){vfunc_called(this, "_ZN8S18970C83v23Ev");}
void  S18970C8 ::v24(){vfunc_called(this, "_ZN8S18970C83v24Ev");}
S18970C8 ::~S18970C8(){ note_dtor("S18970C8", this);} // tgen
S18970C8 ::S18970C8(){ note_ctor("S18970C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18970C8C1Ev();
extern void _ZN8S18970C8D1Ev();
Name_Map name_map_S18970C8[] = {
  NSPAIR(_ZN8S18970C8C1Ev),
  NSPAIR(_ZN8S18970C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18970C8[];
extern void _ZN8S18970C83v23Ev();
extern void _ZN8S18970C83v24Ev();
static  VTBL_ENTRY vtc_S18970C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C8[0]),
  (VTBL_ENTRY)&_ZN8S18970C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18970C83v24Ev,
};
extern VTBL_ENTRY _ZTI8S18970C8[];
extern  VTBL_ENTRY _ZTV8S18970C8[];
Class_Descriptor cd_S18970C8 = {  "S18970C8", // class name
  0,0,//no base classes
  &(vtc_S18970C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18970C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18970C8),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  S18970C2  : S18970C3 , S18970C8 {
  ::S18970C6 s18970c2f0[5];
  virtual void  v25(); // _ZN8S18970C23v25Ev
  virtual void  v26(); // _ZN8S18970C23v26Ev
  ~S18970C2(); // tgen
  S18970C2(); // tgen
};
//SIG(-1 S18970C2) C1{ BC2{ BC3{ BC4{ BC5{ v3 v4 v5 v6 v7 Fi} VBC6{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v20 v21} BC5 v22 v23 Fl} BC7{ v24 v25} v1 v2 FC5[5]}


void  S18970C2 ::v25(){vfunc_called(this, "_ZN8S18970C23v25Ev");}
void  S18970C2 ::v26(){vfunc_called(this, "_ZN8S18970C23v26Ev");}
S18970C2 ::~S18970C2(){ note_dtor("S18970C2", this);} // tgen
S18970C2 ::S18970C2(){ note_ctor("S18970C2", this);} // tgen

static void Test_S18970C2()
{
  extern Class_Descriptor cd_S18970C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,27)];
    init_test(&cd_S18970C2, buf);
    S18970C2 *dp, &lv = *(dp=new (buf) S18970C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,104), "sizeof(S18970C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18970C2)");
    check_base_class_offset(lv, (S18970C6*)(S18970C5*)(S18970C4*)(S18970C3*), 0, "S18970C2");
    check_base_class_offset(lv, (S18970C7*)(S18970C5*)(S18970C4*)(S18970C3*), ABISELECT(128,64), "S18970C2");
    check_base_class_offset(lv, (S18970C5*)(S18970C4*)(S18970C3*), 0, "S18970C2");
    check_base_class_offset(lv, (S18970C4*)(S18970C3*), 0, "S18970C2");
    /*is_ambiguous_... S18970C3::S18970C6 */ AMB_check_base_class_offset(lv, (S18970C6*)(S18970C3*), ABISELECT(16,8), "S18970C2");
    check_base_class_offset(lv, (S18970C3*), 0, "S18970C2");
    check_base_class_offset(lv, (S18970C8*), ABISELECT(40,20), "S18970C2");
    check_field_offset(lv, s18970c2f0, ABISELECT(48,24), "S18970C2.s18970c2f0");
    test_class_info(&lv, &cd_S18970C2);
    dp->~S18970C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18970C2(Test_S18970C2, "S18970C2", ABISELECT(192,104));

#else // __cplusplus

extern void _ZN8S18970C2C1Ev();
extern void _ZN8S18970C2D1Ev();
Name_Map name_map_S18970C2[] = {
  NSPAIR(_ZN8S18970C2C1Ev),
  NSPAIR(_ZN8S18970C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18970C6;
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
extern Class_Descriptor cd_S18970C7;
extern VTBL_ENTRY _ZTI8S18970C7[];
extern  VTBL_ENTRY _ZTV8S18970C7[];
extern Class_Descriptor cd_S18970C5;
extern VTBL_ENTRY _ZTI8S18970C5[];
extern  VTBL_ENTRY _ZTV8S18970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C5[];
extern Class_Descriptor cd_S18970C4;
extern VTBL_ENTRY _ZTI8S18970C4[];
extern  VTBL_ENTRY _ZTV8S18970C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C4[];
extern Class_Descriptor cd_S18970C6;
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
extern Class_Descriptor cd_S18970C3;
extern VTBL_ENTRY _ZTI8S18970C3[];
extern  VTBL_ENTRY _ZTV8S18970C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C3[];
extern Class_Descriptor cd_S18970C8;
extern VTBL_ENTRY _ZTI8S18970C8[];
extern  VTBL_ENTRY _ZTV8S18970C8[];
static Base_Class bases_S18970C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18970C7,    ABISELECT(128,64), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //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_S18970C5,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18970C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18970C6,    ABISELECT(16,8), //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18970C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18970C8,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18970C2[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
extern void _ZN8S18970C33v21Ev();
extern void _ZN8S18970C33v22Ev();
extern void _ZN8S18970C23v25Ev();
extern void _ZN8S18970C23v26Ev();
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C83v23Ev();
extern void _ZN8S18970C83v24Ev();
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY vtc_S18970C2[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C2[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18970C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18970C23v26Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18970C2[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18970C2[0]),
  (VTBL_ENTRY)&_ZN8S18970C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18970C83v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S18970C2[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern VTBL_ENTRY _ZTV8S18970C2[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
extern void _ZN8S18970C33v21Ev();
extern void _ZN8S18970C33v22Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C3__8S18970C2[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C3[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v22Ev,
};
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C48S18970C3__8S18970C2[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C4[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
};
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C58S18970C48S18970C3__8S18970C2[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C58S18970C48S18970C3__8S18970C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C48S18970C3__8S18970C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S18970C4[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C3__8S18970C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S18970C3[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
static  VTT_ENTRY vtt_S18970C2[] = {
  {&(_ZTV8S18970C2[3]),  3,46},
  {&(_tg__ZTV8S18970C3__8S18970C2[3]),  3,17},
  {&(_tg__ZTV8S18970C48S18970C3__8S18970C2[3]),  3,15},
  {&(_tg__ZTV8S18970C58S18970C48S18970C3__8S18970C2[3]),  3,13},
  {&(_tg__ZTV8S18970C7__8S18970C58S18970C48S18970C3__8S18970C2[9]),  9,16},
  {&(_tg__ZTV8S18970C7__8S18970C48S18970C3__8S18970C2[9]),  9,16},
  {&(_tg__ZTV8S18970C7__8S18970C3__8S18970C2[9]),  9,16},
  {&(_ZTV8S18970C2[39]),  39,46},
};
extern VTBL_ENTRY _ZTI8S18970C2[];
extern  VTBL_ENTRY _ZTV8S18970C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C2[];
Class_Descriptor cd_S18970C2 = {  "S18970C2", // class name
  bases_S18970C2, 7,
  &(vtc_S18970C2[0]), // expected_vtbl_contents
  &(vtt_S18970C2[0]), // expected_vtt_contents
  ABISELECT(192,104), // object size
  NSPAIRA(_ZTI8S18970C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18970C2),46, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18970C2),8, //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  S18970C9_nt  {
  virtual void  v27(); // _ZN11S18970C9_nt3v27Ev
  virtual void  v28(); // _ZN11S18970C9_nt3v28Ev
  virtual void  v29(); // _ZN11S18970C9_nt3v29Ev
  virtual void  v30(); // _ZN11S18970C9_nt3v30Ev
  virtual void  v31(); // _ZN11S18970C9_nt3v31Ev
  virtual void  v32(); // _ZN11S18970C9_nt3v32Ev
  ~S18970C9_nt(); // tgen
  S18970C9_nt(); // tgen
};
//SIG(-1 S18970C9_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S18970C9_nt ::v27(){vfunc_called(this, "_ZN11S18970C9_nt3v27Ev");}
void  S18970C9_nt ::v28(){vfunc_called(this, "_ZN11S18970C9_nt3v28Ev");}
void  S18970C9_nt ::v29(){vfunc_called(this, "_ZN11S18970C9_nt3v29Ev");}
void  S18970C9_nt ::v30(){vfunc_called(this, "_ZN11S18970C9_nt3v30Ev");}
void  S18970C9_nt ::v31(){vfunc_called(this, "_ZN11S18970C9_nt3v31Ev");}
void  S18970C9_nt ::v32(){vfunc_called(this, "_ZN11S18970C9_nt3v32Ev");}
S18970C9_nt ::~S18970C9_nt(){ note_dtor("S18970C9_nt", this);} // tgen
S18970C9_nt ::S18970C9_nt(){ note_ctor("S18970C9_nt", this);} // tgen

//skip512 S18970C9_nt

#else // __cplusplus

extern void _ZN11S18970C9_ntC1Ev();
extern void _ZN11S18970C9_ntD1Ev();
Name_Map name_map_S18970C9_nt[] = {
  NSPAIR(_ZN11S18970C9_ntC1Ev),
  NSPAIR(_ZN11S18970C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18970C9_nt[];
extern void _ZN11S18970C9_nt3v27Ev();
extern void _ZN11S18970C9_nt3v28Ev();
extern void _ZN11S18970C9_nt3v29Ev();
extern void _ZN11S18970C9_nt3v30Ev();
extern void _ZN11S18970C9_nt3v31Ev();
extern void _ZN11S18970C9_nt3v32Ev();
static  VTBL_ENTRY vtc_S18970C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18970C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI11S18970C9_nt[];
VTBL_ENTRY *P__ZTI11S18970C9_nt = _ZTI11S18970C9_nt; 
extern  VTBL_ENTRY _ZTV11S18970C9_nt[];
Class_Descriptor cd_S18970C9_nt = {  "S18970C9_nt", // class name
  0,0,//no base classes
  &(vtc_S18970C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S18970C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S18970C9_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  S18970C1  : virtual S18970C2 , virtual S18970C9_nt {
  virtual void  v1(); // _ZN8S18970C12v1Ev
  ~S18970C1(); // tgen
  S18970C1(); // tgen
};
//SIG(1 S18970C1) C1{ VBC2{ BC3{ BC4{ BC5{ BC6{ v2 v3 v4 v5 v6 Fi} VBC7{ v7 v8 v9 v10 v11 v12 v13 FD[3]} v14 v15 v16 v17 v18} v19 v20} BC6 v21 v22 Fl} BC8{ v23 v24} v25 v26 FC6[5]} VBC9{ v27 v28 v29 v30 v31 v32} v1}


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

static void Test_S18970C1()
{
  extern Class_Descriptor cd_S18970C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,28)];
    init_test(&cd_S18970C1, buf);
    S18970C1 *dp, &lv = *(dp=new (buf) S18970C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S18970C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18970C1)");
    check_base_class_offset(lv, (S18970C6*)(S18970C5*)(S18970C4*)(S18970C3*)(S18970C2*), ABISELECT(8,4), "S18970C1");
    check_base_class_offset(lv, (S18970C7*)(S18970C5*)(S18970C4*)(S18970C3*)(S18970C2*), ABISELECT(144,68), "S18970C1");
    check_base_class_offset(lv, (S18970C5*)(S18970C4*)(S18970C3*)(S18970C2*), ABISELECT(8,4), "S18970C1");
    check_base_class_offset(lv, (S18970C4*)(S18970C3*)(S18970C2*), ABISELECT(8,4), "S18970C1");
    /*is_ambiguous_... S18970C3::S18970C6 */ AMB_check_base_class_offset(lv, (S18970C6*)(S18970C3*)(S18970C2*), ABISELECT(24,12), "S18970C1");
    check_base_class_offset(lv, (S18970C3*)(S18970C2*), ABISELECT(8,4), "S18970C1");
    check_base_class_offset(lv, (S18970C8*)(S18970C2*), ABISELECT(48,24), "S18970C1");
    check_base_class_offset(lv, (S18970C2*), ABISELECT(8,4), "S18970C1");
    check_base_class_offset(lv, (S18970C9_nt*), 0, "S18970C1");
    test_class_info(&lv, &cd_S18970C1);
    dp->~S18970C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18970C1(Test_S18970C1, "S18970C1", ABISELECT(208,108));

#else // __cplusplus

extern void _ZN8S18970C1C1Ev();
extern void _ZN8S18970C1D1Ev();
Name_Map name_map_S18970C1[] = {
  NSPAIR(_ZN8S18970C1C1Ev),
  NSPAIR(_ZN8S18970C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18970C6;
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
extern Class_Descriptor cd_S18970C7;
extern VTBL_ENTRY _ZTI8S18970C7[];
extern  VTBL_ENTRY _ZTV8S18970C7[];
extern Class_Descriptor cd_S18970C5;
extern VTBL_ENTRY _ZTI8S18970C5[];
extern  VTBL_ENTRY _ZTV8S18970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C5[];
extern Class_Descriptor cd_S18970C4;
extern VTBL_ENTRY _ZTI8S18970C4[];
extern  VTBL_ENTRY _ZTV8S18970C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C4[];
extern Class_Descriptor cd_S18970C6;
extern VTBL_ENTRY _ZTI8S18970C6[];
extern  VTBL_ENTRY _ZTV8S18970C6[];
extern Class_Descriptor cd_S18970C3;
extern VTBL_ENTRY _ZTI8S18970C3[];
extern  VTBL_ENTRY _ZTV8S18970C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C3[];
extern Class_Descriptor cd_S18970C8;
extern VTBL_ENTRY _ZTI8S18970C8[];
extern  VTBL_ENTRY _ZTV8S18970C8[];
extern Class_Descriptor cd_S18970C2;
extern VTBL_ENTRY _ZTI8S18970C2[];
extern  VTBL_ENTRY _ZTV8S18970C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C2[];
extern Class_Descriptor cd_S18970C9_nt;
extern VTBL_ENTRY _ZTI11S18970C9_nt[];
extern  VTBL_ENTRY _ZTV11S18970C9_nt[];
static Base_Class bases_S18970C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18970C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18970C7,    ABISELECT(144,68), //bcp->offset
    66, //bcp->virtual_function_table_offset
    9, //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_S18970C5,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18970C4,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18970C6,    ABISELECT(24,12), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18970C3,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S18970C8,    ABISELECT(48,24), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S18970C2,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18970C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18970C1[];
extern void _ZN11S18970C9_nt3v27Ev();
extern void _ZN11S18970C9_nt3v28Ev();
extern void _ZN11S18970C9_nt3v29Ev();
extern void _ZN11S18970C9_nt3v30Ev();
extern void _ZN11S18970C9_nt3v31Ev();
extern void _ZN11S18970C9_nt3v32Ev();
extern void _ZN8S18970C12v1Ev();
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
extern void _ZN8S18970C33v21Ev();
extern void _ZN8S18970C33v22Ev();
extern void _ZN8S18970C23v25Ev();
extern void _ZN8S18970C23v26Ev();
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C83v23Ev();
extern void _ZN8S18970C83v24Ev();
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY vtc_S18970C1[] = {
  0,
  ABISELECT(144,68),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C1[0]),
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S18970C9_nt3v32Ev,
  (VTBL_ENTRY)&_ZN8S18970C12v1Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(136,64),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S18970C1[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18970C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18970C23v26Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S18970C1[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S18970C1[0]),
  (VTBL_ENTRY)&_ZN8S18970C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18970C83v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI8S18970C1[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern VTBL_ENTRY _ZTV8S18970C1[];
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
extern void _ZN8S18970C33v21Ev();
extern void _ZN8S18970C33v22Ev();
extern void _ZN8S18970C23v25Ev();
extern void _ZN8S18970C23v26Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C2__8S18970C1[] = {
  ABISELECT(136,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C2[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18970C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18970C23v26Ev,
};
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
extern void _ZN8S18970C33v21Ev();
extern void _ZN8S18970C33v22Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C38S18970C2__8S18970C1[] = {
  ABISELECT(136,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C3[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18970C33v22Ev,
};
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
extern void _ZN8S18970C43v19Ev();
extern void _ZN8S18970C43v20Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C48S18970C38S18970C2__8S18970C1[] = {
  ABISELECT(136,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C4[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18970C43v20Ev,
};
extern void _ZN8S18970C62v2Ev();
extern void _ZN8S18970C62v3Ev();
extern void _ZN8S18970C62v4Ev();
extern void _ZN8S18970C62v5Ev();
extern void _ZN8S18970C62v6Ev();
extern void _ZN8S18970C53v14Ev();
extern void _ZN8S18970C53v15Ev();
extern void _ZN8S18970C53v16Ev();
extern void _ZN8S18970C53v17Ev();
extern void _ZN8S18970C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C58S18970C48S18970C38S18970C2__8S18970C1[] = {
  ABISELECT(136,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v3Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18970C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v15Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v16Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v17Ev,
  (VTBL_ENTRY)&_ZN8S18970C53v18Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C58S18970C48S18970C38S18970C2__8S18970C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S18970C5[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C48S18970C38S18970C2__8S18970C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S18970C4[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C38S18970C2__8S18970C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S18970C3[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
extern void _ZN8S18970C72v7Ev();
extern void _ZN8S18970C72v8Ev();
extern void _ZN8S18970C72v9Ev();
extern void _ZN8S18970C73v10Ev();
extern void _ZN8S18970C73v11Ev();
extern void _ZN8S18970C73v12Ev();
extern void _ZN8S18970C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S18970C7__8S18970C2__8S18970C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-64),
  (VTBL_ENTRY)&(_ZTI8S18970C2[0]),
  (VTBL_ENTRY)&_ZN8S18970C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18970C72v9Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v10Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v11Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v12Ev,
  (VTBL_ENTRY)&_ZN8S18970C73v13Ev,
};
static  VTT_ENTRY vtt_S18970C1[] = {
  {&(_ZTV8S18970C1[11]),  11,82},
  {&(_ZTV8S18970C1[39]),  39,82},
  {&(_ZTV8S18970C1[75]),  75,82},
  {&(_ZTV8S18970C1[57]),  57,82},
  {&(_ZTV8S18970C1[64]),  64,82},
  {&(_ZTV8S18970C1[11]),  11,82},
  {&(_tg__ZTV8S18970C2__8S18970C1[3]),  3,19},
  {&(_tg__ZTV8S18970C38S18970C2__8S18970C1[3]),  3,17},
  {&(_tg__ZTV8S18970C48S18970C38S18970C2__8S18970C1[3]),  3,15},
  {&(_tg__ZTV8S18970C58S18970C48S18970C38S18970C2__8S18970C1[3]),  3,13},
  {&(_tg__ZTV8S18970C7__8S18970C58S18970C48S18970C38S18970C2__8S18970C1[9]),  9,16},
  {&(_tg__ZTV8S18970C7__8S18970C48S18970C38S18970C2__8S18970C1[9]),  9,16},
  {&(_tg__ZTV8S18970C7__8S18970C38S18970C2__8S18970C1[9]),  9,16},
  {&(_tg__ZTV8S18970C7__8S18970C2__8S18970C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S18970C1[];
extern  VTBL_ENTRY _ZTV8S18970C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18970C1[];
Class_Descriptor cd_S18970C1 = {  "S18970C1", // class name
  bases_S18970C1, 9,
  &(vtc_S18970C1[0]), // expected_vtbl_contents
  &(vtt_S18970C1[0]), // expected_vtt_contents
  ABISELECT(208,108), // object size
  NSPAIRA(_ZTI8S18970C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18970C1),82, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18970C1),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19693C5  {
  ::S19737C2 s19693c5f0;
  int s19693c5f1;
  virtual void  v2(); // _ZN8S19693C52v2Ev
  ~S19693C5(); // tgen
  S19693C5(); // tgen
};
//SIG(-1 S19693C5) C1{ v1 FC2{ m FL Fp[8]} Fi}


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

static void Test_S19693C5()
{
  extern Class_Descriptor cd_S19693C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S19693C5, buf);
    S19693C5 *dp, &lv = *(dp=new (buf) S19693C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S19693C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19693C5)");
    check_field_offset(lv, s19693c5f0, ABISELECT(8,4), "S19693C5.s19693c5f0");
    check_field_offset(lv, s19693c5f1, ABISELECT(80,44), "S19693C5.s19693c5f1");
    test_class_info(&lv, &cd_S19693C5);
    dp->~S19693C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19693C5(Test_S19693C5, "S19693C5", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S19693C5C1Ev();
extern void _ZN8S19693C5D1Ev();
Name_Map name_map_S19693C5[] = {
  NSPAIR(_ZN8S19693C5C1Ev),
  NSPAIR(_ZN8S19693C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19693C5[];
extern void _ZN8S19693C52v2Ev();
static  VTBL_ENTRY vtc_S19693C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C5[0]),
  (VTBL_ENTRY)&_ZN8S19693C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19693C5[];
extern  VTBL_ENTRY _ZTV8S19693C5[];
Class_Descriptor cd_S19693C5 = {  "S19693C5", // class name
  0,0,//no base classes
  &(vtc_S19693C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S19693C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19693C5),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  S19693C6  {
  short s19693c6f0;
  virtual void  v3(); // _ZN8S19693C62v3Ev
  ~S19693C6(); // tgen
  S19693C6(); // tgen
};
//SIG(-1 S19693C6) C1{ v1 Fs}


void  S19693C6 ::v3(){vfunc_called(this, "_ZN8S19693C62v3Ev");}
S19693C6 ::~S19693C6(){ note_dtor("S19693C6", this);} // tgen
S19693C6 ::S19693C6(){ note_ctor("S19693C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19693C6C1Ev();
extern void _ZN8S19693C6D1Ev();
Name_Map name_map_S19693C6[] = {
  NSPAIR(_ZN8S19693C6C1Ev),
  NSPAIR(_ZN8S19693C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19693C6[];
extern void _ZN8S19693C62v3Ev();
static  VTBL_ENTRY vtc_S19693C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C6[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S19693C6[];
extern  VTBL_ENTRY _ZTV8S19693C6[];
Class_Descriptor cd_S19693C6 = {  "S19693C6", // class name
  0,0,//no base classes
  &(vtc_S19693C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19693C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19693C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19693C4  : S19693C5 , S19737C2 , virtual S19693C6 {
  char s19693c4f0[7];
  ::S19737C11 s19693c4f1[8];
  int s19693c4f2;
  virtual void  v4(); // _ZN8S19693C42v4Ev
  ~S19693C4(); // tgen
  S19693C4(); // tgen
};
//SIG(-1 S19693C4) C1{ BC2{ v2 FC3{ m FL Fp[8]} Fi} BC3 VBC4{ v3 Fs} v1 Fc[7] FU5{ m Fl[7] Fs[8] FL}[8] Fi}


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

static void Test_S19693C4()
{
  extern Class_Descriptor cd_S19693C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(81,84)];
    init_test(&cd_S19693C4, buf);
    S19693C4 *dp, &lv = *(dp=new (buf) S19693C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,332), "sizeof(S19693C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19693C4)");
    check_base_class_offset(lv, (S19693C5*), 0, "S19693C4");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(88,48), "S19693C4");
    check_base_class_offset(lv, (S19693C6*), ABISELECT(624,324), "S19693C4");
    check_field_offset(lv, s19693c4f0, ABISELECT(160,88), "S19693C4.s19693c4f0");
    check_field_offset(lv, s19693c4f1, ABISELECT(168,96), "S19693C4.s19693c4f1");
    check_field_offset(lv, s19693c4f2, ABISELECT(616,320), "S19693C4.s19693c4f2");
    test_class_info(&lv, &cd_S19693C4);
    dp->~S19693C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19693C4(Test_S19693C4, "S19693C4", ABISELECT(640,332));

#else // __cplusplus

extern void _ZN8S19693C4C1Ev();
extern void _ZN8S19693C4D1Ev();
Name_Map name_map_S19693C4[] = {
  NSPAIR(_ZN8S19693C4C1Ev),
  NSPAIR(_ZN8S19693C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19693C5;
extern VTBL_ENTRY _ZTI8S19693C5[];
extern  VTBL_ENTRY _ZTV8S19693C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19693C6;
extern VTBL_ENTRY _ZTI8S19693C6[];
extern  VTBL_ENTRY _ZTV8S19693C6[];
static Base_Class bases_S19693C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19693C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19737C2,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S19693C6,    ABISELECT(624,324), //bcp->offset
    5, //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 _ZTI8S19693C4[];
extern void _ZN8S19693C52v2Ev();
extern void _ZN8S19693C42v4Ev();
extern void _ZN8S19693C62v3Ev();
static  VTBL_ENTRY vtc_S19693C4[] = {
  ABISELECT(624,324),
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C4[0]),
  (VTBL_ENTRY)&_ZN8S19693C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19693C42v4Ev,
  0,
  ABISELECT(-624,-324),
  (VTBL_ENTRY)&(_ZTI8S19693C4[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S19693C4[];
static  VTT_ENTRY vtt_S19693C4[] = {
  {&(_ZTV8S19693C4[3]),  3,9},
  {&(_ZTV8S19693C4[8]),  8,9},
};
extern VTBL_ENTRY _ZTI8S19693C4[];
extern  VTBL_ENTRY _ZTV8S19693C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19693C4[];
Class_Descriptor cd_S19693C4 = {  "S19693C4", // class name
  bases_S19693C4, 3,
  &(vtc_S19693C4[0]), // expected_vtbl_contents
  &(vtt_S19693C4[0]), // expected_vtt_contents
  ABISELECT(640,332), // object size
  NSPAIRA(_ZTI8S19693C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19693C4),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19693C4),2, //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  S19693C9  : virtual S19693C6 {
  int s19693c9f0;
  virtual void  v5(); // _ZN8S19693C92v5Ev
  ~S19693C9(); // tgen
  S19693C9(); // tgen
};
//SIG(-1 S19693C9) C1{ VBC2{ v2 Fs} v1 Fi}


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

static void Test_S19693C9()
{
  extern Class_Descriptor cd_S19693C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19693C9, buf);
    S19693C9 *dp, &lv = *(dp=new (buf) S19693C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19693C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19693C9)");
    check_base_class_offset(lv, (S19693C6*), ABISELECT(16,8), "S19693C9");
    check_field_offset(lv, s19693c9f0, ABISELECT(8,4), "S19693C9.s19693c9f0");
    test_class_info(&lv, &cd_S19693C9);
    dp->~S19693C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19693C9(Test_S19693C9, "S19693C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19693C9C1Ev();
extern void _ZN8S19693C9D1Ev();
Name_Map name_map_S19693C9[] = {
  NSPAIR(_ZN8S19693C9C1Ev),
  NSPAIR(_ZN8S19693C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19693C6;
extern VTBL_ENTRY _ZTI8S19693C6[];
extern  VTBL_ENTRY _ZTV8S19693C6[];
static Base_Class bases_S19693C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19693C6,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19693C9[];
extern void _ZN8S19693C92v5Ev();
extern void _ZN8S19693C62v3Ev();
static  VTBL_ENTRY vtc_S19693C9[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C9[0]),
  (VTBL_ENTRY)&_ZN8S19693C92v5Ev,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19693C9[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S19693C9[];
static  VTT_ENTRY vtt_S19693C9[] = {
  {&(_ZTV8S19693C9[3]),  3,8},
  {&(_ZTV8S19693C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19693C9[];
extern  VTBL_ENTRY _ZTV8S19693C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19693C9[];
Class_Descriptor cd_S19693C9 = {  "S19693C9", // class name
  bases_S19693C9, 1,
  &(vtc_S19693C9[0]), // expected_vtbl_contents
  &(vtt_S19693C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19693C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19693C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19693C9),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  S19693C10  {
  char s19693c10f0;
  int s19693c10f1;
  void *s19693c10f2;
  void *s19693c10f3;
  void  mf19693c10(); // _ZN9S19693C1010mf19693c10Ev
};
//SIG(-1 S19693C10) C1{ m Fc Fi Fp[2]}


void  S19693C10 ::mf19693c10(){}

static void Test_S19693C10()
{
  {
    init_simple_test("S19693C10");
    S19693C10 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19693C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19693C10)");
    check_field_offset(lv, s19693c10f0, 0, "S19693C10.s19693c10f0");
    check_field_offset(lv, s19693c10f1, 4, "S19693C10.s19693c10f1");
    check_field_offset(lv, s19693c10f2, 8, "S19693C10.s19693c10f2");
    check_field_offset(lv, s19693c10f3, ABISELECT(16,12), "S19693C10.s19693c10f3");
  }
}
static Arrange_To_Call_Me vS19693C10(Test_S19693C10, "S19693C10", ABISELECT(24,16));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19693C10[];
VTBL_ENTRY *P__ZTI9S19693C10 = _ZTI9S19693C10; 
Class_Descriptor cd_S19693C10 = {  "S19693C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S19693C10),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  S19693C8  : virtual S19693C6 , virtual S19693C9 , virtual S19693C10 , virtual S19693C5 , virtual S19737C2 {
  int s19693c8f0;
  long double s19693c8f1;
  int s19693c8f2;
  ~S19693C8(); // tgen
  S19693C8(); // tgen
};
//SIG(-1 S19693C8) C1{ VBC2{ v1 Fs} VBC3{ VBC2 v2 Fi} VBC4{ m Fc Fi Fp[2]} VBC5{ v3 FC6{ m FL Fp[8]} Fi} VBC6 Fi FD Fi}


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

static void Test_S19693C8()
{
  extern Class_Descriptor cd_S19693C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,37)];
    init_test(&cd_S19693C8, buf);
    S19693C8 *dp, &lv = *(dp=new (buf) S19693C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,144), "sizeof(S19693C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19693C8)");
    check_base_class_offset(lv, (S19693C6*), ABISELECT(40,24), "S19693C8");
    check_base_class_offset(lv, (S19693C6*)(S19693C9*), ABISELECT(40,24), "S19693C8");
    check_base_class_offset(lv, (S19693C9*), ABISELECT(56,32), "S19693C8");
    check_base_class_offset(lv, (S19693C10*), ABISELECT(72,40), "S19693C8");
    check_base_class_offset(lv, (S19693C5*), ABISELECT(96,56), "S19693C8");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(184,104), "S19693C8");
    check_field_offset(lv, s19693c8f0, ABISELECT(8,4), "S19693C8.s19693c8f0");
    check_field_offset(lv, s19693c8f1, ABISELECT(16,8), "S19693C8.s19693c8f1");
    check_field_offset(lv, s19693c8f2, ABISELECT(32,20), "S19693C8.s19693c8f2");
    test_class_info(&lv, &cd_S19693C8);
    dp->~S19693C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19693C8(Test_S19693C8, "S19693C8", ABISELECT(256,144));

#else // __cplusplus

extern void _ZN8S19693C8C1Ev();
extern void _ZN8S19693C8D1Ev();
Name_Map name_map_S19693C8[] = {
  NSPAIR(_ZN8S19693C8C1Ev),
  NSPAIR(_ZN8S19693C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19693C6;
extern VTBL_ENTRY _ZTI8S19693C6[];
extern  VTBL_ENTRY _ZTV8S19693C6[];
extern Class_Descriptor cd_S19693C9;
extern VTBL_ENTRY _ZTI8S19693C9[];
extern  VTBL_ENTRY _ZTV8S19693C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19693C9[];
extern Class_Descriptor cd_S19693C10;
extern VTBL_ENTRY _ZTI9S19693C10[];
extern Class_Descriptor cd_S19693C5;
extern VTBL_ENTRY _ZTI8S19693C5[];
extern  VTBL_ENTRY _ZTV8S19693C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
static Base_Class bases_S19693C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19693C6,    ABISELECT(40,24), //bcp->offset
    7, //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_S19693C9,    ABISELECT(56,32), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19693C10,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19693C5,    ABISELECT(96,56), //bcp->offset
    16, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C2,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19693C8[];
extern void _ZN8S19693C62v3Ev();
extern void _ZN8S19693C92v5Ev();
extern void _ZN8S19693C52v2Ev();
static  VTBL_ENTRY vtc_S19693C8[] = {
  ABISELECT(184,104),
  ABISELECT(96,56),
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C8[0]),
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19693C8[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19693C8[0]),
  (VTBL_ENTRY)&_ZN8S19693C92v5Ev,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S19693C8[0]),
  (VTBL_ENTRY)&_ZN8S19693C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19693C8[];
extern void _ZN8S19693C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C9__8S19693C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C9[0]),
  (VTBL_ENTRY)&_ZN8S19693C92v5Ev,
};
extern void _ZN8S19693C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C6__8S19693C9__8S19693C8[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19693C9[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
};
static  VTT_ENTRY vtt_S19693C8[] = {
  {&(_ZTV8S19693C8[7]),  7,20},
  {&(_ZTV8S19693C8[10]),  10,20},
  {&(_ZTV8S19693C8[15]),  15,20},
  {&(_ZTV8S19693C8[19]),  19,20},
  {&(_tg__ZTV8S19693C9__8S19693C8[3]),  3,4},
  {&(_tg__ZTV8S19693C6__8S19693C9__8S19693C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19693C8[];
extern  VTBL_ENTRY _ZTV8S19693C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19693C8[];
Class_Descriptor cd_S19693C8 = {  "S19693C8", // class name
  bases_S19693C8, 5,
  &(vtc_S19693C8[0]), // expected_vtbl_contents
  &(vtt_S19693C8[0]), // expected_vtt_contents
  ABISELECT(256,144), // object size
  NSPAIRA(_ZTI8S19693C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19693C8),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19693C8),6, //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  S19693C1  : virtual S19737C12_nt , virtual S19737C2 , virtual S19693C4 , virtual S19693C5 , S19693C8 {
  int s19693c1f0;
  virtual void  v1(); // _ZN8S19693C12v1Ev
  ~S19693C1(); // tgen
  S19693C1(); // tgen
};
//SIG(1 S19693C1) C1{ VBC2{ m Fi Fc} VBC3{ m FL Fp[8]} VBC4{ BC5{ v2 FC3 Fi} BC3 VBC6{ v3 Fs} v4 Fc[7] FU7{ m Fl[7] Fs[8] FL}[8] Fi} VBC5 BC8{ VBC6 VBC9{ VBC6 v5 Fi} VBC10{ m Fc Fi Fp Fp} VBC5 VBC3 Fi FD Fi} v1 Fi}


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

static void Test_S19693C1()
{
  extern Class_Descriptor cd_S19693C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(57,121)];
    init_test(&cd_S19693C1, buf);
    S19693C1 *dp, &lv = *(dp=new (buf) S19693C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(896,480), "sizeof(S19693C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19693C1)");
    check_base_class_offset(lv, (S19737C12_nt*), ABISELECT(40,28), "S19693C1");
    /*is_ambiguous_... S19693C1::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*), ABISELECT(48,36), "S19693C1");
    check_base_class_offset(lv, (S19737C2*)(S19693C8*), ABISELECT(48,36), "S19693C1");
    check_base_class_offset(lv, (S19693C5*)(S19693C4*), ABISELECT(120,76), "S19693C1");
    check_base_class_offset(lv, (S19737C2*)(S19693C4*), ABISELECT(208,124), "S19693C1");
    check_base_class_offset(lv, (S19693C6*)(S19693C4*), ABISELECT(744,400), "S19693C1");
    check_base_class_offset(lv, (S19693C6*)(S19693C8*), ABISELECT(744,400), "S19693C1");
    check_base_class_offset(lv, (S19693C6*)(S19693C9*), ABISELECT(744,400), "S19693C1");
    check_base_class_offset(lv, (S19693C4*), ABISELECT(120,76), "S19693C1");
    /*is_ambiguous_... S19693C1::S19693C5 */ AMB_check_base_class_offset(lv, (S19693C5*), ABISELECT(760,408), "S19693C1");
    check_base_class_offset(lv, (S19693C5*)(S19693C8*), ABISELECT(760,408), "S19693C1");
    check_base_class_offset(lv, (S19693C9*)(S19693C8*), ABISELECT(848,456), "S19693C1");
    check_base_class_offset(lv, (S19693C10*)(S19693C8*), ABISELECT(864,464), "S19693C1");
    check_base_class_offset(lv, (S19693C8*), 0, "S19693C1");
    check_field_offset(lv, s19693c1f0, ABISELECT(36,24), "S19693C1.s19693c1f0");
    test_class_info(&lv, &cd_S19693C1);
    dp->~S19693C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19693C1(Test_S19693C1, "S19693C1", ABISELECT(896,480));

#else // __cplusplus

extern void _ZN8S19693C1C1Ev();
extern void _ZN8S19693C1D1Ev();
Name_Map name_map_S19693C1[] = {
  NSPAIR(_ZN8S19693C1C1Ev),
  NSPAIR(_ZN8S19693C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C12_nt;
extern VTBL_ENTRY _ZTI12S19737C12_nt[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19693C5;
extern VTBL_ENTRY _ZTI8S19693C5[];
extern  VTBL_ENTRY _ZTV8S19693C5[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S19693C6;
extern VTBL_ENTRY _ZTI8S19693C6[];
extern  VTBL_ENTRY _ZTV8S19693C6[];
extern Class_Descriptor cd_S19693C4;
extern VTBL_ENTRY _ZTI8S19693C4[];
extern  VTBL_ENTRY _ZTV8S19693C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19693C4[];
extern Class_Descriptor cd_S19693C5;
extern VTBL_ENTRY _ZTI8S19693C5[];
extern  VTBL_ENTRY _ZTV8S19693C5[];
extern Class_Descriptor cd_S19693C9;
extern VTBL_ENTRY _ZTI8S19693C9[];
extern  VTBL_ENTRY _ZTV8S19693C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19693C9[];
extern Class_Descriptor cd_S19693C10;
extern VTBL_ENTRY _ZTI9S19693C10[];
extern Class_Descriptor cd_S19693C8;
extern VTBL_ENTRY _ZTI8S19693C8[];
extern  VTBL_ENTRY _ZTV8S19693C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19693C8[];
static Base_Class bases_S19693C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C12_nt,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C2,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S19693C5,    ABISELECT(120,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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19737C2,    ABISELECT(208,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
    5, //immediately_derived
  0, 0},
  {&cd_S19693C6,    ABISELECT(744,400), //bcp->offset
    17, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19693C4,    ABISELECT(120,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19693C5,    ABISELECT(760,408), //bcp->offset
    21, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19693C9,    ABISELECT(848,456), //bcp->offset
    25, //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
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19693C10,    ABISELECT(864,464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19693C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19693C1[];
extern void _ZN8S19693C12v1Ev();
extern void _ZN8S19693C52v2Ev();
extern void _ZN8S19693C42v4Ev();
extern void _ZN8S19693C62v3Ev();
extern void _ZN8S19693C52v2Ev();
extern void _ZN8S19693C92v5Ev();
static  VTBL_ENTRY vtc_S19693C1[] = {
  ABISELECT(120,76),
  ABISELECT(40,28),
  ABISELECT(48,36),
  ABISELECT(760,408),
  ABISELECT(864,464),
  ABISELECT(848,456),
  ABISELECT(744,400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C1[0]),
  (VTBL_ENTRY)&_ZN8S19693C12v1Ev,
  0,
  0,
  ABISELECT(624,324),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19693C1[0]),
  (VTBL_ENTRY)&_ZN8S19693C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19693C42v4Ev,
  0,
  ABISELECT(-744,-400),
  (VTBL_ENTRY)&(_ZTI8S19693C1[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
  0,
  ABISELECT(-760,-408),
  (VTBL_ENTRY)&(_ZTI8S19693C1[0]),
  (VTBL_ENTRY)&_ZN8S19693C52v2Ev,
  0,
  ABISELECT(-104,-56),
  ABISELECT(-848,-456),
  (VTBL_ENTRY)&(_ZTI8S19693C1[0]),
  (VTBL_ENTRY)&_ZN8S19693C92v5Ev,
};
extern VTBL_ENTRY _ZTV8S19693C1[];
static  VTBL_ENTRY _tg__ZTV8S19693C8__8S19693C1[] = {
  ABISELECT(48,36),
  ABISELECT(760,408),
  ABISELECT(864,464),
  ABISELECT(848,456),
  ABISELECT(744,400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C8[0]),
};
extern void _ZN8S19693C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C6__8S19693C8__8S19693C1[] = {
  0,
  ABISELECT(-744,-400),
  (VTBL_ENTRY)&(_ZTI8S19693C8[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
};
extern void _ZN8S19693C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C9__8S19693C8__8S19693C1[] = {
  0,
  ABISELECT(-104,-56),
  ABISELECT(-848,-456),
  (VTBL_ENTRY)&(_ZTI8S19693C8[0]),
  (VTBL_ENTRY)&_ZN8S19693C92v5Ev,
};
extern void _ZN8S19693C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C5__8S19693C8__8S19693C1[] = {
  0,
  ABISELECT(-760,-408),
  (VTBL_ENTRY)&(_ZTI8S19693C8[0]),
  (VTBL_ENTRY)&_ZN8S19693C52v2Ev,
};
extern void _ZN8S19693C52v2Ev();
extern void _ZN8S19693C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C4__8S19693C1[] = {
  ABISELECT(624,324),
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C4[0]),
  (VTBL_ENTRY)&_ZN8S19693C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19693C42v4Ev,
};
extern void _ZN8S19693C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C6__8S19693C4__8S19693C1[] = {
  0,
  ABISELECT(-624,-324),
  (VTBL_ENTRY)&(_ZTI8S19693C4[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
};
extern void _ZN8S19693C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C9__8S19693C1[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19693C9[0]),
  (VTBL_ENTRY)&_ZN8S19693C92v5Ev,
};
extern void _ZN8S19693C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19693C6__8S19693C9__8S19693C1[] = {
  0,
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI8S19693C9[0]),
  (VTBL_ENTRY)&_ZN8S19693C62v3Ev,
};
static  VTT_ENTRY vtt_S19693C1[] = {
  {&(_ZTV8S19693C1[9]),  9,30},
  {&(_tg__ZTV8S19693C8__8S19693C1[7]),  7,7},
  {&(_tg__ZTV8S19693C6__8S19693C8__8S19693C1[3]),  3,4},
  {&(_tg__ZTV8S19693C9__8S19693C8__8S19693C1[4]),  4,5},
  {&(_tg__ZTV8S19693C5__8S19693C8__8S19693C1[3]),  3,4},
  {&(_ZTV8S19693C1[15]),  15,30},
  {&(_ZTV8S19693C1[20]),  20,30},
  {&(_ZTV8S19693C1[24]),  24,30},
  {&(_ZTV8S19693C1[29]),  29,30},
  {&(_tg__ZTV8S19693C4__8S19693C1[3]),  3,5},
  {&(_tg__ZTV8S19693C6__8S19693C4__8S19693C1[3]),  3,4},
  {&(_tg__ZTV8S19693C9__8S19693C1[3]),  3,4},
  {&(_tg__ZTV8S19693C6__8S19693C9__8S19693C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19693C1[];
extern  VTBL_ENTRY _ZTV8S19693C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19693C1[];
Class_Descriptor cd_S19693C1 = {  "S19693C1", // class name
  bases_S19693C1, 10,
  &(vtc_S19693C1[0]), // expected_vtbl_contents
  &(vtt_S19693C1[0]), // expected_vtt_contents
  ABISELECT(896,480), // object size
  NSPAIRA(_ZTI8S19693C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19693C1),30, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19693C1),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1554C4  {
  int s1554c4f0;
  virtual void  v8(); // _ZN7S1554C42v8Ev
  virtual void  v9(); // _ZN7S1554C42v9Ev
  virtual void  v10(); // _ZN7S1554C43v10Ev
  virtual void  v11(); // _ZN7S1554C43v11Ev
  virtual void  v12(); // _ZN7S1554C43v12Ev
  ~S1554C4(); // tgen
  S1554C4(); // tgen
};
//SIG(-1 S1554C4) C1{ v1 v2 v3 v4 v5 Fi}


void  S1554C4 ::v8(){vfunc_called(this, "_ZN7S1554C42v8Ev");}
void  S1554C4 ::v9(){vfunc_called(this, "_ZN7S1554C42v9Ev");}
void  S1554C4 ::v10(){vfunc_called(this, "_ZN7S1554C43v10Ev");}
void  S1554C4 ::v11(){vfunc_called(this, "_ZN7S1554C43v11Ev");}
void  S1554C4 ::v12(){vfunc_called(this, "_ZN7S1554C43v12Ev");}
S1554C4 ::~S1554C4(){ note_dtor("S1554C4", this);} // tgen
S1554C4 ::S1554C4(){ note_ctor("S1554C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1554C4C1Ev();
extern void _ZN7S1554C4D1Ev();
Name_Map name_map_S1554C4[] = {
  NSPAIR(_ZN7S1554C4C1Ev),
  NSPAIR(_ZN7S1554C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1554C4[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
static  VTBL_ENTRY vtc_S1554C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C4[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
};
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
Class_Descriptor cd_S1554C4 = {  "S1554C4", // class name
  0,0,//no base classes
  &(vtc_S1554C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1554C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1554C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1554C5  {
  long double s1554c5f0[3];
  virtual void  v13(); // _ZN7S1554C53v13Ev
  virtual void  v14(); // _ZN7S1554C53v14Ev
  virtual void  v15(); // _ZN7S1554C53v15Ev
  virtual void  v16(); // _ZN7S1554C53v16Ev
  virtual void  v17(); // _ZN7S1554C53v17Ev
  virtual void  v18(); // _ZN7S1554C53v18Ev
  virtual void  v19(); // _ZN7S1554C53v19Ev
  ~S1554C5(); // tgen
  S1554C5(); // tgen
};
//SIG(-1 S1554C5) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S1554C5 ::v13(){vfunc_called(this, "_ZN7S1554C53v13Ev");}
void  S1554C5 ::v14(){vfunc_called(this, "_ZN7S1554C53v14Ev");}
void  S1554C5 ::v15(){vfunc_called(this, "_ZN7S1554C53v15Ev");}
void  S1554C5 ::v16(){vfunc_called(this, "_ZN7S1554C53v16Ev");}
void  S1554C5 ::v17(){vfunc_called(this, "_ZN7S1554C53v17Ev");}
void  S1554C5 ::v18(){vfunc_called(this, "_ZN7S1554C53v18Ev");}
void  S1554C5 ::v19(){vfunc_called(this, "_ZN7S1554C53v19Ev");}
S1554C5 ::~S1554C5(){ note_dtor("S1554C5", this);} // tgen
S1554C5 ::S1554C5(){ note_ctor("S1554C5", this);} // tgen

static void Test_S1554C5()
{
  extern Class_Descriptor cd_S1554C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S1554C5, buf);
    S1554C5 *dp, &lv = *(dp=new (buf) S1554C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S1554C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1554C5)");
    check_field_offset(lv, s1554c5f0, ABISELECT(16,4), "S1554C5.s1554c5f0");
    test_class_info(&lv, &cd_S1554C5);
    dp->~S1554C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1554C5(Test_S1554C5, "S1554C5", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S1554C5C1Ev();
extern void _ZN7S1554C5D1Ev();
Name_Map name_map_S1554C5[] = {
  NSPAIR(_ZN7S1554C5C1Ev),
  NSPAIR(_ZN7S1554C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1554C5[];
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY vtc_S1554C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C5[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern VTBL_ENTRY _ZTI7S1554C5[];
extern  VTBL_ENTRY _ZTV7S1554C5[];
Class_Descriptor cd_S1554C5 = {  "S1554C5", // class name
  0,0,//no base classes
  &(vtc_S1554C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S1554C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1554C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1554C3  : S1554C4 , virtual S1554C5 {
  virtual void  v20(); // _ZN7S1554C33v20Ev
  virtual void  v21(); // _ZN7S1554C33v21Ev
  virtual void  v22(); // _ZN7S1554C33v22Ev
  virtual void  v23(); // _ZN7S1554C33v23Ev
  virtual void  v24(); // _ZN7S1554C33v24Ev
  ~S1554C3(); // tgen
  S1554C3(); // tgen
};
//SIG(-1 S1554C3) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S1554C3 ::v20(){vfunc_called(this, "_ZN7S1554C33v20Ev");}
void  S1554C3 ::v21(){vfunc_called(this, "_ZN7S1554C33v21Ev");}
void  S1554C3 ::v22(){vfunc_called(this, "_ZN7S1554C33v22Ev");}
void  S1554C3 ::v23(){vfunc_called(this, "_ZN7S1554C33v23Ev");}
void  S1554C3 ::v24(){vfunc_called(this, "_ZN7S1554C33v24Ev");}
S1554C3 ::~S1554C3(){ note_dtor("S1554C3", this);} // tgen
S1554C3 ::S1554C3(){ note_ctor("S1554C3", this);} // tgen

static void Test_S1554C3()
{
  extern Class_Descriptor cd_S1554C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S1554C3, buf);
    S1554C3 *dp, &lv = *(dp=new (buf) S1554C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S1554C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1554C3)");
    check_base_class_offset(lv, (S1554C4*), 0, "S1554C3");
    check_base_class_offset(lv, (S1554C5*), ABISELECT(16,8), "S1554C3");
    test_class_info(&lv, &cd_S1554C3);
    dp->~S1554C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1554C3(Test_S1554C3, "S1554C3", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S1554C3C1Ev();
extern void _ZN7S1554C3D1Ev();
Name_Map name_map_S1554C3[] = {
  NSPAIR(_ZN7S1554C3C1Ev),
  NSPAIR(_ZN7S1554C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
extern Class_Descriptor cd_S1554C5;
extern VTBL_ENTRY _ZTI7S1554C5[];
extern  VTBL_ENTRY _ZTV7S1554C5[];
static Base_Class bases_S1554C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1554C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1554C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI7S1554C3[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY vtc_S1554C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern VTBL_ENTRY _ZTV7S1554C3[];
static  VTT_ENTRY vtt_S1554C3[] = {
  {&(_ZTV7S1554C3[3]),  3,29},
  {&(_ZTV7S1554C3[22]),  22,29},
};
extern VTBL_ENTRY _ZTI7S1554C3[];
extern  VTBL_ENTRY _ZTV7S1554C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C3[];
Class_Descriptor cd_S1554C3 = {  "S1554C3", // class name
  bases_S1554C3, 2,
  &(vtc_S1554C3[0]), // expected_vtbl_contents
  &(vtt_S1554C3[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S1554C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1554C3),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1554C3),2, //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  S1554C2  : S1554C3 {
  virtual void  v25(); // _ZN7S1554C23v25Ev
  virtual void  v26(); // _ZN7S1554C23v26Ev
  ~S1554C2(); // tgen
  S1554C2(); // tgen
};
//SIG(-1 S1554C2) C1{ BC2{ BC3{ v3 v4 v5 v6 v7 Fi} VBC4{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v1 v2}


void  S1554C2 ::v25(){vfunc_called(this, "_ZN7S1554C23v25Ev");}
void  S1554C2 ::v26(){vfunc_called(this, "_ZN7S1554C23v26Ev");}
S1554C2 ::~S1554C2(){ note_dtor("S1554C2", this);} // tgen
S1554C2 ::S1554C2(){ note_ctor("S1554C2", this);} // tgen

static void Test_S1554C2()
{
  extern Class_Descriptor cd_S1554C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S1554C2, buf);
    S1554C2 *dp, &lv = *(dp=new (buf) S1554C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S1554C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1554C2)");
    check_base_class_offset(lv, (S1554C4*)(S1554C3*), 0, "S1554C2");
    check_base_class_offset(lv, (S1554C5*)(S1554C3*), ABISELECT(16,8), "S1554C2");
    check_base_class_offset(lv, (S1554C3*), 0, "S1554C2");
    test_class_info(&lv, &cd_S1554C2);
    dp->~S1554C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1554C2(Test_S1554C2, "S1554C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S1554C2C1Ev();
extern void _ZN7S1554C2D1Ev();
Name_Map name_map_S1554C2[] = {
  NSPAIR(_ZN7S1554C2C1Ev),
  NSPAIR(_ZN7S1554C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
extern Class_Descriptor cd_S1554C5;
extern VTBL_ENTRY _ZTI7S1554C5[];
extern  VTBL_ENTRY _ZTV7S1554C5[];
extern Class_Descriptor cd_S1554C3;
extern VTBL_ENTRY _ZTI7S1554C3[];
extern  VTBL_ENTRY _ZTV7S1554C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C3[];
static Base_Class bases_S1554C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1554C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1554C5,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S1554C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1554C2[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY vtc_S1554C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern VTBL_ENTRY _ZTV7S1554C2[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C3__7S1554C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C3__7S1554C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
static  VTT_ENTRY vtt_S1554C2[] = {
  {&(_ZTV7S1554C2[3]),  3,31},
  {&(_tg__ZTV7S1554C3__7S1554C2[3]),  3,13},
  {&(_tg__ZTV7S1554C5__7S1554C3__7S1554C2[9]),  9,16},
  {&(_ZTV7S1554C2[24]),  24,31},
};
extern VTBL_ENTRY _ZTI7S1554C2[];
extern  VTBL_ENTRY _ZTV7S1554C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C2[];
Class_Descriptor cd_S1554C2 = {  "S1554C2", // class name
  bases_S1554C2, 3,
  &(vtc_S1554C2[0]), // expected_vtbl_contents
  &(vtt_S1554C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S1554C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1554C2),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1554C2),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1554C7  : S1554C2 , S1554C4 {
  long s1554c7f0;
  virtual void  v27(); // _ZN7S1554C73v27Ev
  virtual void  v28(); // _ZN7S1554C73v28Ev
  ~S1554C7(); // tgen
  S1554C7(); // tgen
};
//SIG(-1 S1554C7) C1{ BC2{ BC3{ BC4{ v3 v4 v5 v6 v7 Fi} VBC5{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v20 v21} BC4 v1 v2 Fl}


void  S1554C7 ::v27(){vfunc_called(this, "_ZN7S1554C73v27Ev");}
void  S1554C7 ::v28(){vfunc_called(this, "_ZN7S1554C73v28Ev");}
S1554C7 ::~S1554C7(){ note_dtor("S1554C7", this);} // tgen
S1554C7 ::S1554C7(){ note_ctor("S1554C7", this);} // tgen

static void Test_S1554C7()
{
  extern Class_Descriptor cd_S1554C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,16)];
    init_test(&cd_S1554C7, buf);
    S1554C7 *dp, &lv = *(dp=new (buf) S1554C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S1554C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1554C7)");
    check_base_class_offset(lv, (S1554C4*)(S1554C3*)(S1554C2*), 0, "S1554C7");
    check_base_class_offset(lv, (S1554C5*)(S1554C3*)(S1554C2*), ABISELECT(48,20), "S1554C7");
    check_base_class_offset(lv, (S1554C3*)(S1554C2*), 0, "S1554C7");
    check_base_class_offset(lv, (S1554C2*), 0, "S1554C7");
    /*is_ambiguous_... S1554C7::S1554C4 */ AMB_check_base_class_offset(lv, (S1554C4*), ABISELECT(16,8), "S1554C7");
    check_field_offset(lv, s1554c7f0, ABISELECT(32,16), "S1554C7.s1554c7f0");
    test_class_info(&lv, &cd_S1554C7);
    dp->~S1554C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1554C7(Test_S1554C7, "S1554C7", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN7S1554C7C1Ev();
extern void _ZN7S1554C7D1Ev();
Name_Map name_map_S1554C7[] = {
  NSPAIR(_ZN7S1554C7C1Ev),
  NSPAIR(_ZN7S1554C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
extern Class_Descriptor cd_S1554C5;
extern VTBL_ENTRY _ZTI7S1554C5[];
extern  VTBL_ENTRY _ZTV7S1554C5[];
extern Class_Descriptor cd_S1554C3;
extern VTBL_ENTRY _ZTI7S1554C3[];
extern  VTBL_ENTRY _ZTV7S1554C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C3[];
extern Class_Descriptor cd_S1554C2;
extern VTBL_ENTRY _ZTI7S1554C2[];
extern  VTBL_ENTRY _ZTV7S1554C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C2[];
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
static Base_Class bases_S1554C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1554C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1554C5,    ABISELECT(48,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //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_S1554C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1554C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1554C4,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1554C7[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
extern void _ZN7S1554C73v27Ev();
extern void _ZN7S1554C73v28Ev();
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY vtc_S1554C7[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C7[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v28Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1554C7[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S1554C7[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern VTBL_ENTRY _ZTV7S1554C7[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C2__7S1554C7[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
};
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C37S1554C2__7S1554C7[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C37S1554C2__7S1554C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C2__7S1554C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
static  VTT_ENTRY vtt_S1554C7[] = {
  {&(_ZTV7S1554C7[3]),  3,40},
  {&(_tg__ZTV7S1554C2__7S1554C7[3]),  3,15},
  {&(_tg__ZTV7S1554C37S1554C2__7S1554C7[3]),  3,13},
  {&(_tg__ZTV7S1554C5__7S1554C37S1554C2__7S1554C7[9]),  9,16},
  {&(_tg__ZTV7S1554C5__7S1554C2__7S1554C7[9]),  9,16},
  {&(_ZTV7S1554C7[33]),  33,40},
};
extern VTBL_ENTRY _ZTI7S1554C7[];
extern  VTBL_ENTRY _ZTV7S1554C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C7[];
Class_Descriptor cd_S1554C7 = {  "S1554C7", // class name
  bases_S1554C7, 5,
  &(vtc_S1554C7[0]), // expected_vtbl_contents
  &(vtt_S1554C7[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI7S1554C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1554C7),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1554C7),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1554C8  {
  virtual void  v29(); // _ZN7S1554C83v29Ev
  virtual void  v30(); // _ZN7S1554C83v30Ev
  ~S1554C8(); // tgen
  S1554C8(); // tgen
};
//SIG(-1 S1554C8) C1{ v1 v2}


void  S1554C8 ::v29(){vfunc_called(this, "_ZN7S1554C83v29Ev");}
void  S1554C8 ::v30(){vfunc_called(this, "_ZN7S1554C83v30Ev");}
S1554C8 ::~S1554C8(){ note_dtor("S1554C8", this);} // tgen
S1554C8 ::S1554C8(){ note_ctor("S1554C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1554C8C1Ev();
extern void _ZN7S1554C8D1Ev();
Name_Map name_map_S1554C8[] = {
  NSPAIR(_ZN7S1554C8C1Ev),
  NSPAIR(_ZN7S1554C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1554C8[];
extern void _ZN7S1554C83v29Ev();
extern void _ZN7S1554C83v30Ev();
static  VTBL_ENTRY vtc_S1554C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C8[0]),
  (VTBL_ENTRY)&_ZN7S1554C83v29Ev,
  (VTBL_ENTRY)&_ZN7S1554C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S1554C8[];
extern  VTBL_ENTRY _ZTV7S1554C8[];
Class_Descriptor cd_S1554C8 = {  "S1554C8", // class name
  0,0,//no base classes
  &(vtc_S1554C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1554C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1554C8),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  S1554C6  : S1554C7 , S1554C8 {
  ::S1554C4 s1554c6f0[5];
  virtual void  v31(); // _ZN7S1554C63v31Ev
  virtual void  v32(); // _ZN7S1554C63v32Ev
  ~S1554C6(); // tgen
  S1554C6(); // tgen
};
//SIG(-1 S1554C6) C1{ BC2{ BC3{ BC4{ BC5{ v3 v4 v5 v6 v7 Fi} VBC6{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v20 v21} BC5 v22 v23 Fl} BC7{ v24 v25} v1 v2 FC5[5]}


void  S1554C6 ::v31(){vfunc_called(this, "_ZN7S1554C63v31Ev");}
void  S1554C6 ::v32(){vfunc_called(this, "_ZN7S1554C63v32Ev");}
S1554C6 ::~S1554C6(){ note_dtor("S1554C6", this);} // tgen
S1554C6 ::S1554C6(){ note_ctor("S1554C6", this);} // tgen

static void Test_S1554C6()
{
  extern Class_Descriptor cd_S1554C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,27)];
    init_test(&cd_S1554C6, buf);
    S1554C6 *dp, &lv = *(dp=new (buf) S1554C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,104), "sizeof(S1554C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1554C6)");
    check_base_class_offset(lv, (S1554C4*)(S1554C3*)(S1554C2*)(S1554C7*), 0, "S1554C6");
    check_base_class_offset(lv, (S1554C5*)(S1554C3*)(S1554C2*)(S1554C7*), ABISELECT(128,64), "S1554C6");
    check_base_class_offset(lv, (S1554C3*)(S1554C2*)(S1554C7*), 0, "S1554C6");
    check_base_class_offset(lv, (S1554C2*)(S1554C7*), 0, "S1554C6");
    /*is_ambiguous_... S1554C7::S1554C4 */ AMB_check_base_class_offset(lv, (S1554C4*)(S1554C7*), ABISELECT(16,8), "S1554C6");
    check_base_class_offset(lv, (S1554C7*), 0, "S1554C6");
    check_base_class_offset(lv, (S1554C8*), ABISELECT(40,20), "S1554C6");
    check_field_offset(lv, s1554c6f0, ABISELECT(48,24), "S1554C6.s1554c6f0");
    test_class_info(&lv, &cd_S1554C6);
    dp->~S1554C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1554C6(Test_S1554C6, "S1554C6", ABISELECT(192,104));

#else // __cplusplus

extern void _ZN7S1554C6C1Ev();
extern void _ZN7S1554C6D1Ev();
Name_Map name_map_S1554C6[] = {
  NSPAIR(_ZN7S1554C6C1Ev),
  NSPAIR(_ZN7S1554C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
extern Class_Descriptor cd_S1554C5;
extern VTBL_ENTRY _ZTI7S1554C5[];
extern  VTBL_ENTRY _ZTV7S1554C5[];
extern Class_Descriptor cd_S1554C3;
extern VTBL_ENTRY _ZTI7S1554C3[];
extern  VTBL_ENTRY _ZTV7S1554C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C3[];
extern Class_Descriptor cd_S1554C2;
extern VTBL_ENTRY _ZTI7S1554C2[];
extern  VTBL_ENTRY _ZTV7S1554C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C2[];
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
extern Class_Descriptor cd_S1554C7;
extern VTBL_ENTRY _ZTI7S1554C7[];
extern  VTBL_ENTRY _ZTV7S1554C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C7[];
extern Class_Descriptor cd_S1554C8;
extern VTBL_ENTRY _ZTI7S1554C8[];
extern  VTBL_ENTRY _ZTV7S1554C8[];
static Base_Class bases_S1554C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1554C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1554C5,    ABISELECT(128,64), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //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_S1554C3,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1554C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1554C4,    ABISELECT(16,8), //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1554C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1554C8,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1554C6[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
extern void _ZN7S1554C73v27Ev();
extern void _ZN7S1554C73v28Ev();
extern void _ZN7S1554C63v31Ev();
extern void _ZN7S1554C63v32Ev();
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C83v29Ev();
extern void _ZN7S1554C83v30Ev();
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY vtc_S1554C6[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C6[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1554C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1554C63v32Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1554C6[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S1554C6[0]),
  (VTBL_ENTRY)&_ZN7S1554C83v29Ev,
  (VTBL_ENTRY)&_ZN7S1554C83v30Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S1554C6[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern VTBL_ENTRY _ZTV7S1554C6[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
extern void _ZN7S1554C73v27Ev();
extern void _ZN7S1554C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C7__7S1554C6[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C7[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v28Ev,
};
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C27S1554C7__7S1554C6[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
};
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C37S1554C27S1554C7__7S1554C6[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C37S1554C27S1554C7__7S1554C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C27S1554C7__7S1554C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C7__7S1554C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S1554C7[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
static  VTT_ENTRY vtt_S1554C6[] = {
  {&(_ZTV7S1554C6[3]),  3,46},
  {&(_tg__ZTV7S1554C7__7S1554C6[3]),  3,17},
  {&(_tg__ZTV7S1554C27S1554C7__7S1554C6[3]),  3,15},
  {&(_tg__ZTV7S1554C37S1554C27S1554C7__7S1554C6[3]),  3,13},
  {&(_tg__ZTV7S1554C5__7S1554C37S1554C27S1554C7__7S1554C6[9]),  9,16},
  {&(_tg__ZTV7S1554C5__7S1554C27S1554C7__7S1554C6[9]),  9,16},
  {&(_tg__ZTV7S1554C5__7S1554C7__7S1554C6[9]),  9,16},
  {&(_ZTV7S1554C6[39]),  39,46},
};
extern VTBL_ENTRY _ZTI7S1554C6[];
extern  VTBL_ENTRY _ZTV7S1554C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C6[];
Class_Descriptor cd_S1554C6 = {  "S1554C6", // class name
  bases_S1554C6, 7,
  &(vtc_S1554C6[0]), // expected_vtbl_contents
  &(vtt_S1554C6[0]), // expected_vtt_contents
  ABISELECT(192,104), // object size
  NSPAIRA(_ZTI7S1554C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1554C6),46, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1554C6),8, //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  S1554C1  : S1554C2 , S1554C6 {
  virtual void  v1(); // _ZN7S1554C12v1Ev
  virtual void  v2(); // _ZN7S1554C12v2Ev
  virtual void  v3(); // _ZN7S1554C12v3Ev
  virtual void  v4(); // _ZN7S1554C12v4Ev
  virtual void  v5(); // _ZN7S1554C12v5Ev
  virtual void  v6(); // _ZN7S1554C12v6Ev
  virtual void  v7(); // _ZN7S1554C12v7Ev
  ~S1554C1(); // tgen
  S1554C1(); // tgen
};
//SIG(1 S1554C1) C1{ BC2{ BC3{ BC4{ v8 v9 v10 v11 v12 Fi} VBC5{ v13 v14 v15 v16 v17 v18 v19 FD[3]} v20 v21 v22 v23 v24} v25 v26} BC6{ BC7{ BC2 BC4 v27 v28 Fl} BC8{ v29 v30} v31 v32 FC4[5]} v1 v2 v3 v4 v5 v6 v7}


void  S1554C1 ::v1(){vfunc_called(this, "_ZN7S1554C12v1Ev");}
void  S1554C1 ::v2(){vfunc_called(this, "_ZN7S1554C12v2Ev");}
void  S1554C1 ::v3(){vfunc_called(this, "_ZN7S1554C12v3Ev");}
void  S1554C1 ::v4(){vfunc_called(this, "_ZN7S1554C12v4Ev");}
void  S1554C1 ::v5(){vfunc_called(this, "_ZN7S1554C12v5Ev");}
void  S1554C1 ::v6(){vfunc_called(this, "_ZN7S1554C12v6Ev");}
void  S1554C1 ::v7(){vfunc_called(this, "_ZN7S1554C12v7Ev");}
S1554C1 ::~S1554C1(){ note_dtor("S1554C1", this);} // tgen
S1554C1 ::S1554C1(){ note_ctor("S1554C1", this);} // tgen

static void Test_S1554C1()
{
  extern Class_Descriptor cd_S1554C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,29)];
    init_test(&cd_S1554C1, buf);
    S1554C1 *dp, &lv = *(dp=new (buf) S1554C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S1554C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1554C1)");
    /*is_ambiguous_... S1554C1::S1554C2 */ AMB_check_base_class_offset(lv, (S1554C4*)(S1554C3*)(S1554C2*), 0, "S1554C1");
    /*is_ambiguous_... S1554C1::S1554C2 */ AMB_check_base_class_offset(lv, (S1554C5*)(S1554C3*)(S1554C2*), ABISELECT(144,72), "S1554C1");
    check_base_class_offset(lv, (S1554C5*)(S1554C3*)(S1554C2*)(S1554C7*)(S1554C6*), ABISELECT(144,72), "S1554C1");
    /*is_ambiguous_... S1554C1::S1554C2 */ AMB_check_base_class_offset(lv, (S1554C3*)(S1554C2*), 0, "S1554C1");
    /*is_ambiguous_... S1554C1::S1554C2 */ AMB_check_base_class_offset(lv, (S1554C2*), 0, "S1554C1");
    check_base_class_offset(lv, (S1554C4*)(S1554C3*)(S1554C2*)(S1554C7*)(S1554C6*), ABISELECT(16,8), "S1554C1");
    check_base_class_offset(lv, (S1554C3*)(S1554C2*)(S1554C7*)(S1554C6*), ABISELECT(16,8), "S1554C1");
    check_base_class_offset(lv, (S1554C2*)(S1554C7*)(S1554C6*), ABISELECT(16,8), "S1554C1");
    /*is_ambiguous_... S1554C7::S1554C4 */ AMB_check_base_class_offset(lv, (S1554C4*)(S1554C7*)(S1554C6*), ABISELECT(32,16), "S1554C1");
    check_base_class_offset(lv, (S1554C7*)(S1554C6*), ABISELECT(16,8), "S1554C1");
    check_base_class_offset(lv, (S1554C8*)(S1554C6*), ABISELECT(56,28), "S1554C1");
    check_base_class_offset(lv, (S1554C6*), ABISELECT(16,8), "S1554C1");
    test_class_info(&lv, &cd_S1554C1);
    dp->~S1554C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1554C1(Test_S1554C1, "S1554C1", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN7S1554C1C1Ev();
extern void _ZN7S1554C1D1Ev();
Name_Map name_map_S1554C1[] = {
  NSPAIR(_ZN7S1554C1C1Ev),
  NSPAIR(_ZN7S1554C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
extern Class_Descriptor cd_S1554C5;
extern VTBL_ENTRY _ZTI7S1554C5[];
extern  VTBL_ENTRY _ZTV7S1554C5[];
extern Class_Descriptor cd_S1554C3;
extern VTBL_ENTRY _ZTI7S1554C3[];
extern  VTBL_ENTRY _ZTV7S1554C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C3[];
extern Class_Descriptor cd_S1554C2;
extern VTBL_ENTRY _ZTI7S1554C2[];
extern  VTBL_ENTRY _ZTV7S1554C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C2[];
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
extern Class_Descriptor cd_S1554C3;
extern VTBL_ENTRY _ZTI7S1554C3[];
extern  VTBL_ENTRY _ZTV7S1554C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C3[];
extern Class_Descriptor cd_S1554C2;
extern VTBL_ENTRY _ZTI7S1554C2[];
extern  VTBL_ENTRY _ZTV7S1554C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C2[];
extern Class_Descriptor cd_S1554C4;
extern VTBL_ENTRY _ZTI7S1554C4[];
extern  VTBL_ENTRY _ZTV7S1554C4[];
extern Class_Descriptor cd_S1554C7;
extern VTBL_ENTRY _ZTI7S1554C7[];
extern  VTBL_ENTRY _ZTV7S1554C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C7[];
extern Class_Descriptor cd_S1554C8;
extern VTBL_ENTRY _ZTI7S1554C8[];
extern  VTBL_ENTRY _ZTV7S1554C8[];
extern Class_Descriptor cd_S1554C6;
extern VTBL_ENTRY _ZTI7S1554C6[];
extern  VTBL_ENTRY _ZTV7S1554C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C6[];
static Base_Class bases_S1554C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1554C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1554C5,    ABISELECT(144,72), //bcp->offset
    52, //bcp->virtual_function_table_offset
    9, //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_S1554C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1554C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1554C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1554C3,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1554C2,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1554C4,    ABISELECT(32,16), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1554C7,    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
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1554C8,    ABISELECT(56,28), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1554C6,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1554C1[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
extern void _ZN7S1554C12v1Ev();
extern void _ZN7S1554C12v2Ev();
extern void _ZN7S1554C12v3Ev();
extern void _ZN7S1554C12v4Ev();
extern void _ZN7S1554C12v5Ev();
extern void _ZN7S1554C12v6Ev();
extern void _ZN7S1554C12v7Ev();
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
extern void _ZN7S1554C73v27Ev();
extern void _ZN7S1554C73v28Ev();
extern void _ZN7S1554C63v31Ev();
extern void _ZN7S1554C63v32Ev();
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C83v29Ev();
extern void _ZN7S1554C83v30Ev();
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY vtc_S1554C1[] = {
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C1[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1554C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1554C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1554C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1554C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1554C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1554C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1554C12v7Ev,
  ABISELECT(128,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1554C1[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1554C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1554C63v32Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S1554C1[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S1554C1[0]),
  (VTBL_ENTRY)&_ZN7S1554C83v29Ev,
  (VTBL_ENTRY)&_ZN7S1554C83v30Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S1554C1[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern VTBL_ENTRY _ZTV7S1554C1[];
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C2__7S1554C1[] = {
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
};
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C37S1554C2__7S1554C1[] = {
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C37S1554C2__7S1554C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C2__7S1554C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
extern void _ZN7S1554C73v27Ev();
extern void _ZN7S1554C73v28Ev();
extern void _ZN7S1554C63v31Ev();
extern void _ZN7S1554C63v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C6__7S1554C1[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C6[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1554C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1554C63v32Ev,
};
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
extern void _ZN7S1554C73v27Ev();
extern void _ZN7S1554C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C77S1554C6__7S1554C1[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C7[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1554C73v28Ev,
};
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
extern void _ZN7S1554C23v25Ev();
extern void _ZN7S1554C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C27S1554C77S1554C6__A1__7S1554C1[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1554C23v26Ev,
};
extern void _ZN7S1554C42v8Ev();
extern void _ZN7S1554C42v9Ev();
extern void _ZN7S1554C43v10Ev();
extern void _ZN7S1554C43v11Ev();
extern void _ZN7S1554C43v12Ev();
extern void _ZN7S1554C33v20Ev();
extern void _ZN7S1554C33v21Ev();
extern void _ZN7S1554C33v22Ev();
extern void _ZN7S1554C33v23Ev();
extern void _ZN7S1554C33v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C37S1554C27S1554C77S1554C6__A1__7S1554C1[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1554C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1554C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1554C33v24Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C37S1554C27S1554C77S1554C6__A1__7S1554C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S1554C3[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C27S1554C77S1554C6__A1__7S1554C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S1554C2[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C77S1554C6__7S1554C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S1554C7[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
extern void _ZN7S1554C53v13Ev();
extern void _ZN7S1554C53v14Ev();
extern void _ZN7S1554C53v15Ev();
extern void _ZN7S1554C53v16Ev();
extern void _ZN7S1554C53v17Ev();
extern void _ZN7S1554C53v18Ev();
extern void _ZN7S1554C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1554C5__7S1554C6__7S1554C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S1554C6[0]),
  (VTBL_ENTRY)&_ZN7S1554C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v15Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1554C53v19Ev,
};
static  VTT_ENTRY vtt_S1554C1[] = {
  {&(_ZTV7S1554C1[3]),  3,68},
  {&(_tg__ZTV7S1554C2__7S1554C1[3]),  3,15},
  {&(_tg__ZTV7S1554C37S1554C2__7S1554C1[3]),  3,13},
  {&(_tg__ZTV7S1554C5__7S1554C37S1554C2__7S1554C1[9]),  9,16},
  {&(_tg__ZTV7S1554C5__7S1554C2__7S1554C1[9]),  9,16},
  {&(_tg__ZTV7S1554C6__7S1554C1[3]),  3,19},
  {&(_tg__ZTV7S1554C77S1554C6__7S1554C1[3]),  3,17},
  {&(_tg__ZTV7S1554C27S1554C77S1554C6__A1__7S1554C1[3]),  3,15},
  {&(_tg__ZTV7S1554C37S1554C27S1554C77S1554C6__A1__7S1554C1[3]),  3,13},
  {&(_tg__ZTV7S1554C5__7S1554C37S1554C27S1554C77S1554C6__A1__7S1554C1[9]),  9,16},
  {&(_tg__ZTV7S1554C5__7S1554C27S1554C77S1554C6__A1__7S1554C1[9]),  9,16},
  {&(_tg__ZTV7S1554C5__7S1554C77S1554C6__7S1554C1[9]),  9,16},
  {&(_tg__ZTV7S1554C5__7S1554C6__7S1554C1[9]),  9,16},
  {&(_ZTV7S1554C1[61]),  61,68},
  {&(_ZTV7S1554C1[25]),  25,68},
};
extern VTBL_ENTRY _ZTI7S1554C1[];
extern  VTBL_ENTRY _ZTV7S1554C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1554C1[];
Class_Descriptor cd_S1554C1 = {  "S1554C1", // class name
  bases_S1554C1, 11,
  &(vtc_S1554C1[0]), // expected_vtbl_contents
  &(vtt_S1554C1[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI7S1554C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1554C1),68, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1554C1),15, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2105C4_nt  {
  void *s2105c4f0;
  virtual  ~S2105C4_nt(); // _ZN10S2105C4_ntD1Ev
  virtual void  v2(); // _ZN10S2105C4_nt2v2Ev
  virtual void  v3(); // _ZN10S2105C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2105C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2105C4_nt2v5Ev
  S2105C4_nt(); // tgen
};
//SIG(-1 S2105C4_nt) C1{ vd v1 v2 v3 v4 Fp}


 S2105C4_nt ::~S2105C4_nt(){ note_dtor("S2105C4_nt", this);}
void  S2105C4_nt ::v2(){vfunc_called(this, "_ZN10S2105C4_nt2v2Ev");}
void  S2105C4_nt ::v3(){vfunc_called(this, "_ZN10S2105C4_nt2v3Ev");}
void  S2105C4_nt ::v4(){vfunc_called(this, "_ZN10S2105C4_nt2v4Ev");}
void  S2105C4_nt ::v5(){vfunc_called(this, "_ZN10S2105C4_nt2v5Ev");}
S2105C4_nt ::S2105C4_nt(){ note_ctor("S2105C4_nt", this);} // tgen

//skip512 S2105C4_nt

#else // __cplusplus

extern void _ZN10S2105C4_ntC1Ev();
extern void _ZN10S2105C4_ntD1Ev();
Name_Map name_map_S2105C4_nt[] = {
  NSPAIR(_ZN10S2105C4_ntC1Ev),
  NSPAIR(_ZN10S2105C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2105C4_nt[];
extern void _ZN10S2105C4_ntD1Ev();
extern void _ZN10S2105C4_ntD0Ev();
extern void _ZN10S2105C4_nt2v2Ev();
extern void _ZN10S2105C4_nt2v3Ev();
extern void _ZN10S2105C4_nt2v4Ev();
extern void _ZN10S2105C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S2105C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2105C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2105C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S2105C4_nt[];
VTBL_ENTRY *P__ZTI10S2105C4_nt = _ZTI10S2105C4_nt; 
extern  VTBL_ENTRY _ZTV10S2105C4_nt[];
Class_Descriptor cd_S2105C4_nt = {  "S2105C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2105C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S2105C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2105C4_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  S2105C5  {
  ::S2123C20_nt s2105c5f0;
  int s2105c5f1[2];
  char s2105c5f2;
  virtual  ~S2105C5(); // _ZN7S2105C5D1Ev
  virtual void  v6(); // _ZN7S2105C52v6Ev
  virtual void  v7(); // _ZN7S2105C52v7Ev
  virtual void  v8(); // _ZN7S2105C52v8Ev
  S2105C5(); // tgen
};
//SIG(-1 S2105C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2105C5 ::~S2105C5(){ note_dtor("S2105C5", this);}
void  S2105C5 ::v6(){vfunc_called(this, "_ZN7S2105C52v6Ev");}
void  S2105C5 ::v7(){vfunc_called(this, "_ZN7S2105C52v7Ev");}
void  S2105C5 ::v8(){vfunc_called(this, "_ZN7S2105C52v8Ev");}
S2105C5 ::S2105C5(){ note_ctor("S2105C5", this);} // tgen

static void Test_S2105C5()
{
  extern Class_Descriptor cd_S2105C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2105C5, buf);
    S2105C5 *dp, &lv = *(dp=new (buf) S2105C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2105C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2105C5)");
    check_field_offset(lv, s2105c5f0, ABISELECT(8,4), "S2105C5.s2105c5f0");
    check_field_offset(lv, s2105c5f1, ABISELECT(24,16), "S2105C5.s2105c5f1");
    check_field_offset(lv, s2105c5f2, ABISELECT(32,24), "S2105C5.s2105c5f2");
    test_class_info(&lv, &cd_S2105C5);
    dp->~S2105C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2105C5(Test_S2105C5, "S2105C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2105C5C1Ev();
extern void _ZN7S2105C5D1Ev();
Name_Map name_map_S2105C5[] = {
  NSPAIR(_ZN7S2105C5C1Ev),
  NSPAIR(_ZN7S2105C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2105C5[];
extern void _ZN7S2105C5D1Ev();
extern void _ZN7S2105C5D0Ev();
extern void _ZN7S2105C52v6Ev();
extern void _ZN7S2105C52v7Ev();
extern void _ZN7S2105C52v8Ev();
static  VTBL_ENTRY vtc_S2105C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2105C5[0]),
  (VTBL_ENTRY)&_ZN7S2105C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2105C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2105C5[];
extern  VTBL_ENTRY _ZTV7S2105C5[];
Class_Descriptor cd_S2105C5 = {  "S2105C5", // class name
  0,0,//no base classes
  &(vtc_S2105C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2105C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2105C5),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  S2105C3  : S2105C4_nt , S2105C5 {
  void *s2105c3f0;
  virtual  ~S2105C3(); // _ZN7S2105C3D1Ev
  virtual void  v9(); // _ZN7S2105C32v9Ev
  virtual void  v10(); // _ZN7S2105C33v10Ev
  virtual void  v11(); // _ZN7S2105C33v11Ev
  virtual void  v12(); // _ZN7S2105C33v12Ev
  S2105C3(); // tgen
};
//SIG(-1 S2105C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2105C3 ::~S2105C3(){ note_dtor("S2105C3", this);}
void  S2105C3 ::v9(){vfunc_called(this, "_ZN7S2105C32v9Ev");}
void  S2105C3 ::v10(){vfunc_called(this, "_ZN7S2105C33v10Ev");}
void  S2105C3 ::v11(){vfunc_called(this, "_ZN7S2105C33v11Ev");}
void  S2105C3 ::v12(){vfunc_called(this, "_ZN7S2105C33v12Ev");}
S2105C3 ::S2105C3(){ note_ctor("S2105C3", this);} // tgen

static void Test_S2105C3()
{
  extern Class_Descriptor cd_S2105C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2105C3, buf);
    S2105C3 *dp, &lv = *(dp=new (buf) S2105C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2105C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2105C3)");
    check_base_class_offset(lv, (S2105C4_nt*), 0, "S2105C3");
    check_base_class_offset(lv, (S2105C5*), ABISELECT(16,8), "S2105C3");
    check_field_offset(lv, s2105c3f0, ABISELECT(56,36), "S2105C3.s2105c3f0");
    test_class_info(&lv, &cd_S2105C3);
    dp->~S2105C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2105C3(Test_S2105C3, "S2105C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2105C3C1Ev();
extern void _ZN7S2105C3D1Ev();
Name_Map name_map_S2105C3[] = {
  NSPAIR(_ZN7S2105C3C1Ev),
  NSPAIR(_ZN7S2105C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2105C4_nt;
extern VTBL_ENTRY _ZTI10S2105C4_nt[];
extern  VTBL_ENTRY _ZTV10S2105C4_nt[];
extern Class_Descriptor cd_S2105C5;
extern VTBL_ENTRY _ZTI7S2105C5[];
extern  VTBL_ENTRY _ZTV7S2105C5[];
static Base_Class bases_S2105C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2105C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2105C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2105C3[];
extern void _ZN7S2105C3D1Ev();
extern void _ZN7S2105C3D0Ev();
extern void _ZN10S2105C4_nt2v2Ev();
extern void _ZN10S2105C4_nt2v3Ev();
extern void _ZN10S2105C4_nt2v4Ev();
extern void _ZN10S2105C4_nt2v5Ev();
extern void _ZN7S2105C32v9Ev();
extern void _ZN7S2105C33v10Ev();
extern void _ZN7S2105C33v11Ev();
extern void _ZN7S2105C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2105C3D1Ev,_ZThn8_N7S2105C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2105C3D0Ev,_ZThn8_N7S2105C3D0Ev)();
extern void _ZN7S2105C52v6Ev();
extern void _ZN7S2105C52v7Ev();
extern void _ZN7S2105C52v8Ev();
static  VTBL_ENTRY vtc_S2105C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2105C3[0]),
  (VTBL_ENTRY)&_ZN7S2105C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2105C3D0Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2105C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2105C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2105C3D1Ev,_ZThn8_N7S2105C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2105C3D0Ev,_ZThn8_N7S2105C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2105C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2105C3[];
extern  VTBL_ENTRY _ZTV7S2105C3[];
Class_Descriptor cd_S2105C3 = {  "S2105C3", // class name
  bases_S2105C3, 2,
  &(vtc_S2105C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2105C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2105C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2105C2  : S2105C3 {
  virtual  ~S2105C2(); // _ZN7S2105C2D1Ev
  S2105C2(); // tgen
};
//SIG(-1 S2105C2) C1{ BC2{ BC3{ vd v1 v2 v3 v4 Fp} BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v8 v9 v10 v11 Fp} vd}


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

static void Test_S2105C2()
{
  extern Class_Descriptor cd_S2105C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2105C2, buf);
    S2105C2 *dp, &lv = *(dp=new (buf) S2105C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2105C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2105C2)");
    check_base_class_offset(lv, (S2105C4_nt*)(S2105C3*), 0, "S2105C2");
    check_base_class_offset(lv, (S2105C5*)(S2105C3*), ABISELECT(16,8), "S2105C2");
    check_base_class_offset(lv, (S2105C3*), 0, "S2105C2");
    test_class_info(&lv, &cd_S2105C2);
    dp->~S2105C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2105C2(Test_S2105C2, "S2105C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2105C2C1Ev();
extern void _ZN7S2105C2D1Ev();
Name_Map name_map_S2105C2[] = {
  NSPAIR(_ZN7S2105C2C1Ev),
  NSPAIR(_ZN7S2105C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2105C4_nt;
extern VTBL_ENTRY _ZTI10S2105C4_nt[];
extern  VTBL_ENTRY _ZTV10S2105C4_nt[];
extern Class_Descriptor cd_S2105C5;
extern VTBL_ENTRY _ZTI7S2105C5[];
extern  VTBL_ENTRY _ZTV7S2105C5[];
extern Class_Descriptor cd_S2105C3;
extern VTBL_ENTRY _ZTI7S2105C3[];
extern  VTBL_ENTRY _ZTV7S2105C3[];
static Base_Class bases_S2105C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2105C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2105C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S2105C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2105C2[];
extern void _ZN7S2105C2D1Ev();
extern void _ZN7S2105C2D0Ev();
extern void _ZN10S2105C4_nt2v2Ev();
extern void _ZN10S2105C4_nt2v3Ev();
extern void _ZN10S2105C4_nt2v4Ev();
extern void _ZN10S2105C4_nt2v5Ev();
extern void _ZN7S2105C32v9Ev();
extern void _ZN7S2105C33v10Ev();
extern void _ZN7S2105C33v11Ev();
extern void _ZN7S2105C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2105C2D1Ev,_ZThn8_N7S2105C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2105C2D0Ev,_ZThn8_N7S2105C2D0Ev)();
extern void _ZN7S2105C52v6Ev();
extern void _ZN7S2105C52v7Ev();
extern void _ZN7S2105C52v8Ev();
static  VTBL_ENTRY vtc_S2105C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2105C2[0]),
  (VTBL_ENTRY)&_ZN7S2105C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2105C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2105C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2105C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2105C2D1Ev,_ZThn8_N7S2105C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2105C2D0Ev,_ZThn8_N7S2105C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2105C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2105C2[];
extern  VTBL_ENTRY _ZTV7S2105C2[];
Class_Descriptor cd_S2105C2 = {  "S2105C2", // class name
  bases_S2105C2, 3,
  &(vtc_S2105C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2105C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2105C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2105C9_nt  {
  ::S10155C4_nt s2105c9f0;
  void  mf2105c9(); // _ZN10S2105C9_nt8mf2105c9Ev
};
//SIG(-1 S2105C9_nt) C1{ m FC2{ FL[4]}}


void  S2105C9_nt ::mf2105c9(){}

//skip512 S2105C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2105C11_nt  {
  void *s2105c11f0;
  ::S10155C13_nt s2105c11f1;
  void  mf2105c11(); // _ZN11S2105C11_nt9mf2105c11Ev
};
//SIG(-1 S2105C11_nt) C1{ m Fp FC2{ Fi[4]}}


void  S2105C11_nt ::mf2105c11(){}

//skip512 S2105C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2105C8  {
  ::S2105C9_nt s2105c8f0;
  ::S2105C11_nt s2105c8f1;
  int s2105c8f2;
  void  mf2105c8(); // _ZN7S2105C88mf2105c8Ev
};
//SIG(-1 S2105C8) C1{ m FC2{ m FC3{ FL[4]}} FC4{ m Fp FC5{ Fi[4]}} Fi}


void  S2105C8 ::mf2105c8(){}

static void Test_S2105C8()
{
  {
    init_simple_test("S2105C8");
    S2105C8 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S2105C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2105C8)");
    check_field_offset(lv, s2105c8f0, 0, "S2105C8.s2105c8f0");
    check_field_offset(lv, s2105c8f1, 32, "S2105C8.s2105c8f1");
    check_field_offset(lv, s2105c8f2, ABISELECT(56,52), "S2105C8.s2105c8f2");
  }
}
static Arrange_To_Call_Me vS2105C8(Test_S2105C8, "S2105C8", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2105C1  : S2105C2 {
  ::S2105C8 s2105c1f0;
  ::S2123C20_nt s2105c1f1;
  ::S2123C20_nt s2105c1f2;
  ::S2123C20_nt s2105c1f3;
  __tsi64 s2105c1f4;
  virtual void  v1(); // _ZN7S2105C12v1Ev
  ~S2105C1(); // tgen
  S2105C1(); // tgen
};
//SIG(1 S2105C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 Fp} BC5{ vd v6 v7 v8 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v9 v10 v11 v12 Fp} vd} v1 FC8{ m FC9{ m FC10{ FL[4]}} FC11{ m Fp FC12{ Fi[4]}} Fi} FC6 FC6 FC6 FL}


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

static void Test_S2105C1()
{
  extern Class_Descriptor cd_S2105C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,36)];
    init_test(&cd_S2105C1, buf);
    S2105C1 *dp, &lv = *(dp=new (buf) S2105C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,140), "sizeof(S2105C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2105C1)");
    check_base_class_offset(lv, (S2105C4_nt*)(S2105C3*)(S2105C2*), 0, "S2105C1");
    check_base_class_offset(lv, (S2105C5*)(S2105C3*)(S2105C2*), ABISELECT(16,8), "S2105C1");
    check_base_class_offset(lv, (S2105C3*)(S2105C2*), 0, "S2105C1");
    check_base_class_offset(lv, (S2105C2*), 0, "S2105C1");
    check_field_offset(lv, s2105c1f0, ABISELECT(64,40), "S2105C1.s2105c1f0");
    check_field_offset(lv, s2105c1f1, ABISELECT(128,96), "S2105C1.s2105c1f1");
    check_field_offset(lv, s2105c1f2, ABISELECT(144,108), "S2105C1.s2105c1f2");
    check_field_offset(lv, s2105c1f3, ABISELECT(160,120), "S2105C1.s2105c1f3");
    check_field_offset(lv, s2105c1f4, ABISELECT(176,132), "S2105C1.s2105c1f4");
    test_class_info(&lv, &cd_S2105C1);
    dp->~S2105C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2105C1(Test_S2105C1, "S2105C1", ABISELECT(184,140));

#else // __cplusplus

extern void _ZN7S2105C1C1Ev();
extern void _ZN7S2105C1D1Ev();
Name_Map name_map_S2105C1[] = {
  NSPAIR(_ZN7S2105C1C1Ev),
  NSPAIR(_ZN7S2105C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2105C4_nt;
extern VTBL_ENTRY _ZTI10S2105C4_nt[];
extern  VTBL_ENTRY _ZTV10S2105C4_nt[];
extern Class_Descriptor cd_S2105C5;
extern VTBL_ENTRY _ZTI7S2105C5[];
extern  VTBL_ENTRY _ZTV7S2105C5[];
extern Class_Descriptor cd_S2105C3;
extern VTBL_ENTRY _ZTI7S2105C3[];
extern  VTBL_ENTRY _ZTV7S2105C3[];
extern Class_Descriptor cd_S2105C2;
extern VTBL_ENTRY _ZTI7S2105C2[];
extern  VTBL_ENTRY _ZTV7S2105C2[];
static Base_Class bases_S2105C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2105C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2105C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2105C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2105C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2105C1[];
extern void _ZN7S2105C1D1Ev();
extern void _ZN7S2105C1D0Ev();
extern void _ZN10S2105C4_nt2v2Ev();
extern void _ZN10S2105C4_nt2v3Ev();
extern void _ZN10S2105C4_nt2v4Ev();
extern void _ZN10S2105C4_nt2v5Ev();
extern void _ZN7S2105C32v9Ev();
extern void _ZN7S2105C33v10Ev();
extern void _ZN7S2105C33v11Ev();
extern void _ZN7S2105C33v12Ev();
extern void _ZN7S2105C12v1Ev();
extern void ABISELECT(_ZThn16_N7S2105C1D1Ev,_ZThn8_N7S2105C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2105C1D0Ev,_ZThn8_N7S2105C1D0Ev)();
extern void _ZN7S2105C52v6Ev();
extern void _ZN7S2105C52v7Ev();
extern void _ZN7S2105C52v8Ev();
static  VTBL_ENTRY vtc_S2105C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2105C1[0]),
  (VTBL_ENTRY)&_ZN7S2105C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2105C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2105C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2105C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2105C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2105C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2105C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2105C1D1Ev,_ZThn8_N7S2105C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2105C1D0Ev,_ZThn8_N7S2105C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2105C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2105C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2105C1[];
extern  VTBL_ENTRY _ZTV7S2105C1[];
Class_Descriptor cd_S2105C1 = {  "S2105C1", // class name
  bases_S2105C1, 4,
  &(vtc_S2105C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,140), // object size
  NSPAIRA(_ZTI7S2105C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2105C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2104C4  {
  void *s2104c4f0;
  virtual  ~S2104C4(); // _ZN7S2104C4D1Ev
  virtual void  v2(); // _ZN7S2104C42v2Ev
  virtual void  v3(); // _ZN7S2104C42v3Ev
  virtual void  v4(); // _ZN7S2104C42v4Ev
  virtual void  v5(); // _ZN7S2104C42v5Ev
  S2104C4(); // tgen
};
//SIG(-1 S2104C4) C1{ vd v1 v2 v3 v4 Fp}


 S2104C4 ::~S2104C4(){ note_dtor("S2104C4", this);}
void  S2104C4 ::v2(){vfunc_called(this, "_ZN7S2104C42v2Ev");}
void  S2104C4 ::v3(){vfunc_called(this, "_ZN7S2104C42v3Ev");}
void  S2104C4 ::v4(){vfunc_called(this, "_ZN7S2104C42v4Ev");}
void  S2104C4 ::v5(){vfunc_called(this, "_ZN7S2104C42v5Ev");}
S2104C4 ::S2104C4(){ note_ctor("S2104C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2104C4C1Ev();
extern void _ZN7S2104C4D1Ev();
Name_Map name_map_S2104C4[] = {
  NSPAIR(_ZN7S2104C4C1Ev),
  NSPAIR(_ZN7S2104C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2104C4[];
extern void _ZN7S2104C4D1Ev();
extern void _ZN7S2104C4D0Ev();
extern void _ZN7S2104C42v2Ev();
extern void _ZN7S2104C42v3Ev();
extern void _ZN7S2104C42v4Ev();
extern void _ZN7S2104C42v5Ev();
static  VTBL_ENTRY vtc_S2104C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2104C4[0]),
  (VTBL_ENTRY)&_ZN7S2104C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2104C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2104C4[];
extern  VTBL_ENTRY _ZTV7S2104C4[];
Class_Descriptor cd_S2104C4 = {  "S2104C4", // class name
  0,0,//no base classes
  &(vtc_S2104C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2104C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2104C4),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  S2104C5  {
  ::S2123C20_nt s2104c5f0;
  int s2104c5f1[2];
  char s2104c5f2;
  virtual  ~S2104C5(); // _ZN7S2104C5D1Ev
  virtual void  v6(); // _ZN7S2104C52v6Ev
  virtual void  v7(); // _ZN7S2104C52v7Ev
  virtual void  v8(); // _ZN7S2104C52v8Ev
  S2104C5(); // tgen
};
//SIG(-1 S2104C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2104C5 ::~S2104C5(){ note_dtor("S2104C5", this);}
void  S2104C5 ::v6(){vfunc_called(this, "_ZN7S2104C52v6Ev");}
void  S2104C5 ::v7(){vfunc_called(this, "_ZN7S2104C52v7Ev");}
void  S2104C5 ::v8(){vfunc_called(this, "_ZN7S2104C52v8Ev");}
S2104C5 ::S2104C5(){ note_ctor("S2104C5", this);} // tgen

static void Test_S2104C5()
{
  extern Class_Descriptor cd_S2104C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2104C5, buf);
    S2104C5 *dp, &lv = *(dp=new (buf) S2104C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2104C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2104C5)");
    check_field_offset(lv, s2104c5f0, ABISELECT(8,4), "S2104C5.s2104c5f0");
    check_field_offset(lv, s2104c5f1, ABISELECT(24,16), "S2104C5.s2104c5f1");
    check_field_offset(lv, s2104c5f2, ABISELECT(32,24), "S2104C5.s2104c5f2");
    test_class_info(&lv, &cd_S2104C5);
    dp->~S2104C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2104C5(Test_S2104C5, "S2104C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2104C5C1Ev();
extern void _ZN7S2104C5D1Ev();
Name_Map name_map_S2104C5[] = {
  NSPAIR(_ZN7S2104C5C1Ev),
  NSPAIR(_ZN7S2104C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2104C5[];
extern void _ZN7S2104C5D1Ev();
extern void _ZN7S2104C5D0Ev();
extern void _ZN7S2104C52v6Ev();
extern void _ZN7S2104C52v7Ev();
extern void _ZN7S2104C52v8Ev();
static  VTBL_ENTRY vtc_S2104C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2104C5[0]),
  (VTBL_ENTRY)&_ZN7S2104C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2104C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2104C5[];
extern  VTBL_ENTRY _ZTV7S2104C5[];
Class_Descriptor cd_S2104C5 = {  "S2104C5", // class name
  0,0,//no base classes
  &(vtc_S2104C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2104C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2104C5),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  S2104C3  : S2104C4 , S2104C5 {
  void *s2104c3f0;
  virtual  ~S2104C3(); // _ZN7S2104C3D1Ev
  virtual void  v9(); // _ZN7S2104C32v9Ev
  virtual void  v10(); // _ZN7S2104C33v10Ev
  virtual void  v11(); // _ZN7S2104C33v11Ev
  virtual void  v12(); // _ZN7S2104C33v12Ev
  S2104C3(); // tgen
};
//SIG(-1 S2104C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2104C3 ::~S2104C3(){ note_dtor("S2104C3", this);}
void  S2104C3 ::v9(){vfunc_called(this, "_ZN7S2104C32v9Ev");}
void  S2104C3 ::v10(){vfunc_called(this, "_ZN7S2104C33v10Ev");}
void  S2104C3 ::v11(){vfunc_called(this, "_ZN7S2104C33v11Ev");}
void  S2104C3 ::v12(){vfunc_called(this, "_ZN7S2104C33v12Ev");}
S2104C3 ::S2104C3(){ note_ctor("S2104C3", this);} // tgen

static void Test_S2104C3()
{
  extern Class_Descriptor cd_S2104C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2104C3, buf);
    S2104C3 *dp, &lv = *(dp=new (buf) S2104C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2104C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2104C3)");
    check_base_class_offset(lv, (S2104C4*), 0, "S2104C3");
    check_base_class_offset(lv, (S2104C5*), ABISELECT(16,8), "S2104C3");
    check_field_offset(lv, s2104c3f0, ABISELECT(56,36), "S2104C3.s2104c3f0");
    test_class_info(&lv, &cd_S2104C3);
    dp->~S2104C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2104C3(Test_S2104C3, "S2104C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2104C3C1Ev();
extern void _ZN7S2104C3D1Ev();
Name_Map name_map_S2104C3[] = {
  NSPAIR(_ZN7S2104C3C1Ev),
  NSPAIR(_ZN7S2104C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2104C4;
extern VTBL_ENTRY _ZTI7S2104C4[];
extern  VTBL_ENTRY _ZTV7S2104C4[];
extern Class_Descriptor cd_S2104C5;
extern VTBL_ENTRY _ZTI7S2104C5[];
extern  VTBL_ENTRY _ZTV7S2104C5[];
static Base_Class bases_S2104C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2104C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2104C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2104C3[];
extern void _ZN7S2104C3D1Ev();
extern void _ZN7S2104C3D0Ev();
extern void _ZN7S2104C42v2Ev();
extern void _ZN7S2104C42v3Ev();
extern void _ZN7S2104C42v4Ev();
extern void _ZN7S2104C42v5Ev();
extern void _ZN7S2104C32v9Ev();
extern void _ZN7S2104C33v10Ev();
extern void _ZN7S2104C33v11Ev();
extern void _ZN7S2104C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2104C3D1Ev,_ZThn8_N7S2104C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2104C3D0Ev,_ZThn8_N7S2104C3D0Ev)();
extern void _ZN7S2104C52v6Ev();
extern void _ZN7S2104C52v7Ev();
extern void _ZN7S2104C52v8Ev();
static  VTBL_ENTRY vtc_S2104C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2104C3[0]),
  (VTBL_ENTRY)&_ZN7S2104C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2104C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2104C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2104C3D1Ev,_ZThn8_N7S2104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2104C3D0Ev,_ZThn8_N7S2104C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2104C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2104C3[];
extern  VTBL_ENTRY _ZTV7S2104C3[];
Class_Descriptor cd_S2104C3 = {  "S2104C3", // class name
  bases_S2104C3, 2,
  &(vtc_S2104C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2104C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2104C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2104C2  : S2104C3 {
  virtual  ~S2104C2(); // _ZN7S2104C2D1Ev
  S2104C2(); // tgen
};
//SIG(-1 S2104C2) C1{ BC2{ BC3{ vd v1 v2 v3 v4 Fp} BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v8 v9 v10 v11 Fp} vd}


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

static void Test_S2104C2()
{
  extern Class_Descriptor cd_S2104C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2104C2, buf);
    S2104C2 *dp, &lv = *(dp=new (buf) S2104C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2104C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2104C2)");
    check_base_class_offset(lv, (S2104C4*)(S2104C3*), 0, "S2104C2");
    check_base_class_offset(lv, (S2104C5*)(S2104C3*), ABISELECT(16,8), "S2104C2");
    check_base_class_offset(lv, (S2104C3*), 0, "S2104C2");
    test_class_info(&lv, &cd_S2104C2);
    dp->~S2104C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2104C2(Test_S2104C2, "S2104C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2104C2C1Ev();
extern void _ZN7S2104C2D1Ev();
Name_Map name_map_S2104C2[] = {
  NSPAIR(_ZN7S2104C2C1Ev),
  NSPAIR(_ZN7S2104C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2104C4;
extern VTBL_ENTRY _ZTI7S2104C4[];
extern  VTBL_ENTRY _ZTV7S2104C4[];
extern Class_Descriptor cd_S2104C5;
extern VTBL_ENTRY _ZTI7S2104C5[];
extern  VTBL_ENTRY _ZTV7S2104C5[];
extern Class_Descriptor cd_S2104C3;
extern VTBL_ENTRY _ZTI7S2104C3[];
extern  VTBL_ENTRY _ZTV7S2104C3[];
static Base_Class bases_S2104C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2104C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2104C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S2104C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2104C2[];
extern void _ZN7S2104C2D1Ev();
extern void _ZN7S2104C2D0Ev();
extern void _ZN7S2104C42v2Ev();
extern void _ZN7S2104C42v3Ev();
extern void _ZN7S2104C42v4Ev();
extern void _ZN7S2104C42v5Ev();
extern void _ZN7S2104C32v9Ev();
extern void _ZN7S2104C33v10Ev();
extern void _ZN7S2104C33v11Ev();
extern void _ZN7S2104C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2104C2D1Ev,_ZThn8_N7S2104C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2104C2D0Ev,_ZThn8_N7S2104C2D0Ev)();
extern void _ZN7S2104C52v6Ev();
extern void _ZN7S2104C52v7Ev();
extern void _ZN7S2104C52v8Ev();
static  VTBL_ENTRY vtc_S2104C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2104C2[0]),
  (VTBL_ENTRY)&_ZN7S2104C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2104C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2104C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2104C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2104C2D1Ev,_ZThn8_N7S2104C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2104C2D0Ev,_ZThn8_N7S2104C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2104C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2104C2[];
extern  VTBL_ENTRY _ZTV7S2104C2[];
Class_Descriptor cd_S2104C2 = {  "S2104C2", // class name
  bases_S2104C2, 3,
  &(vtc_S2104C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2104C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2104C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2104C9_nt  {
  ::S10154C4_nt s2104c9f0;
  void  mf2104c9(); // _ZN10S2104C9_nt8mf2104c9Ev
};
//SIG(-1 S2104C9_nt) C1{ m FC2{ Fl[4]}}


void  S2104C9_nt ::mf2104c9(){}

//skip512 S2104C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2104C8  {
  ::S2104C9_nt s2104c8f0;
  ::S2105C11_nt s2104c8f1;
  int s2104c8f2;
  void  mf2104c8(); // _ZN7S2104C88mf2104c8Ev
};
//SIG(-1 S2104C8) C1{ m FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC5{ Fi[4]}} Fi}


void  S2104C8 ::mf2104c8(){}

static void Test_S2104C8()
{
  {
    init_simple_test("S2104C8");
    S2104C8 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2104C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2104C8)");
    check_field_offset(lv, s2104c8f0, 0, "S2104C8.s2104c8f0");
    check_field_offset(lv, s2104c8f1, ABISELECT(32,16), "S2104C8.s2104c8f1");
    check_field_offset(lv, s2104c8f2, ABISELECT(56,36), "S2104C8.s2104c8f2");
  }
}
static Arrange_To_Call_Me vS2104C8(Test_S2104C8, "S2104C8", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2104C1  : S2104C2 {
  ::S2104C8 s2104c1f0;
  ::S2123C20_nt s2104c1f1;
  ::S2123C20_nt s2104c1f2;
  ::S2123C20_nt s2104c1f3;
  __tsi64 s2104c1f4;
  virtual void  v1(); // _ZN7S2104C12v1Ev
  ~S2104C1(); // tgen
  S2104C1(); // tgen
};
//SIG(1 S2104C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 Fp} BC5{ vd v6 v7 v8 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v9 v10 v11 v12 Fp} vd} v1 FC8{ m FC9{ m FC10{ Fl[4]}} FC11{ m Fp FC12{ Fi[4]}} Fi} FC6 FC6 FC6 FL}


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

static void Test_S2104C1()
{
  extern Class_Descriptor cd_S2104C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S2104C1, buf);
    S2104C1 *dp, &lv = *(dp=new (buf) S2104C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S2104C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2104C1)");
    check_base_class_offset(lv, (S2104C4*)(S2104C3*)(S2104C2*), 0, "S2104C1");
    check_base_class_offset(lv, (S2104C5*)(S2104C3*)(S2104C2*), ABISELECT(16,8), "S2104C1");
    check_base_class_offset(lv, (S2104C3*)(S2104C2*), 0, "S2104C1");
    check_base_class_offset(lv, (S2104C2*), 0, "S2104C1");
    check_field_offset(lv, s2104c1f0, ABISELECT(64,40), "S2104C1.s2104c1f0");
    check_field_offset(lv, s2104c1f1, ABISELECT(128,80), "S2104C1.s2104c1f1");
    check_field_offset(lv, s2104c1f2, ABISELECT(144,92), "S2104C1.s2104c1f2");
    check_field_offset(lv, s2104c1f3, ABISELECT(160,104), "S2104C1.s2104c1f3");
    check_field_offset(lv, s2104c1f4, ABISELECT(176,116), "S2104C1.s2104c1f4");
    test_class_info(&lv, &cd_S2104C1);
    dp->~S2104C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2104C1(Test_S2104C1, "S2104C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S2104C1C1Ev();
extern void _ZN7S2104C1D1Ev();
Name_Map name_map_S2104C1[] = {
  NSPAIR(_ZN7S2104C1C1Ev),
  NSPAIR(_ZN7S2104C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2104C4;
extern VTBL_ENTRY _ZTI7S2104C4[];
extern  VTBL_ENTRY _ZTV7S2104C4[];
extern Class_Descriptor cd_S2104C5;
extern VTBL_ENTRY _ZTI7S2104C5[];
extern  VTBL_ENTRY _ZTV7S2104C5[];
extern Class_Descriptor cd_S2104C3;
extern VTBL_ENTRY _ZTI7S2104C3[];
extern  VTBL_ENTRY _ZTV7S2104C3[];
extern Class_Descriptor cd_S2104C2;
extern VTBL_ENTRY _ZTI7S2104C2[];
extern  VTBL_ENTRY _ZTV7S2104C2[];
static Base_Class bases_S2104C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2104C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2104C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2104C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2104C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2104C1[];
extern void _ZN7S2104C1D1Ev();
extern void _ZN7S2104C1D0Ev();
extern void _ZN7S2104C42v2Ev();
extern void _ZN7S2104C42v3Ev();
extern void _ZN7S2104C42v4Ev();
extern void _ZN7S2104C42v5Ev();
extern void _ZN7S2104C32v9Ev();
extern void _ZN7S2104C33v10Ev();
extern void _ZN7S2104C33v11Ev();
extern void _ZN7S2104C33v12Ev();
extern void _ZN7S2104C12v1Ev();
extern void ABISELECT(_ZThn16_N7S2104C1D1Ev,_ZThn8_N7S2104C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2104C1D0Ev,_ZThn8_N7S2104C1D0Ev)();
extern void _ZN7S2104C52v6Ev();
extern void _ZN7S2104C52v7Ev();
extern void _ZN7S2104C52v8Ev();
static  VTBL_ENTRY vtc_S2104C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2104C1[0]),
  (VTBL_ENTRY)&_ZN7S2104C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2104C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2104C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2104C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2104C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2104C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2104C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2104C1D1Ev,_ZThn8_N7S2104C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2104C1D0Ev,_ZThn8_N7S2104C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2104C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2104C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2104C1[];
extern  VTBL_ENTRY _ZTV7S2104C1[];
Class_Descriptor cd_S2104C1 = {  "S2104C1", // class name
  bases_S2104C1, 4,
  &(vtc_S2104C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S2104C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2104C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5095C3  {
  ::S2123C20_nt s5095c3f0;
  int s5095c3f1[2];
  char s5095c3f2;
  virtual  ~S5095C3(); // _ZN7S5095C3D1Ev
  virtual void  v4(); // _ZN7S5095C32v4Ev
  virtual void  v5(); // _ZN7S5095C32v5Ev
  virtual void  v6(); // _ZN7S5095C32v6Ev
  S5095C3(); // tgen
};
//SIG(-1 S5095C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5095C3 ::~S5095C3(){ note_dtor("S5095C3", this);}
void  S5095C3 ::v4(){vfunc_called(this, "_ZN7S5095C32v4Ev");}
void  S5095C3 ::v5(){vfunc_called(this, "_ZN7S5095C32v5Ev");}
void  S5095C3 ::v6(){vfunc_called(this, "_ZN7S5095C32v6Ev");}
S5095C3 ::S5095C3(){ note_ctor("S5095C3", this);} // tgen

static void Test_S5095C3()
{
  extern Class_Descriptor cd_S5095C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5095C3, buf);
    S5095C3 *dp, &lv = *(dp=new (buf) S5095C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5095C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5095C3)");
    check_field_offset(lv, s5095c3f0, ABISELECT(8,4), "S5095C3.s5095c3f0");
    check_field_offset(lv, s5095c3f1, ABISELECT(24,16), "S5095C3.s5095c3f1");
    check_field_offset(lv, s5095c3f2, ABISELECT(32,24), "S5095C3.s5095c3f2");
    test_class_info(&lv, &cd_S5095C3);
    dp->~S5095C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5095C3(Test_S5095C3, "S5095C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5095C3C1Ev();
extern void _ZN7S5095C3D1Ev();
Name_Map name_map_S5095C3[] = {
  NSPAIR(_ZN7S5095C3C1Ev),
  NSPAIR(_ZN7S5095C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5095C3[];
extern void _ZN7S5095C3D1Ev();
extern void _ZN7S5095C3D0Ev();
extern void _ZN7S5095C32v4Ev();
extern void _ZN7S5095C32v5Ev();
extern void _ZN7S5095C32v6Ev();
static  VTBL_ENTRY vtc_S5095C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5095C3[0]),
  (VTBL_ENTRY)&_ZN7S5095C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5095C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5095C3[];
extern  VTBL_ENTRY _ZTV7S5095C3[];
Class_Descriptor cd_S5095C3 = {  "S5095C3", // class name
  0,0,//no base classes
  &(vtc_S5095C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5095C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5095C3),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  S5095C2  : S5095C3 {
  int s5095c2f0;
  char s5095c2f1[2];
  ::S2123C20_nt s5095c2f2;
  virtual  ~S5095C2(); // _ZN7S5095C2D1Ev
  virtual void  v7(); // _ZN7S5095C22v7Ev
  virtual void  v8(); // _ZN7S5095C22v8Ev
  S5095C2(); // tgen
};
//SIG(-1 S5095C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi Fc[2] FC3}


 S5095C2 ::~S5095C2(){ note_dtor("S5095C2", this);}
void  S5095C2 ::v7(){vfunc_called(this, "_ZN7S5095C22v7Ev");}
void  S5095C2 ::v8(){vfunc_called(this, "_ZN7S5095C22v8Ev");}
S5095C2 ::S5095C2(){ note_ctor("S5095C2", this);} // tgen

static void Test_S5095C2()
{
  extern Class_Descriptor cd_S5095C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S5095C2, buf);
    S5095C2 *dp, &lv = *(dp=new (buf) S5095C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S5095C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5095C2)");
    check_base_class_offset(lv, (S5095C3*), 0, "S5095C2");
    check_field_offset(lv, s5095c2f0, ABISELECT(36,28), "S5095C2.s5095c2f0");
    check_field_offset(lv, s5095c2f1, ABISELECT(40,32), "S5095C2.s5095c2f1");
    check_field_offset(lv, s5095c2f2, ABISELECT(48,36), "S5095C2.s5095c2f2");
    test_class_info(&lv, &cd_S5095C2);
    dp->~S5095C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5095C2(Test_S5095C2, "S5095C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S5095C2C1Ev();
extern void _ZN7S5095C2D1Ev();
Name_Map name_map_S5095C2[] = {
  NSPAIR(_ZN7S5095C2C1Ev),
  NSPAIR(_ZN7S5095C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5095C3;
extern VTBL_ENTRY _ZTI7S5095C3[];
extern  VTBL_ENTRY _ZTV7S5095C3[];
static Base_Class bases_S5095C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5095C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5095C2[];
extern void _ZN7S5095C2D1Ev();
extern void _ZN7S5095C2D0Ev();
extern void _ZN7S5095C32v4Ev();
extern void _ZN7S5095C32v5Ev();
extern void _ZN7S5095C32v6Ev();
extern void _ZN7S5095C22v7Ev();
extern void _ZN7S5095C22v8Ev();
static  VTBL_ENTRY vtc_S5095C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5095C2[0]),
  (VTBL_ENTRY)&_ZN7S5095C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5095C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5095C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5095C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5095C2[];
extern  VTBL_ENTRY _ZTV7S5095C2[];
Class_Descriptor cd_S5095C2 = {  "S5095C2", // class name
  bases_S5095C2, 1,
  &(vtc_S5095C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S5095C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5095C2),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  S5095C6_nt  {
  __tsi64 s5095c6f0;
};
//SIG(-1 S5095C6_nt) C1{ FL}



//skip512 S5095C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5095C10_nt  {
  char s5095c10f0[20];
};
//SIG(-1 S5095C10_nt) C1{ Fc[20]}



//skip512 S5095C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5095C9_nt  {
  ::S5095C10_nt s5095c9f0;
  char s5095c9f1[16];
};
//SIG(-1 S5095C9_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S5095C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5095C8_nt  {
  char s5095c8f0[65];
  ::S5095C9_nt s5095c8f1;
  int s5095c8f2[2];
  __tsi64 s5095c8f3;
  int s5095c8f4;
};
//SIG(-1 S5095C8_nt) C1{ Fc[65] FC2{ FC3{ Fc[20]} Fc[16]} Fi[2] FL Fi}



//skip512 S5095C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5095C11_nt  {
  int s5095c11f0;
  char s5095c11f1[815];
  int s5095c11f2[5];
};
//SIG(-1 S5095C11_nt) C1{ Fi Fc[815] Fi[5]}



//skip512 S5095C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5095C7  {
  ::S5095C8_nt s5095c7f0;
  ::S5095C11_nt s5095c7f1;
};
//SIG(-1 S5095C7) C1{ FC2{ Fc[65] FC3{ FC4{ Fc[20]} Fc[16]} Fi[2] FL Fi} FC5{ Fi Fc[815] Fi[5]}}



static void Test_S5095C7()
{
  {
    init_simple_test("S5095C7");
    S5095C7 lv;
    check2(sizeof(lv), ABISELECT(968,964), "sizeof(S5095C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5095C7)");
    check_field_offset(lv, s5095c7f0, 0, "S5095C7.s5095c7f0");
    check_field_offset(lv, s5095c7f1, ABISELECT(128,124), "S5095C7.s5095c7f1");
  }
}
static Arrange_To_Call_Me vS5095C7(Test_S5095C7, "S5095C7", ABISELECT(968,964));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5095C1  : S5095C2 {
  ::S5095C6_nt s5095c1f0;
  ::S5095C7 s5095c1f1;
  virtual  ~S5095C1(); // _ZN7S5095C1D1Ev
  virtual void  v1(); // _ZN7S5095C12v1Ev
  virtual void  v2(); // _ZN7S5095C12v2Ev
  virtual void  v3(); // _ZN7S5095C12v3Ev
  S5095C1(); // tgen
};
//SIG(1 S5095C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 Fi Fc[2] FC4} vd v1 v2 v3 FC6{ FL} FC7{ FC8{ Fc[65] FC9{ FC10{ Fc[20]} Fc[16]} Fi[2] FL Fi} FC11{ Fi Fc[815] Fi[5]}}}


 S5095C1 ::~S5095C1(){ note_dtor("S5095C1", this);}
void  S5095C1 ::v1(){vfunc_called(this, "_ZN7S5095C12v1Ev");}
void  S5095C1 ::v2(){vfunc_called(this, "_ZN7S5095C12v2Ev");}
void  S5095C1 ::v3(){vfunc_called(this, "_ZN7S5095C12v3Ev");}
S5095C1 ::S5095C1(){ note_ctor("S5095C1", this);} // tgen

static void Test_S5095C1()
{
  extern Class_Descriptor cd_S5095C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,256)];
    init_test(&cd_S5095C1, buf);
    S5095C1 *dp, &lv = *(dp=new (buf) S5095C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1020), "sizeof(S5095C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5095C1)");
    check_base_class_offset(lv, (S5095C3*)(S5095C2*), 0, "S5095C1");
    check_base_class_offset(lv, (S5095C2*), 0, "S5095C1");
    check_field_offset(lv, s5095c1f0, ABISELECT(64,48), "S5095C1.s5095c1f0");
    check_field_offset(lv, s5095c1f1, ABISELECT(72,56), "S5095C1.s5095c1f1");
    test_class_info(&lv, &cd_S5095C1);
    dp->~S5095C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5095C1(Test_S5095C1, "S5095C1", ABISELECT(1040,1020));

#else // __cplusplus

extern void _ZN7S5095C1C1Ev();
extern void _ZN7S5095C1D1Ev();
Name_Map name_map_S5095C1[] = {
  NSPAIR(_ZN7S5095C1C1Ev),
  NSPAIR(_ZN7S5095C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5095C3;
extern VTBL_ENTRY _ZTI7S5095C3[];
extern  VTBL_ENTRY _ZTV7S5095C3[];
extern Class_Descriptor cd_S5095C2;
extern VTBL_ENTRY _ZTI7S5095C2[];
extern  VTBL_ENTRY _ZTV7S5095C2[];
static Base_Class bases_S5095C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5095C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5095C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5095C1[];
extern void _ZN7S5095C1D1Ev();
extern void _ZN7S5095C1D0Ev();
extern void _ZN7S5095C32v4Ev();
extern void _ZN7S5095C32v5Ev();
extern void _ZN7S5095C32v6Ev();
extern void _ZN7S5095C22v7Ev();
extern void _ZN7S5095C22v8Ev();
extern void _ZN7S5095C12v1Ev();
extern void _ZN7S5095C12v2Ev();
extern void _ZN7S5095C12v3Ev();
static  VTBL_ENTRY vtc_S5095C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5095C1[0]),
  (VTBL_ENTRY)&_ZN7S5095C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5095C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5095C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5095C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5095C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5095C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5095C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5095C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5095C1[];
extern  VTBL_ENTRY _ZTV7S5095C1[];
Class_Descriptor cd_S5095C1 = {  "S5095C1", // class name
  bases_S5095C1, 2,
  &(vtc_S5095C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1040,1020), // object size
  NSPAIRA(_ZTI7S5095C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5095C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5100C3  {
  ::S2123C20_nt s5100c3f0;
  int s5100c3f1[2];
  char s5100c3f2;
  virtual  ~S5100C3(); // _ZN7S5100C3D1Ev
  virtual void  v4(); // _ZN7S5100C32v4Ev
  virtual void  v5(); // _ZN7S5100C32v5Ev
  virtual void  v6(); // _ZN7S5100C32v6Ev
  S5100C3(); // tgen
};
//SIG(-1 S5100C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5100C3 ::~S5100C3(){ note_dtor("S5100C3", this);}
void  S5100C3 ::v4(){vfunc_called(this, "_ZN7S5100C32v4Ev");}
void  S5100C3 ::v5(){vfunc_called(this, "_ZN7S5100C32v5Ev");}
void  S5100C3 ::v6(){vfunc_called(this, "_ZN7S5100C32v6Ev");}
S5100C3 ::S5100C3(){ note_ctor("S5100C3", this);} // tgen

static void Test_S5100C3()
{
  extern Class_Descriptor cd_S5100C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5100C3, buf);
    S5100C3 *dp, &lv = *(dp=new (buf) S5100C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5100C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5100C3)");
    check_field_offset(lv, s5100c3f0, ABISELECT(8,4), "S5100C3.s5100c3f0");
    check_field_offset(lv, s5100c3f1, ABISELECT(24,16), "S5100C3.s5100c3f1");
    check_field_offset(lv, s5100c3f2, ABISELECT(32,24), "S5100C3.s5100c3f2");
    test_class_info(&lv, &cd_S5100C3);
    dp->~S5100C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5100C3(Test_S5100C3, "S5100C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5100C3C1Ev();
extern void _ZN7S5100C3D1Ev();
Name_Map name_map_S5100C3[] = {
  NSPAIR(_ZN7S5100C3C1Ev),
  NSPAIR(_ZN7S5100C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5100C3[];
extern void _ZN7S5100C3D1Ev();
extern void _ZN7S5100C3D0Ev();
extern void _ZN7S5100C32v4Ev();
extern void _ZN7S5100C32v5Ev();
extern void _ZN7S5100C32v6Ev();
static  VTBL_ENTRY vtc_S5100C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5100C3[0]),
  (VTBL_ENTRY)&_ZN7S5100C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5100C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5100C3[];
extern  VTBL_ENTRY _ZTV7S5100C3[];
Class_Descriptor cd_S5100C3 = {  "S5100C3", // class name
  0,0,//no base classes
  &(vtc_S5100C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5100C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5100C3),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  S5100C2  : S5100C3 {
  int s5100c2f0;
  char s5100c2f1[2];
  ::S2123C20_nt s5100c2f2;
  virtual  ~S5100C2(); // _ZN7S5100C2D1Ev
  virtual void  v7(); // _ZN7S5100C22v7Ev
  virtual void  v8(); // _ZN7S5100C22v8Ev
  S5100C2(); // tgen
};
//SIG(-1 S5100C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi Fc[2] FC3}


 S5100C2 ::~S5100C2(){ note_dtor("S5100C2", this);}
void  S5100C2 ::v7(){vfunc_called(this, "_ZN7S5100C22v7Ev");}
void  S5100C2 ::v8(){vfunc_called(this, "_ZN7S5100C22v8Ev");}
S5100C2 ::S5100C2(){ note_ctor("S5100C2", this);} // tgen

static void Test_S5100C2()
{
  extern Class_Descriptor cd_S5100C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S5100C2, buf);
    S5100C2 *dp, &lv = *(dp=new (buf) S5100C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S5100C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5100C2)");
    check_base_class_offset(lv, (S5100C3*), 0, "S5100C2");
    check_field_offset(lv, s5100c2f0, ABISELECT(36,28), "S5100C2.s5100c2f0");
    check_field_offset(lv, s5100c2f1, ABISELECT(40,32), "S5100C2.s5100c2f1");
    check_field_offset(lv, s5100c2f2, ABISELECT(48,36), "S5100C2.s5100c2f2");
    test_class_info(&lv, &cd_S5100C2);
    dp->~S5100C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5100C2(Test_S5100C2, "S5100C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S5100C2C1Ev();
extern void _ZN7S5100C2D1Ev();
Name_Map name_map_S5100C2[] = {
  NSPAIR(_ZN7S5100C2C1Ev),
  NSPAIR(_ZN7S5100C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5100C3;
extern VTBL_ENTRY _ZTI7S5100C3[];
extern  VTBL_ENTRY _ZTV7S5100C3[];
static Base_Class bases_S5100C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5100C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5100C2[];
extern void _ZN7S5100C2D1Ev();
extern void _ZN7S5100C2D0Ev();
extern void _ZN7S5100C32v4Ev();
extern void _ZN7S5100C32v5Ev();
extern void _ZN7S5100C32v6Ev();
extern void _ZN7S5100C22v7Ev();
extern void _ZN7S5100C22v8Ev();
static  VTBL_ENTRY vtc_S5100C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5100C2[0]),
  (VTBL_ENTRY)&_ZN7S5100C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5100C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5100C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5100C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5100C2[];
extern  VTBL_ENTRY _ZTV7S5100C2[];
Class_Descriptor cd_S5100C2 = {  "S5100C2", // class name
  bases_S5100C2, 1,
  &(vtc_S5100C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S5100C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5100C2),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  S5100C6  {
  void *s5100c6f0;
  int s5100c6f1;
  char s5100c6f2[165];
  int s5100c6f3[2];
  __tsi64 s5100c6f4;
};
//SIG(-1 S5100C6) C1{ Fp Fi Fc[165] Fi[2] FL}



static void Test_S5100C6()
{
  {
    init_simple_test("S5100C6");
    S5100C6 lv;
    check2(sizeof(lv), ABISELECT(200,192), "sizeof(S5100C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5100C6)");
    check_field_offset(lv, s5100c6f0, 0, "S5100C6.s5100c6f0");
    check_field_offset(lv, s5100c6f1, ABISELECT(8,4), "S5100C6.s5100c6f1");
    check_field_offset(lv, s5100c6f2, ABISELECT(12,8), "S5100C6.s5100c6f2");
    check_field_offset(lv, s5100c6f3, ABISELECT(180,176), "S5100C6.s5100c6f3");
    check_field_offset(lv, s5100c6f4, ABISELECT(192,184), "S5100C6.s5100c6f4");
  }
}
static Arrange_To_Call_Me vS5100C6(Test_S5100C6, "S5100C6", ABISELECT(200,192));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5100C9_nt  {
  char s5100c9f0[33];
  int s5100c9f1;
  char s5100c9f2;
  ::S2123C20_nt s5100c9f3;
  int s5100c9f4;
  char s5100c9f5;
};
//SIG(1 S5100C9_nt) C1{ Fc[33] Fi Fc FC2{ m Fp Fi FC3{ m}} Fi Fc}



//skip512 S5100C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5100C8_nt  {
  int s5100c8f0;
  ::S5100C9_nt s5100c8f1[5];
};
//SIG(-1 S5100C8_nt) C1{ Fi FC2{ Fc[33] Fi Fc FC3{ m Fp Fi FC4{ m}} Fi Fc}[5]}



//skip512 S5100C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5100C1  : S5100C2 {
  void *s5100c1f0;
  ::S5100C6 s5100c1f1;
  ::S21777C11_nt s5100c1f2;
  ::S5100C8_nt s5100c1f3;
  virtual  ~S5100C1(); // _ZN7S5100C1D1Ev
  virtual void  v1(); // _ZN7S5100C12v1Ev
  virtual void  v2(); // _ZN7S5100C12v2Ev
  virtual void  v3(); // _ZN7S5100C12v3Ev
  S5100C1(); // tgen
};
//SIG(1 S5100C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 Fi Fc[2] FC4} vd v1 v2 v3 Fp FC6{ Fp Fi Fc[165] Fi[2] FL} FC7{ m Fp} FC8{ Fi FC9{ Fc[33] Fi Fc FC4 Fi Fc}[5]}}


 S5100C1 ::~S5100C1(){ note_dtor("S5100C1", this);}
void  S5100C1 ::v1(){vfunc_called(this, "_ZN7S5100C12v1Ev");}
void  S5100C1 ::v2(){vfunc_called(this, "_ZN7S5100C12v2Ev");}
void  S5100C1 ::v3(){vfunc_called(this, "_ZN7S5100C12v3Ev");}
S5100C1 ::S5100C1(){ note_ctor("S5100C1", this);} // tgen

static void Test_S5100C1()
{
  extern Class_Descriptor cd_S5100C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(82,144)];
    init_test(&cd_S5100C1, buf);
    S5100C1 *dp, &lv = *(dp=new (buf) S5100C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(648,572), "sizeof(S5100C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5100C1)");
    check_base_class_offset(lv, (S5100C3*)(S5100C2*), 0, "S5100C1");
    check_base_class_offset(lv, (S5100C2*), 0, "S5100C1");
    check_field_offset(lv, s5100c1f0, ABISELECT(64,48), "S5100C1.s5100c1f0");
    check_field_offset(lv, s5100c1f1, ABISELECT(72,52), "S5100C1.s5100c1f1");
    check_field_offset(lv, s5100c1f2, ABISELECT(272,244), "S5100C1.s5100c1f2");
    check_field_offset(lv, s5100c1f3, ABISELECT(280,248), "S5100C1.s5100c1f3");
    test_class_info(&lv, &cd_S5100C1);
    dp->~S5100C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5100C1(Test_S5100C1, "S5100C1", ABISELECT(648,572));

#else // __cplusplus

extern void _ZN7S5100C1C1Ev();
extern void _ZN7S5100C1D1Ev();
Name_Map name_map_S5100C1[] = {
  NSPAIR(_ZN7S5100C1C1Ev),
  NSPAIR(_ZN7S5100C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5100C3;
extern VTBL_ENTRY _ZTI7S5100C3[];
extern  VTBL_ENTRY _ZTV7S5100C3[];
extern Class_Descriptor cd_S5100C2;
extern VTBL_ENTRY _ZTI7S5100C2[];
extern  VTBL_ENTRY _ZTV7S5100C2[];
static Base_Class bases_S5100C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5100C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5100C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5100C1[];
extern void _ZN7S5100C1D1Ev();
extern void _ZN7S5100C1D0Ev();
extern void _ZN7S5100C32v4Ev();
extern void _ZN7S5100C32v5Ev();
extern void _ZN7S5100C32v6Ev();
extern void _ZN7S5100C22v7Ev();
extern void _ZN7S5100C22v8Ev();
extern void _ZN7S5100C12v1Ev();
extern void _ZN7S5100C12v2Ev();
extern void _ZN7S5100C12v3Ev();
static  VTBL_ENTRY vtc_S5100C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5100C1[0]),
  (VTBL_ENTRY)&_ZN7S5100C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5100C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5100C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5100C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5100C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5100C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5100C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5100C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5100C1[];
extern  VTBL_ENTRY _ZTV7S5100C1[];
Class_Descriptor cd_S5100C1 = {  "S5100C1", // class name
  bases_S5100C1, 2,
  &(vtc_S5100C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(648,572), // object size
  NSPAIRA(_ZTI7S5100C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5100C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2106C4  {
  void *s2106c4f0;
  virtual  ~S2106C4(); // _ZN7S2106C4D1Ev
  virtual void  v2(); // _ZN7S2106C42v2Ev
  virtual void  v3(); // _ZN7S2106C42v3Ev
  virtual void  v4(); // _ZN7S2106C42v4Ev
  virtual void  v5(); // _ZN7S2106C42v5Ev
  S2106C4(); // tgen
};
//SIG(-1 S2106C4) C1{ vd v1 v2 v3 v4 Fp}


 S2106C4 ::~S2106C4(){ note_dtor("S2106C4", this);}
void  S2106C4 ::v2(){vfunc_called(this, "_ZN7S2106C42v2Ev");}
void  S2106C4 ::v3(){vfunc_called(this, "_ZN7S2106C42v3Ev");}
void  S2106C4 ::v4(){vfunc_called(this, "_ZN7S2106C42v4Ev");}
void  S2106C4 ::v5(){vfunc_called(this, "_ZN7S2106C42v5Ev");}
S2106C4 ::S2106C4(){ note_ctor("S2106C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2106C4C1Ev();
extern void _ZN7S2106C4D1Ev();
Name_Map name_map_S2106C4[] = {
  NSPAIR(_ZN7S2106C4C1Ev),
  NSPAIR(_ZN7S2106C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2106C4[];
extern void _ZN7S2106C4D1Ev();
extern void _ZN7S2106C4D0Ev();
extern void _ZN7S2106C42v2Ev();
extern void _ZN7S2106C42v3Ev();
extern void _ZN7S2106C42v4Ev();
extern void _ZN7S2106C42v5Ev();
static  VTBL_ENTRY vtc_S2106C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2106C4[0]),
  (VTBL_ENTRY)&_ZN7S2106C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2106C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2106C4[];
extern  VTBL_ENTRY _ZTV7S2106C4[];
Class_Descriptor cd_S2106C4 = {  "S2106C4", // class name
  0,0,//no base classes
  &(vtc_S2106C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2106C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2106C4),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  S2106C5  {
  ::S2123C20_nt s2106c5f0;
  int s2106c5f1[2];
  char s2106c5f2;
  virtual  ~S2106C5(); // _ZN7S2106C5D1Ev
  virtual void  v6(); // _ZN7S2106C52v6Ev
  virtual void  v7(); // _ZN7S2106C52v7Ev
  virtual void  v8(); // _ZN7S2106C52v8Ev
  S2106C5(); // tgen
};
//SIG(-1 S2106C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2106C5 ::~S2106C5(){ note_dtor("S2106C5", this);}
void  S2106C5 ::v6(){vfunc_called(this, "_ZN7S2106C52v6Ev");}
void  S2106C5 ::v7(){vfunc_called(this, "_ZN7S2106C52v7Ev");}
void  S2106C5 ::v8(){vfunc_called(this, "_ZN7S2106C52v8Ev");}
S2106C5 ::S2106C5(){ note_ctor("S2106C5", this);} // tgen

static void Test_S2106C5()
{
  extern Class_Descriptor cd_S2106C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2106C5, buf);
    S2106C5 *dp, &lv = *(dp=new (buf) S2106C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2106C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2106C5)");
    check_field_offset(lv, s2106c5f0, ABISELECT(8,4), "S2106C5.s2106c5f0");
    check_field_offset(lv, s2106c5f1, ABISELECT(24,16), "S2106C5.s2106c5f1");
    check_field_offset(lv, s2106c5f2, ABISELECT(32,24), "S2106C5.s2106c5f2");
    test_class_info(&lv, &cd_S2106C5);
    dp->~S2106C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2106C5(Test_S2106C5, "S2106C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2106C5C1Ev();
extern void _ZN7S2106C5D1Ev();
Name_Map name_map_S2106C5[] = {
  NSPAIR(_ZN7S2106C5C1Ev),
  NSPAIR(_ZN7S2106C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2106C5[];
extern void _ZN7S2106C5D1Ev();
extern void _ZN7S2106C5D0Ev();
extern void _ZN7S2106C52v6Ev();
extern void _ZN7S2106C52v7Ev();
extern void _ZN7S2106C52v8Ev();
static  VTBL_ENTRY vtc_S2106C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2106C5[0]),
  (VTBL_ENTRY)&_ZN7S2106C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2106C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2106C5[];
extern  VTBL_ENTRY _ZTV7S2106C5[];
Class_Descriptor cd_S2106C5 = {  "S2106C5", // class name
  0,0,//no base classes
  &(vtc_S2106C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2106C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2106C5),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  S2106C3  : S2106C4 , S2106C5 {
  void *s2106c3f0;
  virtual  ~S2106C3(); // _ZN7S2106C3D1Ev
  virtual void  v9(); // _ZN7S2106C32v9Ev
  virtual void  v10(); // _ZN7S2106C33v10Ev
  virtual void  v11(); // _ZN7S2106C33v11Ev
  virtual void  v12(); // _ZN7S2106C33v12Ev
  S2106C3(); // tgen
};
//SIG(-1 S2106C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2106C3 ::~S2106C3(){ note_dtor("S2106C3", this);}
void  S2106C3 ::v9(){vfunc_called(this, "_ZN7S2106C32v9Ev");}
void  S2106C3 ::v10(){vfunc_called(this, "_ZN7S2106C33v10Ev");}
void  S2106C3 ::v11(){vfunc_called(this, "_ZN7S2106C33v11Ev");}
void  S2106C3 ::v12(){vfunc_called(this, "_ZN7S2106C33v12Ev");}
S2106C3 ::S2106C3(){ note_ctor("S2106C3", this);} // tgen

static void Test_S2106C3()
{
  extern Class_Descriptor cd_S2106C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2106C3, buf);
    S2106C3 *dp, &lv = *(dp=new (buf) S2106C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2106C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2106C3)");
    check_base_class_offset(lv, (S2106C4*), 0, "S2106C3");
    check_base_class_offset(lv, (S2106C5*), ABISELECT(16,8), "S2106C3");
    check_field_offset(lv, s2106c3f0, ABISELECT(56,36), "S2106C3.s2106c3f0");
    test_class_info(&lv, &cd_S2106C3);
    dp->~S2106C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2106C3(Test_S2106C3, "S2106C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2106C3C1Ev();
extern void _ZN7S2106C3D1Ev();
Name_Map name_map_S2106C3[] = {
  NSPAIR(_ZN7S2106C3C1Ev),
  NSPAIR(_ZN7S2106C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2106C4;
extern VTBL_ENTRY _ZTI7S2106C4[];
extern  VTBL_ENTRY _ZTV7S2106C4[];
extern Class_Descriptor cd_S2106C5;
extern VTBL_ENTRY _ZTI7S2106C5[];
extern  VTBL_ENTRY _ZTV7S2106C5[];
static Base_Class bases_S2106C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2106C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2106C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2106C3[];
extern void _ZN7S2106C3D1Ev();
extern void _ZN7S2106C3D0Ev();
extern void _ZN7S2106C42v2Ev();
extern void _ZN7S2106C42v3Ev();
extern void _ZN7S2106C42v4Ev();
extern void _ZN7S2106C42v5Ev();
extern void _ZN7S2106C32v9Ev();
extern void _ZN7S2106C33v10Ev();
extern void _ZN7S2106C33v11Ev();
extern void _ZN7S2106C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2106C3D1Ev,_ZThn8_N7S2106C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2106C3D0Ev,_ZThn8_N7S2106C3D0Ev)();
extern void _ZN7S2106C52v6Ev();
extern void _ZN7S2106C52v7Ev();
extern void _ZN7S2106C52v8Ev();
static  VTBL_ENTRY vtc_S2106C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2106C3[0]),
  (VTBL_ENTRY)&_ZN7S2106C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2106C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2106C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2106C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2106C3D1Ev,_ZThn8_N7S2106C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2106C3D0Ev,_ZThn8_N7S2106C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2106C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2106C3[];
extern  VTBL_ENTRY _ZTV7S2106C3[];
Class_Descriptor cd_S2106C3 = {  "S2106C3", // class name
  bases_S2106C3, 2,
  &(vtc_S2106C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2106C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2106C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2106C2  : S2106C3 {
  virtual  ~S2106C2(); // _ZN7S2106C2D1Ev
  S2106C2(); // tgen
};
//SIG(-1 S2106C2) C1{ BC2{ BC3{ vd v1 v2 v3 v4 Fp} BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v8 v9 v10 v11 Fp} vd}


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

static void Test_S2106C2()
{
  extern Class_Descriptor cd_S2106C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2106C2, buf);
    S2106C2 *dp, &lv = *(dp=new (buf) S2106C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2106C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2106C2)");
    check_base_class_offset(lv, (S2106C4*)(S2106C3*), 0, "S2106C2");
    check_base_class_offset(lv, (S2106C5*)(S2106C3*), ABISELECT(16,8), "S2106C2");
    check_base_class_offset(lv, (S2106C3*), 0, "S2106C2");
    test_class_info(&lv, &cd_S2106C2);
    dp->~S2106C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2106C2(Test_S2106C2, "S2106C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2106C2C1Ev();
extern void _ZN7S2106C2D1Ev();
Name_Map name_map_S2106C2[] = {
  NSPAIR(_ZN7S2106C2C1Ev),
  NSPAIR(_ZN7S2106C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2106C4;
extern VTBL_ENTRY _ZTI7S2106C4[];
extern  VTBL_ENTRY _ZTV7S2106C4[];
extern Class_Descriptor cd_S2106C5;
extern VTBL_ENTRY _ZTI7S2106C5[];
extern  VTBL_ENTRY _ZTV7S2106C5[];
extern Class_Descriptor cd_S2106C3;
extern VTBL_ENTRY _ZTI7S2106C3[];
extern  VTBL_ENTRY _ZTV7S2106C3[];
static Base_Class bases_S2106C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2106C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2106C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S2106C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2106C2[];
extern void _ZN7S2106C2D1Ev();
extern void _ZN7S2106C2D0Ev();
extern void _ZN7S2106C42v2Ev();
extern void _ZN7S2106C42v3Ev();
extern void _ZN7S2106C42v4Ev();
extern void _ZN7S2106C42v5Ev();
extern void _ZN7S2106C32v9Ev();
extern void _ZN7S2106C33v10Ev();
extern void _ZN7S2106C33v11Ev();
extern void _ZN7S2106C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2106C2D1Ev,_ZThn8_N7S2106C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2106C2D0Ev,_ZThn8_N7S2106C2D0Ev)();
extern void _ZN7S2106C52v6Ev();
extern void _ZN7S2106C52v7Ev();
extern void _ZN7S2106C52v8Ev();
static  VTBL_ENTRY vtc_S2106C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2106C2[0]),
  (VTBL_ENTRY)&_ZN7S2106C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2106C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2106C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2106C2D1Ev,_ZThn8_N7S2106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2106C2D0Ev,_ZThn8_N7S2106C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2106C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2106C2[];
extern  VTBL_ENTRY _ZTV7S2106C2[];
Class_Descriptor cd_S2106C2 = {  "S2106C2", // class name
  bases_S2106C2, 3,
  &(vtc_S2106C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2106C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2106C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2106C9_nt  {
  __tsi64 s2106c9f0[4];
  void  mf2106c9(); // _ZN10S2106C9_nt8mf2106c9Ev
};
//SIG(-1 S2106C9_nt) C1{ m FL[4]}


void  S2106C9_nt ::mf2106c9(){}

//skip512 S2106C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2106C8  {
  ::S2106C9_nt s2106c8f0;
  ::S2105C11_nt s2106c8f1;
  int s2106c8f2;
  void  mf2106c8(); // _ZN7S2106C88mf2106c8Ev
};
//SIG(-1 S2106C8) C1{ m FC2{ m FL[4]} FC3{ m Fp FC4{ Fi[4]}} Fi}


void  S2106C8 ::mf2106c8(){}

static void Test_S2106C8()
{
  {
    init_simple_test("S2106C8");
    S2106C8 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S2106C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2106C8)");
    check_field_offset(lv, s2106c8f0, 0, "S2106C8.s2106c8f0");
    check_field_offset(lv, s2106c8f1, 32, "S2106C8.s2106c8f1");
    check_field_offset(lv, s2106c8f2, ABISELECT(56,52), "S2106C8.s2106c8f2");
  }
}
static Arrange_To_Call_Me vS2106C8(Test_S2106C8, "S2106C8", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2106C1  : S2106C2 {
  ::S2106C8 s2106c1f0;
  ::S2123C20_nt s2106c1f1;
  ::S2123C20_nt s2106c1f2;
  ::S2123C20_nt s2106c1f3;
  __tsi64 s2106c1f4;
  virtual void  v1(); // _ZN7S2106C12v1Ev
  ~S2106C1(); // tgen
  S2106C1(); // tgen
};
//SIG(1 S2106C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 Fp} BC5{ vd v6 v7 v8 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v9 v10 v11 v12 Fp} vd} v1 FC8{ m FC9{ m FL[4]} FC10{ m Fp FC11{ Fi[4]}} Fi} FC6 FC6 FC6 FL}


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

static void Test_S2106C1()
{
  extern Class_Descriptor cd_S2106C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,36)];
    init_test(&cd_S2106C1, buf);
    S2106C1 *dp, &lv = *(dp=new (buf) S2106C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,140), "sizeof(S2106C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2106C1)");
    check_base_class_offset(lv, (S2106C4*)(S2106C3*)(S2106C2*), 0, "S2106C1");
    check_base_class_offset(lv, (S2106C5*)(S2106C3*)(S2106C2*), ABISELECT(16,8), "S2106C1");
    check_base_class_offset(lv, (S2106C3*)(S2106C2*), 0, "S2106C1");
    check_base_class_offset(lv, (S2106C2*), 0, "S2106C1");
    check_field_offset(lv, s2106c1f0, ABISELECT(64,40), "S2106C1.s2106c1f0");
    check_field_offset(lv, s2106c1f1, ABISELECT(128,96), "S2106C1.s2106c1f1");
    check_field_offset(lv, s2106c1f2, ABISELECT(144,108), "S2106C1.s2106c1f2");
    check_field_offset(lv, s2106c1f3, ABISELECT(160,120), "S2106C1.s2106c1f3");
    check_field_offset(lv, s2106c1f4, ABISELECT(176,132), "S2106C1.s2106c1f4");
    test_class_info(&lv, &cd_S2106C1);
    dp->~S2106C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2106C1(Test_S2106C1, "S2106C1", ABISELECT(184,140));

#else // __cplusplus

extern void _ZN7S2106C1C1Ev();
extern void _ZN7S2106C1D1Ev();
Name_Map name_map_S2106C1[] = {
  NSPAIR(_ZN7S2106C1C1Ev),
  NSPAIR(_ZN7S2106C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2106C4;
extern VTBL_ENTRY _ZTI7S2106C4[];
extern  VTBL_ENTRY _ZTV7S2106C4[];
extern Class_Descriptor cd_S2106C5;
extern VTBL_ENTRY _ZTI7S2106C5[];
extern  VTBL_ENTRY _ZTV7S2106C5[];
extern Class_Descriptor cd_S2106C3;
extern VTBL_ENTRY _ZTI7S2106C3[];
extern  VTBL_ENTRY _ZTV7S2106C3[];
extern Class_Descriptor cd_S2106C2;
extern VTBL_ENTRY _ZTI7S2106C2[];
extern  VTBL_ENTRY _ZTV7S2106C2[];
static Base_Class bases_S2106C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2106C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2106C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2106C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2106C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2106C1[];
extern void _ZN7S2106C1D1Ev();
extern void _ZN7S2106C1D0Ev();
extern void _ZN7S2106C42v2Ev();
extern void _ZN7S2106C42v3Ev();
extern void _ZN7S2106C42v4Ev();
extern void _ZN7S2106C42v5Ev();
extern void _ZN7S2106C32v9Ev();
extern void _ZN7S2106C33v10Ev();
extern void _ZN7S2106C33v11Ev();
extern void _ZN7S2106C33v12Ev();
extern void _ZN7S2106C12v1Ev();
extern void ABISELECT(_ZThn16_N7S2106C1D1Ev,_ZThn8_N7S2106C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2106C1D0Ev,_ZThn8_N7S2106C1D0Ev)();
extern void _ZN7S2106C52v6Ev();
extern void _ZN7S2106C52v7Ev();
extern void _ZN7S2106C52v8Ev();
static  VTBL_ENTRY vtc_S2106C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2106C1[0]),
  (VTBL_ENTRY)&_ZN7S2106C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2106C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2106C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2106C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2106C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2106C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2106C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2106C1D1Ev,_ZThn8_N7S2106C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2106C1D0Ev,_ZThn8_N7S2106C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2106C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2106C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2106C1[];
extern  VTBL_ENTRY _ZTV7S2106C1[];
Class_Descriptor cd_S2106C1 = {  "S2106C1", // class name
  bases_S2106C1, 4,
  &(vtc_S2106C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,140), // object size
  NSPAIRA(_ZTI7S2106C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2106C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6521C2  {
  ::S19922C6 s6521c2f0;
  int s6521c2f1[7];
  int s6521c2f2;
  void *s6521c2f3;
  int s6521c2f4;
  virtual void  v2(); // _ZN7S6521C22v2Ev
  ~S6521C2(); // tgen
  S6521C2(); // tgen
};
//SIG(-1 S6521C2) C1{ v1 FC2{ BC3{ v3 FL[8] Fc[4] FL:7 Fi FD FL} v2 FC3 FC3 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fi[7] Fi Fp Fi}


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

static void Test_S6521C2()
{
  extern Class_Descriptor cd_S6521C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,94)];
    init_test(&cd_S6521C2, buf);
    S6521C2 *dp, &lv = *(dp=new (buf) S6521C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,372), "sizeof(S6521C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6521C2)");
    check_field_offset(lv, s6521c2f0, ABISELECT(16,4), "S6521C2.s6521c2f0");
    check_field_offset(lv, s6521c2f1, ABISELECT(432,332), "S6521C2.s6521c2f1");
    check_field_offset(lv, s6521c2f2, ABISELECT(460,360), "S6521C2.s6521c2f2");
    check_field_offset(lv, s6521c2f3, ABISELECT(464,364), "S6521C2.s6521c2f3");
    check_field_offset(lv, s6521c2f4, ABISELECT(472,368), "S6521C2.s6521c2f4");
    test_class_info(&lv, &cd_S6521C2);
    dp->~S6521C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6521C2(Test_S6521C2, "S6521C2", ABISELECT(480,372));

#else // __cplusplus

extern void _ZN7S6521C2C1Ev();
extern void _ZN7S6521C2D1Ev();
Name_Map name_map_S6521C2[] = {
  NSPAIR(_ZN7S6521C2C1Ev),
  NSPAIR(_ZN7S6521C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6521C2[];
extern void _ZN7S6521C22v2Ev();
static  VTBL_ENTRY vtc_S6521C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6521C2[0]),
  (VTBL_ENTRY)&_ZN7S6521C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6521C2[];
extern  VTBL_ENTRY _ZTV7S6521C2[];
Class_Descriptor cd_S6521C2 = {  "S6521C2", // class name
  0,0,//no base classes
  &(vtc_S6521C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,372), // object size
  NSPAIRA(_ZTI7S6521C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6521C2),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  S6521C1  : S6521C2 {
  ::S19290C15 s6521c1f0;
  char s6521c1f1;
  char s6521c1f2:5;
  virtual void  v1(); // _ZN7S6521C12v1Ev
  ~S6521C1(); // tgen
  S6521C1(); // tgen
};
//SIG(1 S6521C1) C1{ BC2{ v2 FC3{ BC4{ v4 FL[8] Fc[4] FL:7 Fi FD FL} v3 FC4 FC4 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fi[7] Fi Fp Fi} v1 FC6{ vd v5 Fc Fp Fp Fp Fi Fp Fi} Fc Fc:5}


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

static void Test_S6521C1()
{
  extern Class_Descriptor cd_S6521C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,103)];
    init_test(&cd_S6521C1, buf);
    S6521C1 *dp, &lv = *(dp=new (buf) S6521C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,408), "sizeof(S6521C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6521C1)");
    check_base_class_offset(lv, (S6521C2*), 0, "S6521C1");
    check_field_offset(lv, s6521c1f0, ABISELECT(480,372), "S6521C1.s6521c1f0");
    check_field_offset(lv, s6521c1f1, ABISELECT(544,404), "S6521C1.s6521c1f1");
    set_bf_and_test(lv, s6521c1f2, ABISELECT(545,405), 0, 5, 1, "S6521C1");
    set_bf_and_test(lv, s6521c1f2, ABISELECT(545,405), 0, 5, hide_sll(1LL<<4), "S6521C1");
    test_class_info(&lv, &cd_S6521C1);
    dp->~S6521C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6521C1(Test_S6521C1, "S6521C1", ABISELECT(560,408));

#else // __cplusplus

extern void _ZN7S6521C1C1Ev();
extern void _ZN7S6521C1D1Ev();
Name_Map name_map_S6521C1[] = {
  NSPAIR(_ZN7S6521C1C1Ev),
  NSPAIR(_ZN7S6521C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6521C2;
extern VTBL_ENTRY _ZTI7S6521C2[];
extern  VTBL_ENTRY _ZTV7S6521C2[];
static Base_Class bases_S6521C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6521C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6521C1[];
extern void _ZN7S6521C22v2Ev();
extern void _ZN7S6521C12v1Ev();
static  VTBL_ENTRY vtc_S6521C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6521C1[0]),
  (VTBL_ENTRY)&_ZN7S6521C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6521C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6521C1[];
extern  VTBL_ENTRY _ZTV7S6521C1[];
Class_Descriptor cd_S6521C1 = {  "S6521C1", // class name
  bases_S6521C1, 1,
  &(vtc_S6521C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(560,408), // object size
  NSPAIRA(_ZTI7S6521C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6521C1),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  S6520C2  {
  ::S19921C6 s6520c2f0;
  int s6520c2f1[7];
  int s6520c2f2;
  void *s6520c2f3;
  int s6520c2f4;
  virtual void  v2(); // _ZN7S6520C22v2Ev
  ~S6520C2(); // tgen
  S6520C2(); // tgen
};
//SIG(-1 S6520C2) C1{ v1 FC2{ BC3{ v3 FL[8] Fc[4] Fi:7 Fi FD FL} v2 FC3 FC3 FU4{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fi[7] Fi Fp Fi}


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

static void Test_S6520C2()
{
  extern Class_Descriptor cd_S6520C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,94)];
    init_test(&cd_S6520C2, buf);
    S6520C2 *dp, &lv = *(dp=new (buf) S6520C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,372), "sizeof(S6520C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6520C2)");
    check_field_offset(lv, s6520c2f0, ABISELECT(16,4), "S6520C2.s6520c2f0");
    check_field_offset(lv, s6520c2f1, ABISELECT(432,332), "S6520C2.s6520c2f1");
    check_field_offset(lv, s6520c2f2, ABISELECT(460,360), "S6520C2.s6520c2f2");
    check_field_offset(lv, s6520c2f3, ABISELECT(464,364), "S6520C2.s6520c2f3");
    check_field_offset(lv, s6520c2f4, ABISELECT(472,368), "S6520C2.s6520c2f4");
    test_class_info(&lv, &cd_S6520C2);
    dp->~S6520C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6520C2(Test_S6520C2, "S6520C2", ABISELECT(480,372));

#else // __cplusplus

extern void _ZN7S6520C2C1Ev();
extern void _ZN7S6520C2D1Ev();
Name_Map name_map_S6520C2[] = {
  NSPAIR(_ZN7S6520C2C1Ev),
  NSPAIR(_ZN7S6520C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6520C2[];
extern void _ZN7S6520C22v2Ev();
static  VTBL_ENTRY vtc_S6520C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6520C2[0]),
  (VTBL_ENTRY)&_ZN7S6520C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6520C2[];
extern  VTBL_ENTRY _ZTV7S6520C2[];
Class_Descriptor cd_S6520C2 = {  "S6520C2", // class name
  0,0,//no base classes
  &(vtc_S6520C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,372), // object size
  NSPAIRA(_ZTI7S6520C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6520C2),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  S6520C1  : S6520C2 {
  ::S19290C15 s6520c1f0;
  char s6520c1f1;
  char s6520c1f2:5;
  virtual void  v1(); // _ZN7S6520C12v1Ev
  ~S6520C1(); // tgen
  S6520C1(); // tgen
};
//SIG(1 S6520C1) C1{ BC2{ v2 FC3{ BC4{ v4 FL[8] Fc[4] Fi:7 Fi FD FL} v3 FC4 FC4 FU5{ m Fi Fp Fp Fp FL[3] Fc FL Fi[7]}} Fi[7] Fi Fp Fi} v1 FC6{ vd v5 Fc Fp Fp Fp Fi Fp Fi} Fc Fc:5}


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

static void Test_S6520C1()
{
  extern Class_Descriptor cd_S6520C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,103)];
    init_test(&cd_S6520C1, buf);
    S6520C1 *dp, &lv = *(dp=new (buf) S6520C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,408), "sizeof(S6520C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6520C1)");
    check_base_class_offset(lv, (S6520C2*), 0, "S6520C1");
    check_field_offset(lv, s6520c1f0, ABISELECT(480,372), "S6520C1.s6520c1f0");
    check_field_offset(lv, s6520c1f1, ABISELECT(544,404), "S6520C1.s6520c1f1");
    set_bf_and_test(lv, s6520c1f2, ABISELECT(545,405), 0, 5, 1, "S6520C1");
    set_bf_and_test(lv, s6520c1f2, ABISELECT(545,405), 0, 5, hide_sll(1LL<<4), "S6520C1");
    test_class_info(&lv, &cd_S6520C1);
    dp->~S6520C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6520C1(Test_S6520C1, "S6520C1", ABISELECT(560,408));

#else // __cplusplus

extern void _ZN7S6520C1C1Ev();
extern void _ZN7S6520C1D1Ev();
Name_Map name_map_S6520C1[] = {
  NSPAIR(_ZN7S6520C1C1Ev),
  NSPAIR(_ZN7S6520C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6520C2;
extern VTBL_ENTRY _ZTI7S6520C2[];
extern  VTBL_ENTRY _ZTV7S6520C2[];
static Base_Class bases_S6520C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6520C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6520C1[];
extern void _ZN7S6520C22v2Ev();
extern void _ZN7S6520C12v1Ev();
static  VTBL_ENTRY vtc_S6520C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6520C1[0]),
  (VTBL_ENTRY)&_ZN7S6520C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6520C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6520C1[];
extern  VTBL_ENTRY _ZTV7S6520C1[];
Class_Descriptor cd_S6520C1 = {  "S6520C1", // class name
  bases_S6520C1, 1,
  &(vtc_S6520C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(560,408), // object size
  NSPAIRA(_ZTI7S6520C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6520C1),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  S2399C4  {
  void *s2399c4f0;
  virtual  ~S2399C4(); // _ZN7S2399C4D1Ev
  virtual void  v6(); // _ZN7S2399C42v6Ev
  virtual void  v7(); // _ZN7S2399C42v7Ev
  virtual void  v8(); // _ZN7S2399C42v8Ev
  virtual void  v9(); // _ZN7S2399C42v9Ev
  S2399C4(); // tgen
};
//SIG(-1 S2399C4) C1{ vd v1 v2 v3 v4 Fp}


 S2399C4 ::~S2399C4(){ note_dtor("S2399C4", this);}
void  S2399C4 ::v6(){vfunc_called(this, "_ZN7S2399C42v6Ev");}
void  S2399C4 ::v7(){vfunc_called(this, "_ZN7S2399C42v7Ev");}
void  S2399C4 ::v8(){vfunc_called(this, "_ZN7S2399C42v8Ev");}
void  S2399C4 ::v9(){vfunc_called(this, "_ZN7S2399C42v9Ev");}
S2399C4 ::S2399C4(){ note_ctor("S2399C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2399C4C1Ev();
extern void _ZN7S2399C4D1Ev();
Name_Map name_map_S2399C4[] = {
  NSPAIR(_ZN7S2399C4C1Ev),
  NSPAIR(_ZN7S2399C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2399C4[];
extern void _ZN7S2399C4D1Ev();
extern void _ZN7S2399C4D0Ev();
extern void _ZN7S2399C42v6Ev();
extern void _ZN7S2399C42v7Ev();
extern void _ZN7S2399C42v8Ev();
extern void _ZN7S2399C42v9Ev();
static  VTBL_ENTRY vtc_S2399C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2399C4[0]),
  (VTBL_ENTRY)&_ZN7S2399C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2399C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S2399C4[];
extern  VTBL_ENTRY _ZTV7S2399C4[];
Class_Descriptor cd_S2399C4 = {  "S2399C4", // class name
  0,0,//no base classes
  &(vtc_S2399C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2399C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2399C4),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  S2399C5  {
  ::S2123C20_nt s2399c5f0;
  int s2399c5f1[2];
  char s2399c5f2;
  virtual  ~S2399C5(); // _ZN7S2399C5D1Ev
  virtual void  v10(); // _ZN7S2399C53v10Ev
  virtual void  v11(); // _ZN7S2399C53v11Ev
  virtual void  v12(); // _ZN7S2399C53v12Ev
  S2399C5(); // tgen
};
//SIG(-1 S2399C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2399C5 ::~S2399C5(){ note_dtor("S2399C5", this);}
void  S2399C5 ::v10(){vfunc_called(this, "_ZN7S2399C53v10Ev");}
void  S2399C5 ::v11(){vfunc_called(this, "_ZN7S2399C53v11Ev");}
void  S2399C5 ::v12(){vfunc_called(this, "_ZN7S2399C53v12Ev");}
S2399C5 ::S2399C5(){ note_ctor("S2399C5", this);} // tgen

static void Test_S2399C5()
{
  extern Class_Descriptor cd_S2399C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2399C5, buf);
    S2399C5 *dp, &lv = *(dp=new (buf) S2399C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2399C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2399C5)");
    check_field_offset(lv, s2399c5f0, ABISELECT(8,4), "S2399C5.s2399c5f0");
    check_field_offset(lv, s2399c5f1, ABISELECT(24,16), "S2399C5.s2399c5f1");
    check_field_offset(lv, s2399c5f2, ABISELECT(32,24), "S2399C5.s2399c5f2");
    test_class_info(&lv, &cd_S2399C5);
    dp->~S2399C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2399C5(Test_S2399C5, "S2399C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2399C5C1Ev();
extern void _ZN7S2399C5D1Ev();
Name_Map name_map_S2399C5[] = {
  NSPAIR(_ZN7S2399C5C1Ev),
  NSPAIR(_ZN7S2399C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2399C5[];
extern void _ZN7S2399C5D1Ev();
extern void _ZN7S2399C5D0Ev();
extern void _ZN7S2399C53v10Ev();
extern void _ZN7S2399C53v11Ev();
extern void _ZN7S2399C53v12Ev();
static  VTBL_ENTRY vtc_S2399C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2399C5[0]),
  (VTBL_ENTRY)&_ZN7S2399C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2399C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2399C5[];
extern  VTBL_ENTRY _ZTV7S2399C5[];
Class_Descriptor cd_S2399C5 = {  "S2399C5", // class name
  0,0,//no base classes
  &(vtc_S2399C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2399C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2399C5),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  S2399C3  : S2399C4 , S2399C5 {
  void *s2399c3f0;
  virtual  ~S2399C3(); // _ZN7S2399C3D1Ev
  virtual void  v13(); // _ZN7S2399C33v13Ev
  virtual void  v14(); // _ZN7S2399C33v14Ev
  virtual void  v15(); // _ZN7S2399C33v15Ev
  virtual void  v16(); // _ZN7S2399C33v16Ev
  S2399C3(); // tgen
};
//SIG(-1 S2399C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2399C3 ::~S2399C3(){ note_dtor("S2399C3", this);}
void  S2399C3 ::v13(){vfunc_called(this, "_ZN7S2399C33v13Ev");}
void  S2399C3 ::v14(){vfunc_called(this, "_ZN7S2399C33v14Ev");}
void  S2399C3 ::v15(){vfunc_called(this, "_ZN7S2399C33v15Ev");}
void  S2399C3 ::v16(){vfunc_called(this, "_ZN7S2399C33v16Ev");}
S2399C3 ::S2399C3(){ note_ctor("S2399C3", this);} // tgen

static void Test_S2399C3()
{
  extern Class_Descriptor cd_S2399C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2399C3, buf);
    S2399C3 *dp, &lv = *(dp=new (buf) S2399C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2399C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2399C3)");
    check_base_class_offset(lv, (S2399C4*), 0, "S2399C3");
    check_base_class_offset(lv, (S2399C5*), ABISELECT(16,8), "S2399C3");
    check_field_offset(lv, s2399c3f0, ABISELECT(56,36), "S2399C3.s2399c3f0");
    test_class_info(&lv, &cd_S2399C3);
    dp->~S2399C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2399C3(Test_S2399C3, "S2399C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2399C3C1Ev();
extern void _ZN7S2399C3D1Ev();
Name_Map name_map_S2399C3[] = {
  NSPAIR(_ZN7S2399C3C1Ev),
  NSPAIR(_ZN7S2399C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2399C4;
extern VTBL_ENTRY _ZTI7S2399C4[];
extern  VTBL_ENTRY _ZTV7S2399C4[];
extern Class_Descriptor cd_S2399C5;
extern VTBL_ENTRY _ZTI7S2399C5[];
extern  VTBL_ENTRY _ZTV7S2399C5[];
static Base_Class bases_S2399C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2399C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2399C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2399C3[];
extern void _ZN7S2399C3D1Ev();
extern void _ZN7S2399C3D0Ev();
extern void _ZN7S2399C42v6Ev();
extern void _ZN7S2399C42v7Ev();
extern void _ZN7S2399C42v8Ev();
extern void _ZN7S2399C42v9Ev();
extern void _ZN7S2399C33v13Ev();
extern void _ZN7S2399C33v14Ev();
extern void _ZN7S2399C33v15Ev();
extern void _ZN7S2399C33v16Ev();
extern void ABISELECT(_ZThn16_N7S2399C3D1Ev,_ZThn8_N7S2399C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2399C3D0Ev,_ZThn8_N7S2399C3D0Ev)();
extern void _ZN7S2399C53v10Ev();
extern void _ZN7S2399C53v11Ev();
extern void _ZN7S2399C53v12Ev();
static  VTBL_ENTRY vtc_S2399C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2399C3[0]),
  (VTBL_ENTRY)&_ZN7S2399C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2399C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v16Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2399C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2399C3D1Ev,_ZThn8_N7S2399C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2399C3D0Ev,_ZThn8_N7S2399C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2399C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2399C3[];
extern  VTBL_ENTRY _ZTV7S2399C3[];
Class_Descriptor cd_S2399C3 = {  "S2399C3", // class name
  bases_S2399C3, 2,
  &(vtc_S2399C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2399C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2399C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2399C2  : S2399C3 {
  int s2399c2f0[2];
  virtual  ~S2399C2(); // _ZN7S2399C2D1Ev
  virtual void  v17(); // _ZN7S2399C23v17Ev
  virtual void  v18(); // _ZN7S2399C23v18Ev
  virtual void  v19(); // _ZN7S2399C23v19Ev
  virtual void  v20(); // _ZN7S2399C23v20Ev
  virtual void  v21(); // _ZN7S2399C23v21Ev
  virtual void  v22(); // _ZN7S2399C23v22Ev
  S2399C2(); // tgen
};
//SIG(-1 S2399C2) C1{ BC2{ BC3{ vd v7 v8 v9 v10 Fp} BC4{ vd v11 v12 v13 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v14 v15 v16 v17 Fp} vd v1 v2 v3 v4 v5 v6 Fi[2]}


 S2399C2 ::~S2399C2(){ note_dtor("S2399C2", this);}
void  S2399C2 ::v17(){vfunc_called(this, "_ZN7S2399C23v17Ev");}
void  S2399C2 ::v18(){vfunc_called(this, "_ZN7S2399C23v18Ev");}
void  S2399C2 ::v19(){vfunc_called(this, "_ZN7S2399C23v19Ev");}
void  S2399C2 ::v20(){vfunc_called(this, "_ZN7S2399C23v20Ev");}
void  S2399C2 ::v21(){vfunc_called(this, "_ZN7S2399C23v21Ev");}
void  S2399C2 ::v22(){vfunc_called(this, "_ZN7S2399C23v22Ev");}
S2399C2 ::S2399C2(){ note_ctor("S2399C2", this);} // tgen

static void Test_S2399C2()
{
  extern Class_Descriptor cd_S2399C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2399C2, buf);
    S2399C2 *dp, &lv = *(dp=new (buf) S2399C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2399C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2399C2)");
    check_base_class_offset(lv, (S2399C4*)(S2399C3*), 0, "S2399C2");
    check_base_class_offset(lv, (S2399C5*)(S2399C3*), ABISELECT(16,8), "S2399C2");
    check_base_class_offset(lv, (S2399C3*), 0, "S2399C2");
    check_field_offset(lv, s2399c2f0, ABISELECT(64,40), "S2399C2.s2399c2f0");
    test_class_info(&lv, &cd_S2399C2);
    dp->~S2399C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2399C2(Test_S2399C2, "S2399C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2399C2C1Ev();
extern void _ZN7S2399C2D1Ev();
Name_Map name_map_S2399C2[] = {
  NSPAIR(_ZN7S2399C2C1Ev),
  NSPAIR(_ZN7S2399C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2399C4;
extern VTBL_ENTRY _ZTI7S2399C4[];
extern  VTBL_ENTRY _ZTV7S2399C4[];
extern Class_Descriptor cd_S2399C5;
extern VTBL_ENTRY _ZTI7S2399C5[];
extern  VTBL_ENTRY _ZTV7S2399C5[];
extern Class_Descriptor cd_S2399C3;
extern VTBL_ENTRY _ZTI7S2399C3[];
extern  VTBL_ENTRY _ZTV7S2399C3[];
static Base_Class bases_S2399C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2399C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2399C5,    ABISELECT(16,8), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2399C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2399C2[];
extern void _ZN7S2399C2D1Ev();
extern void _ZN7S2399C2D0Ev();
extern void _ZN7S2399C42v6Ev();
extern void _ZN7S2399C42v7Ev();
extern void _ZN7S2399C42v8Ev();
extern void _ZN7S2399C42v9Ev();
extern void _ZN7S2399C33v13Ev();
extern void _ZN7S2399C33v14Ev();
extern void _ZN7S2399C33v15Ev();
extern void _ZN7S2399C33v16Ev();
extern void _ZN7S2399C23v17Ev();
extern void _ZN7S2399C23v18Ev();
extern void _ZN7S2399C23v19Ev();
extern void _ZN7S2399C23v20Ev();
extern void _ZN7S2399C23v21Ev();
extern void _ZN7S2399C23v22Ev();
extern void ABISELECT(_ZThn16_N7S2399C2D1Ev,_ZThn8_N7S2399C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2399C2D0Ev,_ZThn8_N7S2399C2D0Ev)();
extern void _ZN7S2399C53v10Ev();
extern void _ZN7S2399C53v11Ev();
extern void _ZN7S2399C53v12Ev();
static  VTBL_ENTRY vtc_S2399C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2399C2[0]),
  (VTBL_ENTRY)&_ZN7S2399C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2399C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v22Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2399C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2399C2D1Ev,_ZThn8_N7S2399C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2399C2D0Ev,_ZThn8_N7S2399C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2399C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2399C2[];
extern  VTBL_ENTRY _ZTV7S2399C2[];
Class_Descriptor cd_S2399C2 = {  "S2399C2", // class name
  bases_S2399C2, 3,
  &(vtc_S2399C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2399C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2399C2),25, //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  S2399C1  : S2399C2 {
  virtual void  v1(); // _ZN7S2399C12v1Ev
  virtual void  v2(); // _ZN7S2399C12v2Ev
  virtual void  v3(); // _ZN7S2399C12v3Ev
  virtual void  v4(); // _ZN7S2399C12v4Ev
  virtual void  v5(); // _ZN7S2399C12v5Ev
  ~S2399C1(); // tgen
  S2399C1(); // tgen
};
//SIG(1 S2399C1) C1{ BC2{ BC3{ BC4{ vd v6 v7 v8 v9 Fp} BC5{ vd v10 v11 v12 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v13 v14 v15 v16 Fp} vd v17 v18 v19 v20 v21 v22 Fi[2]} v1 v2 v3 v4 v5}


void  S2399C1 ::v1(){vfunc_called(this, "_ZN7S2399C12v1Ev");}
void  S2399C1 ::v2(){vfunc_called(this, "_ZN7S2399C12v2Ev");}
void  S2399C1 ::v3(){vfunc_called(this, "_ZN7S2399C12v3Ev");}
void  S2399C1 ::v4(){vfunc_called(this, "_ZN7S2399C12v4Ev");}
void  S2399C1 ::v5(){vfunc_called(this, "_ZN7S2399C12v5Ev");}
S2399C1 ::~S2399C1(){ note_dtor("S2399C1", this);} // tgen
S2399C1 ::S2399C1(){ note_ctor("S2399C1", this);} // tgen

static void Test_S2399C1()
{
  extern Class_Descriptor cd_S2399C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2399C1, buf);
    S2399C1 *dp, &lv = *(dp=new (buf) S2399C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2399C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2399C1)");
    check_base_class_offset(lv, (S2399C4*)(S2399C3*)(S2399C2*), 0, "S2399C1");
    check_base_class_offset(lv, (S2399C5*)(S2399C3*)(S2399C2*), ABISELECT(16,8), "S2399C1");
    check_base_class_offset(lv, (S2399C3*)(S2399C2*), 0, "S2399C1");
    check_base_class_offset(lv, (S2399C2*), 0, "S2399C1");
    test_class_info(&lv, &cd_S2399C1);
    dp->~S2399C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2399C1(Test_S2399C1, "S2399C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2399C1C1Ev();
extern void _ZN7S2399C1D1Ev();
Name_Map name_map_S2399C1[] = {
  NSPAIR(_ZN7S2399C1C1Ev),
  NSPAIR(_ZN7S2399C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2399C4;
extern VTBL_ENTRY _ZTI7S2399C4[];
extern  VTBL_ENTRY _ZTV7S2399C4[];
extern Class_Descriptor cd_S2399C5;
extern VTBL_ENTRY _ZTI7S2399C5[];
extern  VTBL_ENTRY _ZTV7S2399C5[];
extern Class_Descriptor cd_S2399C3;
extern VTBL_ENTRY _ZTI7S2399C3[];
extern  VTBL_ENTRY _ZTV7S2399C3[];
extern Class_Descriptor cd_S2399C2;
extern VTBL_ENTRY _ZTI7S2399C2[];
extern  VTBL_ENTRY _ZTV7S2399C2[];
static Base_Class bases_S2399C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2399C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2399C5,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2399C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2399C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2399C1[];
extern void _ZN7S2399C1D1Ev();
extern void _ZN7S2399C1D0Ev();
extern void _ZN7S2399C42v6Ev();
extern void _ZN7S2399C42v7Ev();
extern void _ZN7S2399C42v8Ev();
extern void _ZN7S2399C42v9Ev();
extern void _ZN7S2399C33v13Ev();
extern void _ZN7S2399C33v14Ev();
extern void _ZN7S2399C33v15Ev();
extern void _ZN7S2399C33v16Ev();
extern void _ZN7S2399C23v17Ev();
extern void _ZN7S2399C23v18Ev();
extern void _ZN7S2399C23v19Ev();
extern void _ZN7S2399C23v20Ev();
extern void _ZN7S2399C23v21Ev();
extern void _ZN7S2399C23v22Ev();
extern void _ZN7S2399C12v1Ev();
extern void _ZN7S2399C12v2Ev();
extern void _ZN7S2399C12v3Ev();
extern void _ZN7S2399C12v4Ev();
extern void _ZN7S2399C12v5Ev();
extern void ABISELECT(_ZThn16_N7S2399C1D1Ev,_ZThn8_N7S2399C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2399C1D0Ev,_ZThn8_N7S2399C1D0Ev)();
extern void _ZN7S2399C53v10Ev();
extern void _ZN7S2399C53v11Ev();
extern void _ZN7S2399C53v12Ev();
static  VTBL_ENTRY vtc_S2399C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2399C1[0]),
  (VTBL_ENTRY)&_ZN7S2399C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2399C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2399C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2399C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2399C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2399C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2399C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2399C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2399C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2399C12v5Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2399C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2399C1D1Ev,_ZThn8_N7S2399C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2399C1D0Ev,_ZThn8_N7S2399C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2399C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v11Ev,
  (VTBL_ENTRY)&_ZN7S2399C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2399C1[];
extern  VTBL_ENTRY _ZTV7S2399C1[];
Class_Descriptor cd_S2399C1 = {  "S2399C1", // class name
  bases_S2399C1, 4,
  &(vtc_S2399C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2399C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2399C1),30, //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  S18351C1  {
  void *s18351c1f0[4];
  ::S2123C37 s18351c1f1;
  void *s18351c1f2[7];
  ::S3681C6_nt s18351c1f3;
  void *s18351c1f4[5];
  int s18351c1f5;
  void *s18351c1f6[8];
  ::S2123C29_nt s18351c1f7;
  void *s18351c1f8[2];
  char s18351c1f9[3];
  void *s18351c1f10[2];
  int s18351c1f11[3];
  ::S3681C11 s18351c1f12;
  ::S3681C11 s18351c1f13;
  char s18351c1f14;
  void  mf18351c1(); // _ZN8S18351C19mf18351c1Ev
};
//SIG(1 S18351C1) C1{ m Fp[4] FC2{ m Fp Fi[2] FC3{ m}} Fp[7] FC4{ m Fp[2]} Fp[5] Fi Fp[8] FC5{ m Fp Fi[2] FC3} Fp[2] Fc[3] Fp[2] Fi[3] FC6{ BC7{ vd v2 v3 v4 Fp Fi} v1} FC6 Fc}


void  S18351C1 ::mf18351c1(){}

static void Test_S18351C1()
{
  {
    init_simple_test("S18351C1");
    S18351C1 lv;
    check2(sizeof(lv), ABISELECT(376,200), "sizeof(S18351C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18351C1)");
    check_field_offset(lv, s18351c1f0, 0, "S18351C1.s18351c1f0");
    check_field_offset(lv, s18351c1f1, ABISELECT(32,16), "S18351C1.s18351c1f1");
    check_field_offset(lv, s18351c1f2, ABISELECT(56,32), "S18351C1.s18351c1f2");
    check_field_offset(lv, s18351c1f3, ABISELECT(112,60), "S18351C1.s18351c1f3");
    check_field_offset(lv, s18351c1f4, ABISELECT(128,68), "S18351C1.s18351c1f4");
    check_field_offset(lv, s18351c1f5, ABISELECT(168,88), "S18351C1.s18351c1f5");
    check_field_offset(lv, s18351c1f6, ABISELECT(176,92), "S18351C1.s18351c1f6");
    check_field_offset(lv, s18351c1f7, ABISELECT(240,124), "S18351C1.s18351c1f7");
    check_field_offset(lv, s18351c1f8, ABISELECT(264,140), "S18351C1.s18351c1f8");
    check_field_offset(lv, s18351c1f9, ABISELECT(280,148), "S18351C1.s18351c1f9");
    check_field_offset(lv, s18351c1f10, ABISELECT(288,152), "S18351C1.s18351c1f10");
    check_field_offset(lv, s18351c1f11, ABISELECT(304,160), "S18351C1.s18351c1f11");
    check_field_offset(lv, s18351c1f12, ABISELECT(320,172), "S18351C1.s18351c1f12");
    check_field_offset(lv, s18351c1f13, ABISELECT(344,184), "S18351C1.s18351c1f13");
    check_field_offset(lv, s18351c1f14, ABISELECT(368,196), "S18351C1.s18351c1f14");
  }
}
static Arrange_To_Call_Me vS18351C1(Test_S18351C1, "S18351C1", ABISELECT(376,200));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2373C4  {
  void *s2373c4f0;
  virtual  ~S2373C4(); // _ZN7S2373C4D1Ev
  virtual void  v5(); // _ZN7S2373C42v5Ev
  virtual void  v6(); // _ZN7S2373C42v6Ev
  virtual void  v7(); // _ZN7S2373C42v7Ev
  virtual void  v8(); // _ZN7S2373C42v8Ev
  S2373C4(); // tgen
};
//SIG(-1 S2373C4) C1{ vd v1 v2 v3 v4 Fp}


 S2373C4 ::~S2373C4(){ note_dtor("S2373C4", this);}
void  S2373C4 ::v5(){vfunc_called(this, "_ZN7S2373C42v5Ev");}
void  S2373C4 ::v6(){vfunc_called(this, "_ZN7S2373C42v6Ev");}
void  S2373C4 ::v7(){vfunc_called(this, "_ZN7S2373C42v7Ev");}
void  S2373C4 ::v8(){vfunc_called(this, "_ZN7S2373C42v8Ev");}
S2373C4 ::S2373C4(){ note_ctor("S2373C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2373C4C1Ev();
extern void _ZN7S2373C4D1Ev();
Name_Map name_map_S2373C4[] = {
  NSPAIR(_ZN7S2373C4C1Ev),
  NSPAIR(_ZN7S2373C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2373C4[];
extern void _ZN7S2373C4D1Ev();
extern void _ZN7S2373C4D0Ev();
extern void _ZN7S2373C42v5Ev();
extern void _ZN7S2373C42v6Ev();
extern void _ZN7S2373C42v7Ev();
extern void _ZN7S2373C42v8Ev();
static  VTBL_ENTRY vtc_S2373C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2373C4[0]),
  (VTBL_ENTRY)&_ZN7S2373C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2373C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S2373C4[];
extern  VTBL_ENTRY _ZTV7S2373C4[];
Class_Descriptor cd_S2373C4 = {  "S2373C4", // class name
  0,0,//no base classes
  &(vtc_S2373C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2373C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2373C4),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  S2373C5  {
  ::S2123C20_nt s2373c5f0;
  int s2373c5f1[2];
  char s2373c5f2;
  virtual  ~S2373C5(); // _ZN7S2373C5D1Ev
  virtual void  v9(); // _ZN7S2373C52v9Ev
  virtual void  v10(); // _ZN7S2373C53v10Ev
  virtual void  v11(); // _ZN7S2373C53v11Ev
  S2373C5(); // tgen
};
//SIG(-1 S2373C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2373C5 ::~S2373C5(){ note_dtor("S2373C5", this);}
void  S2373C5 ::v9(){vfunc_called(this, "_ZN7S2373C52v9Ev");}
void  S2373C5 ::v10(){vfunc_called(this, "_ZN7S2373C53v10Ev");}
void  S2373C5 ::v11(){vfunc_called(this, "_ZN7S2373C53v11Ev");}
S2373C5 ::S2373C5(){ note_ctor("S2373C5", this);} // tgen

static void Test_S2373C5()
{
  extern Class_Descriptor cd_S2373C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2373C5, buf);
    S2373C5 *dp, &lv = *(dp=new (buf) S2373C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2373C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2373C5)");
    check_field_offset(lv, s2373c5f0, ABISELECT(8,4), "S2373C5.s2373c5f0");
    check_field_offset(lv, s2373c5f1, ABISELECT(24,16), "S2373C5.s2373c5f1");
    check_field_offset(lv, s2373c5f2, ABISELECT(32,24), "S2373C5.s2373c5f2");
    test_class_info(&lv, &cd_S2373C5);
    dp->~S2373C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2373C5(Test_S2373C5, "S2373C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2373C5C1Ev();
extern void _ZN7S2373C5D1Ev();
Name_Map name_map_S2373C5[] = {
  NSPAIR(_ZN7S2373C5C1Ev),
  NSPAIR(_ZN7S2373C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2373C5[];
extern void _ZN7S2373C5D1Ev();
extern void _ZN7S2373C5D0Ev();
extern void _ZN7S2373C52v9Ev();
extern void _ZN7S2373C53v10Ev();
extern void _ZN7S2373C53v11Ev();
static  VTBL_ENTRY vtc_S2373C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2373C5[0]),
  (VTBL_ENTRY)&_ZN7S2373C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2373C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2373C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2373C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2373C53v11Ev,
};
extern VTBL_ENTRY _ZTI7S2373C5[];
extern  VTBL_ENTRY _ZTV7S2373C5[];
Class_Descriptor cd_S2373C5 = {  "S2373C5", // class name
  0,0,//no base classes
  &(vtc_S2373C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2373C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2373C5),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  S2373C3  : S2373C4 , S2373C5 {
  void *s2373c3f0;
  virtual  ~S2373C3(); // _ZN7S2373C3D1Ev
  virtual void  v12(); // _ZN7S2373C33v12Ev
  virtual void  v13(); // _ZN7S2373C33v13Ev
  virtual void  v14(); // _ZN7S2373C33v14Ev
  virtual void  v15(); // _ZN7S2373C33v15Ev
  S2373C3(); // tgen
};
//SIG(-1 S2373C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2373C3 ::~S2373C3(){ note_dtor("S2373C3", this);}
void  S2373C3 ::v12(){vfunc_called(this, "_ZN7S2373C33v12Ev");}
void  S2373C3 ::v13(){vfunc_called(this, "_ZN7S2373C33v13Ev");}
void  S2373C3 ::v14(){vfunc_called(this, "_ZN7S2373C33v14Ev");}
void  S2373C3 ::v15(){vfunc_called(this, "_ZN7S2373C33v15Ev");}
S2373C3 ::S2373C3(){ note_ctor("S2373C3", this);} // tgen

static void Test_S2373C3()
{
  extern Class_Descriptor cd_S2373C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2373C3, buf);
    S2373C3 *dp, &lv = *(dp=new (buf) S2373C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2373C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2373C3)");
    check_base_class_offset(lv, (S2373C4*), 0, "S2373C3");
    check_base_class_offset(lv, (S2373C5*), ABISELECT(16,8), "S2373C3");
    check_field_offset(lv, s2373c3f0, ABISELECT(56,36), "S2373C3.s2373c3f0");
    test_class_info(&lv, &cd_S2373C3);
    dp->~S2373C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2373C3(Test_S2373C3, "S2373C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2373C3C1Ev();
extern void _ZN7S2373C3D1Ev();
Name_Map name_map_S2373C3[] = {
  NSPAIR(_ZN7S2373C3C1Ev),
  NSPAIR(_ZN7S2373C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2373C4;
extern VTBL_ENTRY _ZTI7S2373C4[];
extern  VTBL_ENTRY _ZTV7S2373C4[];
extern Class_Descriptor cd_S2373C5;
extern VTBL_ENTRY _ZTI7S2373C5[];
extern  VTBL_ENTRY _ZTV7S2373C5[];
static Base_Class bases_S2373C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2373C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2373C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2373C3[];
extern void _ZN7S2373C3D1Ev();
extern void _ZN7S2373C3D0Ev();
extern void _ZN7S2373C42v5Ev();
extern void _ZN7S2373C42v6Ev();
extern void _ZN7S2373C42v7Ev();
extern void _ZN7S2373C42v8Ev();
extern void _ZN7S2373C33v12Ev();
extern void _ZN7S2373C33v13Ev();
extern void _ZN7S2373C33v14Ev();
extern void _ZN7S2373C33v15Ev();
extern void ABISELECT(_ZThn16_N7S2373C3D1Ev,_ZThn8_N7S2373C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2373C3D0Ev,_ZThn8_N7S2373C3D0Ev)();
extern void _ZN7S2373C52v9Ev();
extern void _ZN7S2373C53v10Ev();
extern void _ZN7S2373C53v11Ev();
static  VTBL_ENTRY vtc_S2373C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2373C3[0]),
  (VTBL_ENTRY)&_ZN7S2373C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2373C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v15Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2373C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2373C3D1Ev,_ZThn8_N7S2373C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2373C3D0Ev,_ZThn8_N7S2373C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2373C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2373C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2373C53v11Ev,
};
extern VTBL_ENTRY _ZTI7S2373C3[];
extern  VTBL_ENTRY _ZTV7S2373C3[];
Class_Descriptor cd_S2373C3 = {  "S2373C3", // class name
  bases_S2373C3, 2,
  &(vtc_S2373C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2373C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2373C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2373C2  : S2373C3 {
  int s2373c2f0[2];
  virtual  ~S2373C2(); // _ZN7S2373C2D1Ev
  virtual void  v16(); // _ZN7S2373C23v16Ev
  virtual void  v17(); // _ZN7S2373C23v17Ev
  virtual void  v18(); // _ZN7S2373C23v18Ev
  virtual void  v19(); // _ZN7S2373C23v19Ev
  virtual void  v20(); // _ZN7S2373C23v20Ev
  virtual void  v21(); // _ZN7S2373C23v21Ev
  S2373C2(); // tgen
};
//SIG(-1 S2373C2) C1{ BC2{ BC3{ vd v7 v8 v9 v10 Fp} BC4{ vd v11 v12 v13 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v14 v15 v16 v17 Fp} vd v1 v2 v3 v4 v5 v6 Fi[2]}


 S2373C2 ::~S2373C2(){ note_dtor("S2373C2", this);}
void  S2373C2 ::v16(){vfunc_called(this, "_ZN7S2373C23v16Ev");}
void  S2373C2 ::v17(){vfunc_called(this, "_ZN7S2373C23v17Ev");}
void  S2373C2 ::v18(){vfunc_called(this, "_ZN7S2373C23v18Ev");}
void  S2373C2 ::v19(){vfunc_called(this, "_ZN7S2373C23v19Ev");}
void  S2373C2 ::v20(){vfunc_called(this, "_ZN7S2373C23v20Ev");}
void  S2373C2 ::v21(){vfunc_called(this, "_ZN7S2373C23v21Ev");}
S2373C2 ::S2373C2(){ note_ctor("S2373C2", this);} // tgen

static void Test_S2373C2()
{
  extern Class_Descriptor cd_S2373C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2373C2, buf);
    S2373C2 *dp, &lv = *(dp=new (buf) S2373C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2373C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2373C2)");
    check_base_class_offset(lv, (S2373C4*)(S2373C3*), 0, "S2373C2");
    check_base_class_offset(lv, (S2373C5*)(S2373C3*), ABISELECT(16,8), "S2373C2");
    check_base_class_offset(lv, (S2373C3*), 0, "S2373C2");
    check_field_offset(lv, s2373c2f0, ABISELECT(64,40), "S2373C2.s2373c2f0");
    test_class_info(&lv, &cd_S2373C2);
    dp->~S2373C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2373C2(Test_S2373C2, "S2373C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2373C2C1Ev();
extern void _ZN7S2373C2D1Ev();
Name_Map name_map_S2373C2[] = {
  NSPAIR(_ZN7S2373C2C1Ev),
  NSPAIR(_ZN7S2373C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2373C4;
extern VTBL_ENTRY _ZTI7S2373C4[];
extern  VTBL_ENTRY _ZTV7S2373C4[];
extern Class_Descriptor cd_S2373C5;
extern VTBL_ENTRY _ZTI7S2373C5[];
extern  VTBL_ENTRY _ZTV7S2373C5[];
extern Class_Descriptor cd_S2373C3;
extern VTBL_ENTRY _ZTI7S2373C3[];
extern  VTBL_ENTRY _ZTV7S2373C3[];
static Base_Class bases_S2373C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2373C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2373C5,    ABISELECT(16,8), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2373C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2373C2[];
extern void _ZN7S2373C2D1Ev();
extern void _ZN7S2373C2D0Ev();
extern void _ZN7S2373C42v5Ev();
extern void _ZN7S2373C42v6Ev();
extern void _ZN7S2373C42v7Ev();
extern void _ZN7S2373C42v8Ev();
extern void _ZN7S2373C33v12Ev();
extern void _ZN7S2373C33v13Ev();
extern void _ZN7S2373C33v14Ev();
extern void _ZN7S2373C33v15Ev();
extern void _ZN7S2373C23v16Ev();
extern void _ZN7S2373C23v17Ev();
extern void _ZN7S2373C23v18Ev();
extern void _ZN7S2373C23v19Ev();
extern void _ZN7S2373C23v20Ev();
extern void _ZN7S2373C23v21Ev();
extern void ABISELECT(_ZThn16_N7S2373C2D1Ev,_ZThn8_N7S2373C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2373C2D0Ev,_ZThn8_N7S2373C2D0Ev)();
extern void _ZN7S2373C52v9Ev();
extern void _ZN7S2373C53v10Ev();
extern void _ZN7S2373C53v11Ev();
static  VTBL_ENTRY vtc_S2373C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2373C2[0]),
  (VTBL_ENTRY)&_ZN7S2373C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2373C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v21Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2373C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2373C2D1Ev,_ZThn8_N7S2373C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2373C2D0Ev,_ZThn8_N7S2373C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2373C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2373C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2373C53v11Ev,
};
extern VTBL_ENTRY _ZTI7S2373C2[];
extern  VTBL_ENTRY _ZTV7S2373C2[];
Class_Descriptor cd_S2373C2 = {  "S2373C2", // class name
  bases_S2373C2, 3,
  &(vtc_S2373C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2373C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2373C2),25, //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  S2373C1  : S2373C2 {
  virtual void  v1(); // _ZN7S2373C12v1Ev
  virtual void  v2(); // _ZN7S2373C12v2Ev
  virtual void  v3(); // _ZN7S2373C12v3Ev
  virtual void  v4(); // _ZN7S2373C12v4Ev
  ~S2373C1(); // tgen
  S2373C1(); // tgen
};
//SIG(1 S2373C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 Fp} BC5{ vd v9 v10 v11 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v12 v13 v14 v15 Fp} vd v16 v17 v18 v19 v20 v21 Fi[2]} v1 v2 v3 v4}


void  S2373C1 ::v1(){vfunc_called(this, "_ZN7S2373C12v1Ev");}
void  S2373C1 ::v2(){vfunc_called(this, "_ZN7S2373C12v2Ev");}
void  S2373C1 ::v3(){vfunc_called(this, "_ZN7S2373C12v3Ev");}
void  S2373C1 ::v4(){vfunc_called(this, "_ZN7S2373C12v4Ev");}
S2373C1 ::~S2373C1(){ note_dtor("S2373C1", this);} // tgen
S2373C1 ::S2373C1(){ note_ctor("S2373C1", this);} // tgen

static void Test_S2373C1()
{
  extern Class_Descriptor cd_S2373C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2373C1, buf);
    S2373C1 *dp, &lv = *(dp=new (buf) S2373C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2373C1)");
    check_base_class_offset(lv, (S2373C4*)(S2373C3*)(S2373C2*), 0, "S2373C1");
    check_base_class_offset(lv, (S2373C5*)(S2373C3*)(S2373C2*), ABISELECT(16,8), "S2373C1");
    check_base_class_offset(lv, (S2373C3*)(S2373C2*), 0, "S2373C1");
    check_base_class_offset(lv, (S2373C2*), 0, "S2373C1");
    test_class_info(&lv, &cd_S2373C1);
    dp->~S2373C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2373C1(Test_S2373C1, "S2373C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2373C1C1Ev();
extern void _ZN7S2373C1D1Ev();
Name_Map name_map_S2373C1[] = {
  NSPAIR(_ZN7S2373C1C1Ev),
  NSPAIR(_ZN7S2373C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2373C4;
extern VTBL_ENTRY _ZTI7S2373C4[];
extern  VTBL_ENTRY _ZTV7S2373C4[];
extern Class_Descriptor cd_S2373C5;
extern VTBL_ENTRY _ZTI7S2373C5[];
extern  VTBL_ENTRY _ZTV7S2373C5[];
extern Class_Descriptor cd_S2373C3;
extern VTBL_ENTRY _ZTI7S2373C3[];
extern  VTBL_ENTRY _ZTV7S2373C3[];
extern Class_Descriptor cd_S2373C2;
extern VTBL_ENTRY _ZTI7S2373C2[];
extern  VTBL_ENTRY _ZTV7S2373C2[];
static Base_Class bases_S2373C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2373C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2373C5,    ABISELECT(16,8), //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
    2, //immediately_derived
  0, 0},
  {&cd_S2373C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2373C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2373C1[];
extern void _ZN7S2373C1D1Ev();
extern void _ZN7S2373C1D0Ev();
extern void _ZN7S2373C42v5Ev();
extern void _ZN7S2373C42v6Ev();
extern void _ZN7S2373C42v7Ev();
extern void _ZN7S2373C42v8Ev();
extern void _ZN7S2373C33v12Ev();
extern void _ZN7S2373C33v13Ev();
extern void _ZN7S2373C33v14Ev();
extern void _ZN7S2373C33v15Ev();
extern void _ZN7S2373C23v16Ev();
extern void _ZN7S2373C23v17Ev();
extern void _ZN7S2373C23v18Ev();
extern void _ZN7S2373C23v19Ev();
extern void _ZN7S2373C23v20Ev();
extern void _ZN7S2373C23v21Ev();
extern void _ZN7S2373C12v1Ev();
extern void _ZN7S2373C12v2Ev();
extern void _ZN7S2373C12v3Ev();
extern void _ZN7S2373C12v4Ev();
extern void ABISELECT(_ZThn16_N7S2373C1D1Ev,_ZThn8_N7S2373C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2373C1D0Ev,_ZThn8_N7S2373C1D0Ev)();
extern void _ZN7S2373C52v9Ev();
extern void _ZN7S2373C53v10Ev();
extern void _ZN7S2373C53v11Ev();
static  VTBL_ENTRY vtc_S2373C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2373C1[0]),
  (VTBL_ENTRY)&_ZN7S2373C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2373C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2373C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2373C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2373C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2373C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2373C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2373C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2373C12v4Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2373C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2373C1D1Ev,_ZThn8_N7S2373C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2373C1D0Ev,_ZThn8_N7S2373C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2373C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2373C53v10Ev,
  (VTBL_ENTRY)&_ZN7S2373C53v11Ev,
};
extern VTBL_ENTRY _ZTI7S2373C1[];
extern  VTBL_ENTRY _ZTV7S2373C1[];
Class_Descriptor cd_S2373C1 = {  "S2373C1", // class name
  bases_S2373C1, 4,
  &(vtc_S2373C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2373C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2373C1),29, //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  S2250C4  {
  void *s2250c4f0;
  virtual  ~S2250C4(); // _ZN7S2250C4D1Ev
  virtual void  v4(); // _ZN7S2250C42v4Ev
  virtual void  v5(); // _ZN7S2250C42v5Ev
  virtual void  v6(); // _ZN7S2250C42v6Ev
  virtual void  v7(); // _ZN7S2250C42v7Ev
  S2250C4(); // tgen
};
//SIG(-1 S2250C4) C1{ vd v1 v2 v3 v4 Fp}


 S2250C4 ::~S2250C4(){ note_dtor("S2250C4", this);}
void  S2250C4 ::v4(){vfunc_called(this, "_ZN7S2250C42v4Ev");}
void  S2250C4 ::v5(){vfunc_called(this, "_ZN7S2250C42v5Ev");}
void  S2250C4 ::v6(){vfunc_called(this, "_ZN7S2250C42v6Ev");}
void  S2250C4 ::v7(){vfunc_called(this, "_ZN7S2250C42v7Ev");}
S2250C4 ::S2250C4(){ note_ctor("S2250C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2250C4C1Ev();
extern void _ZN7S2250C4D1Ev();
Name_Map name_map_S2250C4[] = {
  NSPAIR(_ZN7S2250C4C1Ev),
  NSPAIR(_ZN7S2250C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2250C4[];
extern void _ZN7S2250C4D1Ev();
extern void _ZN7S2250C4D0Ev();
extern void _ZN7S2250C42v4Ev();
extern void _ZN7S2250C42v5Ev();
extern void _ZN7S2250C42v6Ev();
extern void _ZN7S2250C42v7Ev();
static  VTBL_ENTRY vtc_S2250C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2250C4[0]),
  (VTBL_ENTRY)&_ZN7S2250C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2250C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2250C4[];
extern  VTBL_ENTRY _ZTV7S2250C4[];
Class_Descriptor cd_S2250C4 = {  "S2250C4", // class name
  0,0,//no base classes
  &(vtc_S2250C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2250C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2250C4),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  S2250C5  {
  ::S2123C20_nt s2250c5f0;
  int s2250c5f1[2];
  char s2250c5f2;
  virtual  ~S2250C5(); // _ZN7S2250C5D1Ev
  virtual void  v8(); // _ZN7S2250C52v8Ev
  virtual void  v9(); // _ZN7S2250C52v9Ev
  virtual void  v10(); // _ZN7S2250C53v10Ev
  S2250C5(); // tgen
};
//SIG(-1 S2250C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2250C5 ::~S2250C5(){ note_dtor("S2250C5", this);}
void  S2250C5 ::v8(){vfunc_called(this, "_ZN7S2250C52v8Ev");}
void  S2250C5 ::v9(){vfunc_called(this, "_ZN7S2250C52v9Ev");}
void  S2250C5 ::v10(){vfunc_called(this, "_ZN7S2250C53v10Ev");}
S2250C5 ::S2250C5(){ note_ctor("S2250C5", this);} // tgen

static void Test_S2250C5()
{
  extern Class_Descriptor cd_S2250C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2250C5, buf);
    S2250C5 *dp, &lv = *(dp=new (buf) S2250C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2250C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2250C5)");
    check_field_offset(lv, s2250c5f0, ABISELECT(8,4), "S2250C5.s2250c5f0");
    check_field_offset(lv, s2250c5f1, ABISELECT(24,16), "S2250C5.s2250c5f1");
    check_field_offset(lv, s2250c5f2, ABISELECT(32,24), "S2250C5.s2250c5f2");
    test_class_info(&lv, &cd_S2250C5);
    dp->~S2250C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2250C5(Test_S2250C5, "S2250C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2250C5C1Ev();
extern void _ZN7S2250C5D1Ev();
Name_Map name_map_S2250C5[] = {
  NSPAIR(_ZN7S2250C5C1Ev),
  NSPAIR(_ZN7S2250C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2250C5[];
extern void _ZN7S2250C5D1Ev();
extern void _ZN7S2250C5D0Ev();
extern void _ZN7S2250C52v8Ev();
extern void _ZN7S2250C52v9Ev();
extern void _ZN7S2250C53v10Ev();
static  VTBL_ENTRY vtc_S2250C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2250C5[0]),
  (VTBL_ENTRY)&_ZN7S2250C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2250C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2250C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2250C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2250C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S2250C5[];
extern  VTBL_ENTRY _ZTV7S2250C5[];
Class_Descriptor cd_S2250C5 = {  "S2250C5", // class name
  0,0,//no base classes
  &(vtc_S2250C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2250C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2250C5),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  S2250C3  : S2250C4 , S2250C5 {
  void *s2250c3f0;
  virtual  ~S2250C3(); // _ZN7S2250C3D1Ev
  virtual void  v11(); // _ZN7S2250C33v11Ev
  virtual void  v12(); // _ZN7S2250C33v12Ev
  virtual void  v13(); // _ZN7S2250C33v13Ev
  virtual void  v14(); // _ZN7S2250C33v14Ev
  S2250C3(); // tgen
};
//SIG(-1 S2250C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2250C3 ::~S2250C3(){ note_dtor("S2250C3", this);}
void  S2250C3 ::v11(){vfunc_called(this, "_ZN7S2250C33v11Ev");}
void  S2250C3 ::v12(){vfunc_called(this, "_ZN7S2250C33v12Ev");}
void  S2250C3 ::v13(){vfunc_called(this, "_ZN7S2250C33v13Ev");}
void  S2250C3 ::v14(){vfunc_called(this, "_ZN7S2250C33v14Ev");}
S2250C3 ::S2250C3(){ note_ctor("S2250C3", this);} // tgen

static void Test_S2250C3()
{
  extern Class_Descriptor cd_S2250C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2250C3, buf);
    S2250C3 *dp, &lv = *(dp=new (buf) S2250C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2250C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2250C3)");
    check_base_class_offset(lv, (S2250C4*), 0, "S2250C3");
    check_base_class_offset(lv, (S2250C5*), ABISELECT(16,8), "S2250C3");
    check_field_offset(lv, s2250c3f0, ABISELECT(56,36), "S2250C3.s2250c3f0");
    test_class_info(&lv, &cd_S2250C3);
    dp->~S2250C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2250C3(Test_S2250C3, "S2250C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2250C3C1Ev();
extern void _ZN7S2250C3D1Ev();
Name_Map name_map_S2250C3[] = {
  NSPAIR(_ZN7S2250C3C1Ev),
  NSPAIR(_ZN7S2250C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2250C4;
extern VTBL_ENTRY _ZTI7S2250C4[];
extern  VTBL_ENTRY _ZTV7S2250C4[];
extern Class_Descriptor cd_S2250C5;
extern VTBL_ENTRY _ZTI7S2250C5[];
extern  VTBL_ENTRY _ZTV7S2250C5[];
static Base_Class bases_S2250C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2250C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2250C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2250C3[];
extern void _ZN7S2250C3D1Ev();
extern void _ZN7S2250C3D0Ev();
extern void _ZN7S2250C42v4Ev();
extern void _ZN7S2250C42v5Ev();
extern void _ZN7S2250C42v6Ev();
extern void _ZN7S2250C42v7Ev();
extern void _ZN7S2250C33v11Ev();
extern void _ZN7S2250C33v12Ev();
extern void _ZN7S2250C33v13Ev();
extern void _ZN7S2250C33v14Ev();
extern void ABISELECT(_ZThn16_N7S2250C3D1Ev,_ZThn8_N7S2250C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2250C3D0Ev,_ZThn8_N7S2250C3D0Ev)();
extern void _ZN7S2250C52v8Ev();
extern void _ZN7S2250C52v9Ev();
extern void _ZN7S2250C53v10Ev();
static  VTBL_ENTRY vtc_S2250C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2250C3[0]),
  (VTBL_ENTRY)&_ZN7S2250C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2250C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v14Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2250C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2250C3D1Ev,_ZThn8_N7S2250C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2250C3D0Ev,_ZThn8_N7S2250C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2250C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2250C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2250C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S2250C3[];
extern  VTBL_ENTRY _ZTV7S2250C3[];
Class_Descriptor cd_S2250C3 = {  "S2250C3", // class name
  bases_S2250C3, 2,
  &(vtc_S2250C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2250C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2250C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2250C2  : S2250C3 {
  int s2250c2f0[2];
  virtual  ~S2250C2(); // _ZN7S2250C2D1Ev
  virtual void  v15(); // _ZN7S2250C23v15Ev
  virtual void  v16(); // _ZN7S2250C23v16Ev
  virtual void  v17(); // _ZN7S2250C23v17Ev
  virtual void  v18(); // _ZN7S2250C23v18Ev
  virtual void  v19(); // _ZN7S2250C23v19Ev
  virtual void  v20(); // _ZN7S2250C23v20Ev
  S2250C2(); // tgen
};
//SIG(-1 S2250C2) C1{ BC2{ BC3{ vd v7 v8 v9 v10 Fp} BC4{ vd v11 v12 v13 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v14 v15 v16 v17 Fp} vd v1 v2 v3 v4 v5 v6 Fi[2]}


 S2250C2 ::~S2250C2(){ note_dtor("S2250C2", this);}
void  S2250C2 ::v15(){vfunc_called(this, "_ZN7S2250C23v15Ev");}
void  S2250C2 ::v16(){vfunc_called(this, "_ZN7S2250C23v16Ev");}
void  S2250C2 ::v17(){vfunc_called(this, "_ZN7S2250C23v17Ev");}
void  S2250C2 ::v18(){vfunc_called(this, "_ZN7S2250C23v18Ev");}
void  S2250C2 ::v19(){vfunc_called(this, "_ZN7S2250C23v19Ev");}
void  S2250C2 ::v20(){vfunc_called(this, "_ZN7S2250C23v20Ev");}
S2250C2 ::S2250C2(){ note_ctor("S2250C2", this);} // tgen

static void Test_S2250C2()
{
  extern Class_Descriptor cd_S2250C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2250C2, buf);
    S2250C2 *dp, &lv = *(dp=new (buf) S2250C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2250C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2250C2)");
    check_base_class_offset(lv, (S2250C4*)(S2250C3*), 0, "S2250C2");
    check_base_class_offset(lv, (S2250C5*)(S2250C3*), ABISELECT(16,8), "S2250C2");
    check_base_class_offset(lv, (S2250C3*), 0, "S2250C2");
    check_field_offset(lv, s2250c2f0, ABISELECT(64,40), "S2250C2.s2250c2f0");
    test_class_info(&lv, &cd_S2250C2);
    dp->~S2250C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2250C2(Test_S2250C2, "S2250C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2250C2C1Ev();
extern void _ZN7S2250C2D1Ev();
Name_Map name_map_S2250C2[] = {
  NSPAIR(_ZN7S2250C2C1Ev),
  NSPAIR(_ZN7S2250C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2250C4;
extern VTBL_ENTRY _ZTI7S2250C4[];
extern  VTBL_ENTRY _ZTV7S2250C4[];
extern Class_Descriptor cd_S2250C5;
extern VTBL_ENTRY _ZTI7S2250C5[];
extern  VTBL_ENTRY _ZTV7S2250C5[];
extern Class_Descriptor cd_S2250C3;
extern VTBL_ENTRY _ZTI7S2250C3[];
extern  VTBL_ENTRY _ZTV7S2250C3[];
static Base_Class bases_S2250C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2250C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2250C5,    ABISELECT(16,8), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2250C2[];
extern void _ZN7S2250C2D1Ev();
extern void _ZN7S2250C2D0Ev();
extern void _ZN7S2250C42v4Ev();
extern void _ZN7S2250C42v5Ev();
extern void _ZN7S2250C42v6Ev();
extern void _ZN7S2250C42v7Ev();
extern void _ZN7S2250C33v11Ev();
extern void _ZN7S2250C33v12Ev();
extern void _ZN7S2250C33v13Ev();
extern void _ZN7S2250C33v14Ev();
extern void _ZN7S2250C23v15Ev();
extern void _ZN7S2250C23v16Ev();
extern void _ZN7S2250C23v17Ev();
extern void _ZN7S2250C23v18Ev();
extern void _ZN7S2250C23v19Ev();
extern void _ZN7S2250C23v20Ev();
extern void ABISELECT(_ZThn16_N7S2250C2D1Ev,_ZThn8_N7S2250C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2250C2D0Ev,_ZThn8_N7S2250C2D0Ev)();
extern void _ZN7S2250C52v8Ev();
extern void _ZN7S2250C52v9Ev();
extern void _ZN7S2250C53v10Ev();
static  VTBL_ENTRY vtc_S2250C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2250C2[0]),
  (VTBL_ENTRY)&_ZN7S2250C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2250C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2250C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2250C2D1Ev,_ZThn8_N7S2250C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2250C2D0Ev,_ZThn8_N7S2250C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2250C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2250C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2250C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S2250C2[];
extern  VTBL_ENTRY _ZTV7S2250C2[];
Class_Descriptor cd_S2250C2 = {  "S2250C2", // class name
  bases_S2250C2, 3,
  &(vtc_S2250C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2250C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2250C2),25, //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  S2250C1  : S2250C2 {
  virtual void  v1(); // _ZN7S2250C12v1Ev
  virtual void  v2(); // _ZN7S2250C12v2Ev
  virtual void  v3(); // _ZN7S2250C12v3Ev
  ~S2250C1(); // tgen
  S2250C1(); // tgen
};
//SIG(1 S2250C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 Fp} BC5{ vd v8 v9 v10 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v11 v12 v13 v14 Fp} vd v15 v16 v17 v18 v19 v20 Fi[2]} v1 v2 v3}


void  S2250C1 ::v1(){vfunc_called(this, "_ZN7S2250C12v1Ev");}
void  S2250C1 ::v2(){vfunc_called(this, "_ZN7S2250C12v2Ev");}
void  S2250C1 ::v3(){vfunc_called(this, "_ZN7S2250C12v3Ev");}
S2250C1 ::~S2250C1(){ note_dtor("S2250C1", this);} // tgen
S2250C1 ::S2250C1(){ note_ctor("S2250C1", this);} // tgen

static void Test_S2250C1()
{
  extern Class_Descriptor cd_S2250C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2250C1, buf);
    S2250C1 *dp, &lv = *(dp=new (buf) S2250C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2250C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2250C1)");
    check_base_class_offset(lv, (S2250C4*)(S2250C3*)(S2250C2*), 0, "S2250C1");
    check_base_class_offset(lv, (S2250C5*)(S2250C3*)(S2250C2*), ABISELECT(16,8), "S2250C1");
    check_base_class_offset(lv, (S2250C3*)(S2250C2*), 0, "S2250C1");
    check_base_class_offset(lv, (S2250C2*), 0, "S2250C1");
    test_class_info(&lv, &cd_S2250C1);
    dp->~S2250C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2250C1(Test_S2250C1, "S2250C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2250C1C1Ev();
extern void _ZN7S2250C1D1Ev();
Name_Map name_map_S2250C1[] = {
  NSPAIR(_ZN7S2250C1C1Ev),
  NSPAIR(_ZN7S2250C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2250C4;
extern VTBL_ENTRY _ZTI7S2250C4[];
extern  VTBL_ENTRY _ZTV7S2250C4[];
extern Class_Descriptor cd_S2250C5;
extern VTBL_ENTRY _ZTI7S2250C5[];
extern  VTBL_ENTRY _ZTV7S2250C5[];
extern Class_Descriptor cd_S2250C3;
extern VTBL_ENTRY _ZTI7S2250C3[];
extern  VTBL_ENTRY _ZTV7S2250C3[];
extern Class_Descriptor cd_S2250C2;
extern VTBL_ENTRY _ZTI7S2250C2[];
extern  VTBL_ENTRY _ZTV7S2250C2[];
static Base_Class bases_S2250C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2250C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2250C5,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2250C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2250C1[];
extern void _ZN7S2250C1D1Ev();
extern void _ZN7S2250C1D0Ev();
extern void _ZN7S2250C42v4Ev();
extern void _ZN7S2250C42v5Ev();
extern void _ZN7S2250C42v6Ev();
extern void _ZN7S2250C42v7Ev();
extern void _ZN7S2250C33v11Ev();
extern void _ZN7S2250C33v12Ev();
extern void _ZN7S2250C33v13Ev();
extern void _ZN7S2250C33v14Ev();
extern void _ZN7S2250C23v15Ev();
extern void _ZN7S2250C23v16Ev();
extern void _ZN7S2250C23v17Ev();
extern void _ZN7S2250C23v18Ev();
extern void _ZN7S2250C23v19Ev();
extern void _ZN7S2250C23v20Ev();
extern void _ZN7S2250C12v1Ev();
extern void _ZN7S2250C12v2Ev();
extern void _ZN7S2250C12v3Ev();
extern void ABISELECT(_ZThn16_N7S2250C1D1Ev,_ZThn8_N7S2250C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2250C1D0Ev,_ZThn8_N7S2250C1D0Ev)();
extern void _ZN7S2250C52v8Ev();
extern void _ZN7S2250C52v9Ev();
extern void _ZN7S2250C53v10Ev();
static  VTBL_ENTRY vtc_S2250C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2250C1[0]),
  (VTBL_ENTRY)&_ZN7S2250C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2250C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2250C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2250C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2250C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2250C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2250C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2250C12v3Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2250C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2250C1D1Ev,_ZThn8_N7S2250C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2250C1D0Ev,_ZThn8_N7S2250C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2250C52v8Ev,
  (VTBL_ENTRY)&_ZN7S2250C52v9Ev,
  (VTBL_ENTRY)&_ZN7S2250C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S2250C1[];
extern  VTBL_ENTRY _ZTV7S2250C1[];
Class_Descriptor cd_S2250C1 = {  "S2250C1", // class name
  bases_S2250C1, 4,
  &(vtc_S2250C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2250C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2250C1),28, //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  S1364C4  {
  int s1364c4f0;
  virtual void  v3(); // _ZN7S1364C42v3Ev
  virtual void  v4(); // _ZN7S1364C42v4Ev
  virtual void  v5(); // _ZN7S1364C42v5Ev
  virtual void  v6(); // _ZN7S1364C42v6Ev
  virtual void  v7(); // _ZN7S1364C42v7Ev
  ~S1364C4(); // tgen
  S1364C4(); // tgen
};
//SIG(-1 S1364C4) C1{ v1 v2 v3 v4 v5 Fi}


void  S1364C4 ::v3(){vfunc_called(this, "_ZN7S1364C42v3Ev");}
void  S1364C4 ::v4(){vfunc_called(this, "_ZN7S1364C42v4Ev");}
void  S1364C4 ::v5(){vfunc_called(this, "_ZN7S1364C42v5Ev");}
void  S1364C4 ::v6(){vfunc_called(this, "_ZN7S1364C42v6Ev");}
void  S1364C4 ::v7(){vfunc_called(this, "_ZN7S1364C42v7Ev");}
S1364C4 ::~S1364C4(){ note_dtor("S1364C4", this);} // tgen
S1364C4 ::S1364C4(){ note_ctor("S1364C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1364C4C1Ev();
extern void _ZN7S1364C4D1Ev();
Name_Map name_map_S1364C4[] = {
  NSPAIR(_ZN7S1364C4C1Ev),
  NSPAIR(_ZN7S1364C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1364C4[];
extern void _ZN7S1364C42v3Ev();
extern void _ZN7S1364C42v4Ev();
extern void _ZN7S1364C42v5Ev();
extern void _ZN7S1364C42v6Ev();
extern void _ZN7S1364C42v7Ev();
static  VTBL_ENTRY vtc_S1364C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1364C4[0]),
  (VTBL_ENTRY)&_ZN7S1364C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S1364C4[];
extern  VTBL_ENTRY _ZTV7S1364C4[];
Class_Descriptor cd_S1364C4 = {  "S1364C4", // class name
  0,0,//no base classes
  &(vtc_S1364C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1364C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1364C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1364C5  {
  long double s1364c5f0[3];
  virtual void  v8(); // _ZN7S1364C52v8Ev
  virtual void  v9(); // _ZN7S1364C52v9Ev
  virtual void  v10(); // _ZN7S1364C53v10Ev
  virtual void  v11(); // _ZN7S1364C53v11Ev
  virtual void  v12(); // _ZN7S1364C53v12Ev
  virtual void  v13(); // _ZN7S1364C53v13Ev
  virtual void  v14(); // _ZN7S1364C53v14Ev
  ~S1364C5(); // tgen
  S1364C5(); // tgen
};
//SIG(-1 S1364C5) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S1364C5 ::v8(){vfunc_called(this, "_ZN7S1364C52v8Ev");}
void  S1364C5 ::v9(){vfunc_called(this, "_ZN7S1364C52v9Ev");}
void  S1364C5 ::v10(){vfunc_called(this, "_ZN7S1364C53v10Ev");}
void  S1364C5 ::v11(){vfunc_called(this, "_ZN7S1364C53v11Ev");}
void  S1364C5 ::v12(){vfunc_called(this, "_ZN7S1364C53v12Ev");}
void  S1364C5 ::v13(){vfunc_called(this, "_ZN7S1364C53v13Ev");}
void  S1364C5 ::v14(){vfunc_called(this, "_ZN7S1364C53v14Ev");}
S1364C5 ::~S1364C5(){ note_dtor("S1364C5", this);} // tgen
S1364C5 ::S1364C5(){ note_ctor("S1364C5", this);} // tgen

static void Test_S1364C5()
{
  extern Class_Descriptor cd_S1364C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S1364C5, buf);
    S1364C5 *dp, &lv = *(dp=new (buf) S1364C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S1364C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1364C5)");
    check_field_offset(lv, s1364c5f0, ABISELECT(16,4), "S1364C5.s1364c5f0");
    test_class_info(&lv, &cd_S1364C5);
    dp->~S1364C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1364C5(Test_S1364C5, "S1364C5", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S1364C5C1Ev();
extern void _ZN7S1364C5D1Ev();
Name_Map name_map_S1364C5[] = {
  NSPAIR(_ZN7S1364C5C1Ev),
  NSPAIR(_ZN7S1364C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1364C5[];
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
static  VTBL_ENTRY vtc_S1364C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1364C5[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S1364C5[];
extern  VTBL_ENTRY _ZTV7S1364C5[];
Class_Descriptor cd_S1364C5 = {  "S1364C5", // class name
  0,0,//no base classes
  &(vtc_S1364C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S1364C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1364C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1364C3  : S1364C4 , virtual S1364C5 {
  virtual void  v15(); // _ZN7S1364C33v15Ev
  virtual void  v16(); // _ZN7S1364C33v16Ev
  virtual void  v17(); // _ZN7S1364C33v17Ev
  virtual void  v18(); // _ZN7S1364C33v18Ev
  virtual void  v19(); // _ZN7S1364C33v19Ev
  ~S1364C3(); // tgen
  S1364C3(); // tgen
};
//SIG(-1 S1364C3) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S1364C3 ::v15(){vfunc_called(this, "_ZN7S1364C33v15Ev");}
void  S1364C3 ::v16(){vfunc_called(this, "_ZN7S1364C33v16Ev");}
void  S1364C3 ::v17(){vfunc_called(this, "_ZN7S1364C33v17Ev");}
void  S1364C3 ::v18(){vfunc_called(this, "_ZN7S1364C33v18Ev");}
void  S1364C3 ::v19(){vfunc_called(this, "_ZN7S1364C33v19Ev");}
S1364C3 ::~S1364C3(){ note_dtor("S1364C3", this);} // tgen
S1364C3 ::S1364C3(){ note_ctor("S1364C3", this);} // tgen

static void Test_S1364C3()
{
  extern Class_Descriptor cd_S1364C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S1364C3, buf);
    S1364C3 *dp, &lv = *(dp=new (buf) S1364C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S1364C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1364C3)");
    check_base_class_offset(lv, (S1364C4*), 0, "S1364C3");
    check_base_class_offset(lv, (S1364C5*), ABISELECT(16,8), "S1364C3");
    test_class_info(&lv, &cd_S1364C3);
    dp->~S1364C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1364C3(Test_S1364C3, "S1364C3", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S1364C3C1Ev();
extern void _ZN7S1364C3D1Ev();
Name_Map name_map_S1364C3[] = {
  NSPAIR(_ZN7S1364C3C1Ev),
  NSPAIR(_ZN7S1364C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1364C4;
extern VTBL_ENTRY _ZTI7S1364C4[];
extern  VTBL_ENTRY _ZTV7S1364C4[];
extern Class_Descriptor cd_S1364C5;
extern VTBL_ENTRY _ZTI7S1364C5[];
extern  VTBL_ENTRY _ZTV7S1364C5[];
static Base_Class bases_S1364C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1364C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1364C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI7S1364C3[];
extern void _ZN7S1364C42v3Ev();
extern void _ZN7S1364C42v4Ev();
extern void _ZN7S1364C42v5Ev();
extern void _ZN7S1364C42v6Ev();
extern void _ZN7S1364C42v7Ev();
extern void _ZN7S1364C33v15Ev();
extern void _ZN7S1364C33v16Ev();
extern void _ZN7S1364C33v17Ev();
extern void _ZN7S1364C33v18Ev();
extern void _ZN7S1364C33v19Ev();
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
static  VTBL_ENTRY vtc_S1364C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S1364C3[0]),
  (VTBL_ENTRY)&_ZN7S1364C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1364C3[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
};
extern VTBL_ENTRY _ZTV7S1364C3[];
static  VTT_ENTRY vtt_S1364C3[] = {
  {&(_ZTV7S1364C3[3]),  3,29},
  {&(_ZTV7S1364C3[22]),  22,29},
};
extern VTBL_ENTRY _ZTI7S1364C3[];
extern  VTBL_ENTRY _ZTV7S1364C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1364C3[];
Class_Descriptor cd_S1364C3 = {  "S1364C3", // class name
  bases_S1364C3, 2,
  &(vtc_S1364C3[0]), // expected_vtbl_contents
  &(vtt_S1364C3[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S1364C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1364C3),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1364C3),2, //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  S1364C2  : S1364C3 , S1364C5 {
  void *s1364c2f0;
  virtual void  v20(); // _ZN7S1364C23v20Ev
  virtual void  v21(); // _ZN7S1364C23v21Ev
  ~S1364C2(); // tgen
  S1364C2(); // tgen
};
//SIG(-1 S1364C2) C1{ BC2{ BC3{ v3 v4 v5 v6 v7 Fi} VBC4{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} BC4 v1 v2 Fp}


void  S1364C2 ::v20(){vfunc_called(this, "_ZN7S1364C23v20Ev");}
void  S1364C2 ::v21(){vfunc_called(this, "_ZN7S1364C23v21Ev");}
S1364C2 ::~S1364C2(){ note_dtor("S1364C2", this);} // tgen
S1364C2 ::S1364C2(){ note_ctor("S1364C2", this);} // tgen

static void Test_S1364C2()
{
  extern Class_Descriptor cd_S1364C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,24)];
    init_test(&cd_S1364C2, buf);
    S1364C2 *dp, &lv = *(dp=new (buf) S1364C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,92), "sizeof(S1364C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1364C2)");
    check_base_class_offset(lv, (S1364C4*)(S1364C3*), 0, "S1364C2");
    check_base_class_offset(lv, (S1364C5*)(S1364C3*), ABISELECT(96,52), "S1364C2");
    check_base_class_offset(lv, (S1364C3*), 0, "S1364C2");
    /*is_ambiguous_... S1364C2::S1364C5 */ AMB_check_base_class_offset(lv, (S1364C5*), ABISELECT(16,8), "S1364C2");
    check_field_offset(lv, s1364c2f0, ABISELECT(80,48), "S1364C2.s1364c2f0");
    test_class_info(&lv, &cd_S1364C2);
    dp->~S1364C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1364C2(Test_S1364C2, "S1364C2", ABISELECT(160,92));

#else // __cplusplus

extern void _ZN7S1364C2C1Ev();
extern void _ZN7S1364C2D1Ev();
Name_Map name_map_S1364C2[] = {
  NSPAIR(_ZN7S1364C2C1Ev),
  NSPAIR(_ZN7S1364C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1364C4;
extern VTBL_ENTRY _ZTI7S1364C4[];
extern  VTBL_ENTRY _ZTV7S1364C4[];
extern Class_Descriptor cd_S1364C5;
extern VTBL_ENTRY _ZTI7S1364C5[];
extern  VTBL_ENTRY _ZTV7S1364C5[];
extern Class_Descriptor cd_S1364C3;
extern VTBL_ENTRY _ZTI7S1364C3[];
extern  VTBL_ENTRY _ZTV7S1364C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1364C3[];
extern Class_Descriptor cd_S1364C5;
extern VTBL_ENTRY _ZTI7S1364C5[];
extern  VTBL_ENTRY _ZTV7S1364C5[];
static Base_Class bases_S1364C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1364C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1364C5,    ABISELECT(96,52), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S1364C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1364C5,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1364C2[];
extern void _ZN7S1364C42v3Ev();
extern void _ZN7S1364C42v4Ev();
extern void _ZN7S1364C42v5Ev();
extern void _ZN7S1364C42v6Ev();
extern void _ZN7S1364C42v7Ev();
extern void _ZN7S1364C33v15Ev();
extern void _ZN7S1364C33v16Ev();
extern void _ZN7S1364C33v17Ev();
extern void _ZN7S1364C33v18Ev();
extern void _ZN7S1364C33v19Ev();
extern void _ZN7S1364C23v20Ev();
extern void _ZN7S1364C23v21Ev();
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
static  VTBL_ENTRY vtc_S1364C2[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S1364C2[0]),
  (VTBL_ENTRY)&_ZN7S1364C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1364C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1364C23v21Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1364C2[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S1364C2[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
};
extern VTBL_ENTRY _ZTV7S1364C2[];
extern void _ZN7S1364C42v3Ev();
extern void _ZN7S1364C42v4Ev();
extern void _ZN7S1364C42v5Ev();
extern void _ZN7S1364C42v6Ev();
extern void _ZN7S1364C42v7Ev();
extern void _ZN7S1364C33v15Ev();
extern void _ZN7S1364C33v16Ev();
extern void _ZN7S1364C33v17Ev();
extern void _ZN7S1364C33v18Ev();
extern void _ZN7S1364C33v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1364C3__7S1364C2[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S1364C3[0]),
  (VTBL_ENTRY)&_ZN7S1364C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v19Ev,
};
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1364C5__7S1364C3__7S1364C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S1364C3[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
};
static  VTT_ENTRY vtt_S1364C2[] = {
  {&(_ZTV7S1364C2[3]),  3,40},
  {&(_tg__ZTV7S1364C3__7S1364C2[3]),  3,13},
  {&(_tg__ZTV7S1364C5__7S1364C3__7S1364C2[9]),  9,16},
  {&(_ZTV7S1364C2[33]),  33,40},
};
extern VTBL_ENTRY _ZTI7S1364C2[];
extern  VTBL_ENTRY _ZTV7S1364C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1364C2[];
Class_Descriptor cd_S1364C2 = {  "S1364C2", // class name
  bases_S1364C2, 4,
  &(vtc_S1364C2[0]), // expected_vtbl_contents
  &(vtt_S1364C2[0]), // expected_vtt_contents
  ABISELECT(160,92), // object size
  NSPAIRA(_ZTI7S1364C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1364C2),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1364C2),4, //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  S1364C6_nt  {
  __tsi64 s1364c6f0;
  virtual  ~S1364C6_nt(); // _ZN10S1364C6_ntD1Ev
  virtual void  v22(); // _ZN10S1364C6_nt3v22Ev
  virtual void  v23(); // _ZN10S1364C6_nt3v23Ev
  S1364C6_nt(); // tgen
};
//SIG(-1 S1364C6_nt) C1{ vd v1 v2 FL}


 S1364C6_nt ::~S1364C6_nt(){ note_dtor("S1364C6_nt", this);}
void  S1364C6_nt ::v22(){vfunc_called(this, "_ZN10S1364C6_nt3v22Ev");}
void  S1364C6_nt ::v23(){vfunc_called(this, "_ZN10S1364C6_nt3v23Ev");}
S1364C6_nt ::S1364C6_nt(){ note_ctor("S1364C6_nt", this);} // tgen

//skip512 S1364C6_nt

#else // __cplusplus

extern void _ZN10S1364C6_ntC1Ev();
extern void _ZN10S1364C6_ntD1Ev();
Name_Map name_map_S1364C6_nt[] = {
  NSPAIR(_ZN10S1364C6_ntC1Ev),
  NSPAIR(_ZN10S1364C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1364C6_nt[];
extern void _ZN10S1364C6_ntD1Ev();
extern void _ZN10S1364C6_ntD0Ev();
extern void _ZN10S1364C6_nt3v22Ev();
extern void _ZN10S1364C6_nt3v23Ev();
static  VTBL_ENTRY vtc_S1364C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1364C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1364C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1364C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1364C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1364C6_nt3v23Ev,
};
extern VTBL_ENTRY _ZTI10S1364C6_nt[];
VTBL_ENTRY *P__ZTI10S1364C6_nt = _ZTI10S1364C6_nt; 
extern  VTBL_ENTRY _ZTV10S1364C6_nt[];
Class_Descriptor cd_S1364C6_nt = {  "S1364C6_nt", // class name
  0,0,//no base classes
  &(vtc_S1364C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S1364C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1364C6_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  S1364C1  : S1364C2 , S1364C6_nt {
  ::S1364C6_nt s1364c1f0;
  ::S1364C5 s1364c1f1;
  virtual void  v1(); // _ZN7S1364C12v1Ev
  virtual void  v2(); // _ZN7S1364C12v2Ev
  ~S1364C1(); // tgen
  S1364C1(); // tgen
};
//SIG(1 S1364C1) C1{ BC2{ BC3{ BC4{ v3 v4 v5 v6 v7 Fi} VBC5{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} BC5 v20 v21 Fp} BC6{ vd v22 v23 FL} v1 v2 FC6 FC5}


void  S1364C1 ::v1(){vfunc_called(this, "_ZN7S1364C12v1Ev");}
void  S1364C1 ::v2(){vfunc_called(this, "_ZN7S1364C12v2Ev");}
S1364C1 ::~S1364C1(){ note_dtor("S1364C1", this);} // tgen
S1364C1 ::S1364C1(){ note_ctor("S1364C1", this);} // tgen

static void Test_S1364C1()
{
  extern Class_Descriptor cd_S1364C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,40)];
    init_test(&cd_S1364C1, buf);
    S1364C1 *dp, &lv = *(dp=new (buf) S1364C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,156), "sizeof(S1364C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1364C1)");
    check_base_class_offset(lv, (S1364C4*)(S1364C3*)(S1364C2*), 0, "S1364C1");
    check_base_class_offset(lv, (S1364C5*)(S1364C3*)(S1364C2*), ABISELECT(192,116), "S1364C1");
    check_base_class_offset(lv, (S1364C3*)(S1364C2*), 0, "S1364C1");
    /*is_ambiguous_... S1364C2::S1364C5 */ AMB_check_base_class_offset(lv, (S1364C5*)(S1364C2*), ABISELECT(16,8), "S1364C1");
    check_base_class_offset(lv, (S1364C2*), 0, "S1364C1");
    check_base_class_offset(lv, (S1364C6_nt*), ABISELECT(88,52), "S1364C1");
    check_field_offset(lv, s1364c1f0, ABISELECT(104,64), "S1364C1.s1364c1f0");
    check_field_offset(lv, s1364c1f1, ABISELECT(128,76), "S1364C1.s1364c1f1");
    test_class_info(&lv, &cd_S1364C1);
    dp->~S1364C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1364C1(Test_S1364C1, "S1364C1", ABISELECT(256,156));

#else // __cplusplus

extern void _ZN7S1364C1C1Ev();
extern void _ZN7S1364C1D1Ev();
Name_Map name_map_S1364C1[] = {
  NSPAIR(_ZN7S1364C1C1Ev),
  NSPAIR(_ZN7S1364C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1364C4;
extern VTBL_ENTRY _ZTI7S1364C4[];
extern  VTBL_ENTRY _ZTV7S1364C4[];
extern Class_Descriptor cd_S1364C5;
extern VTBL_ENTRY _ZTI7S1364C5[];
extern  VTBL_ENTRY _ZTV7S1364C5[];
extern Class_Descriptor cd_S1364C3;
extern VTBL_ENTRY _ZTI7S1364C3[];
extern  VTBL_ENTRY _ZTV7S1364C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1364C3[];
extern Class_Descriptor cd_S1364C5;
extern VTBL_ENTRY _ZTI7S1364C5[];
extern  VTBL_ENTRY _ZTV7S1364C5[];
extern Class_Descriptor cd_S1364C2;
extern VTBL_ENTRY _ZTI7S1364C2[];
extern  VTBL_ENTRY _ZTV7S1364C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1364C2[];
extern Class_Descriptor cd_S1364C6_nt;
extern VTBL_ENTRY _ZTI10S1364C6_nt[];
extern  VTBL_ENTRY _ZTV10S1364C6_nt[];
static Base_Class bases_S1364C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1364C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1364C5,    ABISELECT(192,116), //bcp->offset
    34, //bcp->virtual_function_table_offset
    9, //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_S1364C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1364C5,    ABISELECT(16,8), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1364C2,    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},
  {&cd_S1364C6_nt,    ABISELECT(88,52), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1364C1[];
extern void _ZN7S1364C42v3Ev();
extern void _ZN7S1364C42v4Ev();
extern void _ZN7S1364C42v5Ev();
extern void _ZN7S1364C42v6Ev();
extern void _ZN7S1364C42v7Ev();
extern void _ZN7S1364C33v15Ev();
extern void _ZN7S1364C33v16Ev();
extern void _ZN7S1364C33v17Ev();
extern void _ZN7S1364C33v18Ev();
extern void _ZN7S1364C33v19Ev();
extern void _ZN7S1364C23v20Ev();
extern void _ZN7S1364C23v21Ev();
extern void _ZN7S1364C12v1Ev();
extern void _ZN7S1364C12v2Ev();
extern void _ZN7S1364C1D1Ev();
extern void _ZN7S1364C1D0Ev();
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
extern void ABISELECT(_ZThn88_N7S1364C1D1Ev,_ZThn52_N7S1364C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S1364C1D0Ev,_ZThn52_N7S1364C1D0Ev)();
extern void _ZN10S1364C6_nt3v22Ev();
extern void _ZN10S1364C6_nt3v23Ev();
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
static  VTBL_ENTRY vtc_S1364C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1364C1[0]),
  (VTBL_ENTRY)&_ZN7S1364C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1364C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1364C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1364C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1364C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1364C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1364C1D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1364C1[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S1364C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1364C1D1Ev,_ZThn52_N7S1364C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N7S1364C1D0Ev,_ZThn52_N7S1364C1D0Ev),
  (VTBL_ENTRY)&_ZN10S1364C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1364C6_nt3v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1364C1[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
};
extern VTBL_ENTRY _ZTV7S1364C1[];
extern void _ZN7S1364C42v3Ev();
extern void _ZN7S1364C42v4Ev();
extern void _ZN7S1364C42v5Ev();
extern void _ZN7S1364C42v6Ev();
extern void _ZN7S1364C42v7Ev();
extern void _ZN7S1364C33v15Ev();
extern void _ZN7S1364C33v16Ev();
extern void _ZN7S1364C33v17Ev();
extern void _ZN7S1364C33v18Ev();
extern void _ZN7S1364C33v19Ev();
extern void _ZN7S1364C23v20Ev();
extern void _ZN7S1364C23v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1364C2__7S1364C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1364C2[0]),
  (VTBL_ENTRY)&_ZN7S1364C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1364C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1364C23v21Ev,
};
extern void _ZN7S1364C42v3Ev();
extern void _ZN7S1364C42v4Ev();
extern void _ZN7S1364C42v5Ev();
extern void _ZN7S1364C42v6Ev();
extern void _ZN7S1364C42v7Ev();
extern void _ZN7S1364C33v15Ev();
extern void _ZN7S1364C33v16Ev();
extern void _ZN7S1364C33v17Ev();
extern void _ZN7S1364C33v18Ev();
extern void _ZN7S1364C33v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1364C37S1364C2__7S1364C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1364C3[0]),
  (VTBL_ENTRY)&_ZN7S1364C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1364C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1364C33v19Ev,
};
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1364C5__7S1364C37S1364C2__7S1364C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1364C3[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
};
extern void _ZN7S1364C52v8Ev();
extern void _ZN7S1364C52v9Ev();
extern void _ZN7S1364C53v10Ev();
extern void _ZN7S1364C53v11Ev();
extern void _ZN7S1364C53v12Ev();
extern void _ZN7S1364C53v13Ev();
extern void _ZN7S1364C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1364C5__7S1364C2__7S1364C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1364C2[0]),
  (VTBL_ENTRY)&_ZN7S1364C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1364C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1364C53v14Ev,
};
static  VTT_ENTRY vtt_S1364C1[] = {
  {&(_ZTV7S1364C1[3]),  3,50},
  {&(_tg__ZTV7S1364C2__7S1364C1[3]),  3,15},
  {&(_tg__ZTV7S1364C37S1364C2__7S1364C1[3]),  3,13},
  {&(_tg__ZTV7S1364C5__7S1364C37S1364C2__7S1364C1[9]),  9,16},
  {&(_tg__ZTV7S1364C5__7S1364C2__7S1364C1[9]),  9,16},
  {&(_ZTV7S1364C1[43]),  43,50},
};
extern VTBL_ENTRY _ZTI7S1364C1[];
extern  VTBL_ENTRY _ZTV7S1364C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1364C1[];
Class_Descriptor cd_S1364C1 = {  "S1364C1", // class name
  bases_S1364C1, 6,
  &(vtc_S1364C1[0]), // expected_vtbl_contents
  &(vtt_S1364C1[0]), // expected_vtt_contents
  ABISELECT(256,156), // object size
  NSPAIRA(_ZTI7S1364C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1364C1),50, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1364C1),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18357C1  {
  void *s18357c1f0[4];
  int s18357c1f1[2];
  void *s18357c1f2;
  char s18357c1f3;
  void *s18357c1f4[8];
  int s18357c1f5;
  void *s18357c1f6;
  int s18357c1f7;
  void *s18357c1f8;
  char s18357c1f9[2];
  void *s18357c1f10[2];
  ::S2123C37 s18357c1f11;
  ::S2123C37 s18357c1f12;
  char s18357c1f13[2];
  ::S3681C11 s18357c1f14;
  ::S2123C20_nt s18357c1f15;
  void *s18357c1f16;
  void  mf18357c1(); // _ZN8S18357C19mf18357c1Ev
};
//SIG(1 S18357C1) C1{ m Fp[4] Fi[2] Fp Fc Fp[8] Fi Fp Fi Fp Fc[2] Fp[2] FC2{ m Fp Fi[2] FC3{ m}} FC2 Fc[2] FC4{ BC5{ vd v2 v3 v4 Fp Fi} v1} FC6{ m Fp Fi FC7{ m}} Fp}


void  S18357C1 ::mf18357c1(){}

static void Test_S18357C1()
{
  {
    init_simple_test("S18357C1");
    S18357C1 lv;
    check2(sizeof(lv), ABISELECT(280,156), "sizeof(S18357C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18357C1)");
    check_field_offset(lv, s18357c1f0, 0, "S18357C1.s18357c1f0");
    check_field_offset(lv, s18357c1f1, ABISELECT(32,16), "S18357C1.s18357c1f1");
    check_field_offset(lv, s18357c1f2, ABISELECT(40,24), "S18357C1.s18357c1f2");
    check_field_offset(lv, s18357c1f3, ABISELECT(48,28), "S18357C1.s18357c1f3");
    check_field_offset(lv, s18357c1f4, ABISELECT(56,32), "S18357C1.s18357c1f4");
    check_field_offset(lv, s18357c1f5, ABISELECT(120,64), "S18357C1.s18357c1f5");
    check_field_offset(lv, s18357c1f6, ABISELECT(128,68), "S18357C1.s18357c1f6");
    check_field_offset(lv, s18357c1f7, ABISELECT(136,72), "S18357C1.s18357c1f7");
    check_field_offset(lv, s18357c1f8, ABISELECT(144,76), "S18357C1.s18357c1f8");
    check_field_offset(lv, s18357c1f9, ABISELECT(152,80), "S18357C1.s18357c1f9");
    check_field_offset(lv, s18357c1f10, ABISELECT(160,84), "S18357C1.s18357c1f10");
    check_field_offset(lv, s18357c1f11, ABISELECT(176,92), "S18357C1.s18357c1f11");
    check_field_offset(lv, s18357c1f12, ABISELECT(200,108), "S18357C1.s18357c1f12");
    check_field_offset(lv, s18357c1f13, ABISELECT(224,124), "S18357C1.s18357c1f13");
    check_field_offset(lv, s18357c1f14, ABISELECT(232,128), "S18357C1.s18357c1f14");
    check_field_offset(lv, s18357c1f15, ABISELECT(256,140), "S18357C1.s18357c1f15");
    check_field_offset(lv, s18357c1f16, ABISELECT(272,152), "S18357C1.s18357c1f16");
  }
}
static Arrange_To_Call_Me vS18357C1(Test_S18357C1, "S18357C1", ABISELECT(280,156));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4900C3_nt  {
  void *s4900c3f0;
  char s4900c3f1;
  int s4900c3f2[4];
  void *s4900c3f3;
  virtual  ~S4900C3_nt(); // _ZN10S4900C3_ntD1Ev
  virtual void  v3(); // _ZN10S4900C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4900C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4900C3_nt2v5Ev
  virtual void  v6(); // _ZN10S4900C3_nt2v6Ev
  S4900C3_nt(); // tgen
};
//SIG(-1 S4900C3_nt) C1{ vd v1 v2 v3 v4 Fp Fc Fi[4] Fp}


 S4900C3_nt ::~S4900C3_nt(){ note_dtor("S4900C3_nt", this);}
void  S4900C3_nt ::v3(){vfunc_called(this, "_ZN10S4900C3_nt2v3Ev");}
void  S4900C3_nt ::v4(){vfunc_called(this, "_ZN10S4900C3_nt2v4Ev");}
void  S4900C3_nt ::v5(){vfunc_called(this, "_ZN10S4900C3_nt2v5Ev");}
void  S4900C3_nt ::v6(){vfunc_called(this, "_ZN10S4900C3_nt2v6Ev");}
S4900C3_nt ::S4900C3_nt(){ note_ctor("S4900C3_nt", this);} // tgen

//skip512 S4900C3_nt

#else // __cplusplus

extern void _ZN10S4900C3_ntC1Ev();
extern void _ZN10S4900C3_ntD1Ev();
Name_Map name_map_S4900C3_nt[] = {
  NSPAIR(_ZN10S4900C3_ntC1Ev),
  NSPAIR(_ZN10S4900C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4900C3_nt[];
extern void _ZN10S4900C3_ntD1Ev();
extern void _ZN10S4900C3_ntD0Ev();
extern void _ZN10S4900C3_nt2v3Ev();
extern void _ZN10S4900C3_nt2v4Ev();
extern void _ZN10S4900C3_nt2v5Ev();
extern void _ZN10S4900C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S4900C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4900C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4900C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S4900C3_nt[];
VTBL_ENTRY *P__ZTI10S4900C3_nt = _ZTI10S4900C3_nt; 
extern  VTBL_ENTRY _ZTV10S4900C3_nt[];
Class_Descriptor cd_S4900C3_nt = {  "S4900C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4900C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S4900C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4900C3_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  S4900C2_nt  : S4900C3_nt {
  int s4900c2f0[3];
  virtual  ~S4900C2_nt(); // _ZN10S4900C2_ntD1Ev
  virtual void  v7(); // _ZN10S4900C2_nt2v7Ev
  virtual void  v8(); // _ZN10S4900C2_nt2v8Ev
  virtual void  v9(); // _ZN10S4900C2_nt2v9Ev
  S4900C2_nt(); // tgen
};
//SIG(-1 S4900C2_nt) C1{ BC2{ vd v4 v5 v6 v7 Fp Fc Fi[4] Fp} vd v1 v2 v3 Fi[3]}


 S4900C2_nt ::~S4900C2_nt(){ note_dtor("S4900C2_nt", this);}
void  S4900C2_nt ::v7(){vfunc_called(this, "_ZN10S4900C2_nt2v7Ev");}
void  S4900C2_nt ::v8(){vfunc_called(this, "_ZN10S4900C2_nt2v8Ev");}
void  S4900C2_nt ::v9(){vfunc_called(this, "_ZN10S4900C2_nt2v9Ev");}
S4900C2_nt ::S4900C2_nt(){ note_ctor("S4900C2_nt", this);} // tgen

//skip512 S4900C2_nt

#else // __cplusplus

extern void _ZN10S4900C2_ntC1Ev();
extern void _ZN10S4900C2_ntD1Ev();
Name_Map name_map_S4900C2_nt[] = {
  NSPAIR(_ZN10S4900C2_ntC1Ev),
  NSPAIR(_ZN10S4900C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4900C3_nt;
extern VTBL_ENTRY _ZTI10S4900C3_nt[];
extern  VTBL_ENTRY _ZTV10S4900C3_nt[];
static Base_Class bases_S4900C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4900C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4900C2_nt[];
extern void _ZN10S4900C2_ntD1Ev();
extern void _ZN10S4900C2_ntD0Ev();
extern void _ZN10S4900C3_nt2v3Ev();
extern void _ZN10S4900C3_nt2v4Ev();
extern void _ZN10S4900C3_nt2v5Ev();
extern void _ZN10S4900C3_nt2v6Ev();
extern void _ZN10S4900C2_nt2v7Ev();
extern void _ZN10S4900C2_nt2v8Ev();
extern void _ZN10S4900C2_nt2v9Ev();
static  VTBL_ENTRY vtc_S4900C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4900C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4900C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4900C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4900C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4900C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4900C2_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S4900C2_nt[];
VTBL_ENTRY *P__ZTI10S4900C2_nt = _ZTI10S4900C2_nt; 
extern  VTBL_ENTRY _ZTV10S4900C2_nt[];
Class_Descriptor cd_S4900C2_nt = {  "S4900C2_nt", // class name
  bases_S4900C2_nt, 1,
  &(vtc_S4900C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI10S4900C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4900C2_nt),11, //virtual function table var
  2, // 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  S4900C4_nt  {
  __tsi64 s4900c4f0;
  void *s4900c4f1;
  void  mf4900c4(); // _ZN10S4900C4_nt8mf4900c4Ev
};
//SIG(-1 S4900C4_nt) C1{ m FL Fp}


void  S4900C4_nt ::mf4900c4(){}

//skip512 S4900C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4900C6_nt  {
  virtual  ~S4900C6_nt(); // _ZN10S4900C6_ntD1Ev
  virtual void  v11(); // _ZN10S4900C6_nt3v11Ev
  S4900C6_nt(); // tgen
};
//SIG(-1 S4900C6_nt) C1{ vd v1}


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

//skip512 S4900C6_nt

#else // __cplusplus

extern void _ZN10S4900C6_ntC1Ev();
extern void _ZN10S4900C6_ntD1Ev();
Name_Map name_map_S4900C6_nt[] = {
  NSPAIR(_ZN10S4900C6_ntC1Ev),
  NSPAIR(_ZN10S4900C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4900C6_nt[];
extern void _ZN10S4900C6_ntD1Ev();
extern void _ZN10S4900C6_ntD0Ev();
extern void _ZN10S4900C6_nt3v11Ev();
static  VTBL_ENTRY vtc_S4900C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4900C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S4900C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4900C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4900C6_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S4900C6_nt[];
VTBL_ENTRY *P__ZTI10S4900C6_nt = _ZTI10S4900C6_nt; 
extern  VTBL_ENTRY _ZTV10S4900C6_nt[];
Class_Descriptor cd_S4900C6_nt = {  "S4900C6_nt", // class name
  0,0,//no base classes
  &(vtc_S4900C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4900C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4900C6_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  S4900C5  : S4900C6_nt {
  int s4900c5f0[5];
  ::S708C21_nt s4900c5f1;
  virtual  ~S4900C5(); // _ZN7S4900C5D1Ev
  virtual void  v10(); // _ZN7S4900C53v10Ev
  S4900C5(); // tgen
};
//SIG(-1 S4900C5) C1{ BC2{ vd v2} vd v1 Fi[5] FC3{ m Fi[4]}}


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

static void Test_S4900C5()
{
  extern Class_Descriptor cd_S4900C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S4900C5, buf);
    S4900C5 *dp, &lv = *(dp=new (buf) S4900C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S4900C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4900C5)");
    check_base_class_offset(lv, (S4900C6_nt*), 0, "S4900C5");
    check_field_offset(lv, s4900c5f0, ABISELECT(8,4), "S4900C5.s4900c5f0");
    check_field_offset(lv, s4900c5f1, ABISELECT(28,24), "S4900C5.s4900c5f1");
    test_class_info(&lv, &cd_S4900C5);
    dp->~S4900C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4900C5(Test_S4900C5, "S4900C5", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S4900C5C1Ev();
extern void _ZN7S4900C5D1Ev();
Name_Map name_map_S4900C5[] = {
  NSPAIR(_ZN7S4900C5C1Ev),
  NSPAIR(_ZN7S4900C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4900C6_nt;
extern VTBL_ENTRY _ZTI10S4900C6_nt[];
extern  VTBL_ENTRY _ZTV10S4900C6_nt[];
static Base_Class bases_S4900C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4900C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4900C5[];
extern void _ZN7S4900C5D1Ev();
extern void _ZN7S4900C5D0Ev();
extern void _ZN10S4900C6_nt3v11Ev();
extern void _ZN7S4900C53v10Ev();
static  VTBL_ENTRY vtc_S4900C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4900C5[0]),
  (VTBL_ENTRY)&_ZN7S4900C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4900C5D0Ev,
  (VTBL_ENTRY)&_ZN10S4900C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S4900C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S4900C5[];
extern  VTBL_ENTRY _ZTV7S4900C5[];
Class_Descriptor cd_S4900C5 = {  "S4900C5", // class name
  bases_S4900C5, 1,
  &(vtc_S4900C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S4900C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4900C5),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  S4900C1  : S4900C2_nt {
  int s4900c1f0;
  ::S4900C4_nt s4900c1f1;
  int s4900c1f2[5];
  ::S4900C5 s4900c1f3;
  char s4900c1f4;
  virtual  ~S4900C1(); // _ZN7S4900C1D1Ev
  virtual void  v1(); // _ZN7S4900C12v1Ev
  virtual void  v2(); // _ZN7S4900C12v2Ev
  S4900C1(); // tgen
};
//SIG(1 S4900C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 Fp Fc Fi[4] Fp} vd v7 v8 v9 Fi[3]} vd v1 v2 Fi FC4{ m FL Fp} Fi[5] FC5{ BC6{ vd v11} vd v10 Fi[5] FC7{ m Fi[4]}} Fc}


 S4900C1 ::~S4900C1(){ note_dtor("S4900C1", this);}
void  S4900C1 ::v1(){vfunc_called(this, "_ZN7S4900C12v1Ev");}
void  S4900C1 ::v2(){vfunc_called(this, "_ZN7S4900C12v2Ev");}
S4900C1 ::S4900C1(){ note_ctor("S4900C1", this);} // tgen

static void Test_S4900C1()
{
  extern Class_Descriptor cd_S4900C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,32)];
    init_test(&cd_S4900C1, buf);
    S4900C1 *dp, &lv = *(dp=new (buf) S4900C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,124), "sizeof(S4900C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4900C1)");
    check_base_class_offset(lv, (S4900C3_nt*)(S4900C2_nt*), 0, "S4900C1");
    check_base_class_offset(lv, (S4900C2_nt*), 0, "S4900C1");
    check_field_offset(lv, s4900c1f0, ABISELECT(60,44), "S4900C1.s4900c1f0");
    check_field_offset(lv, s4900c1f1, ABISELECT(64,48), "S4900C1.s4900c1f1");
    check_field_offset(lv, s4900c1f2, ABISELECT(80,60), "S4900C1.s4900c1f2");
    check_field_offset(lv, s4900c1f3, ABISELECT(104,80), "S4900C1.s4900c1f3");
    check_field_offset(lv, s4900c1f4, ABISELECT(152,120), "S4900C1.s4900c1f4");
    test_class_info(&lv, &cd_S4900C1);
    dp->~S4900C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4900C1(Test_S4900C1, "S4900C1", ABISELECT(160,124));

#else // __cplusplus

extern void _ZN7S4900C1C1Ev();
extern void _ZN7S4900C1D1Ev();
Name_Map name_map_S4900C1[] = {
  NSPAIR(_ZN7S4900C1C1Ev),
  NSPAIR(_ZN7S4900C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4900C3_nt;
extern VTBL_ENTRY _ZTI10S4900C3_nt[];
extern  VTBL_ENTRY _ZTV10S4900C3_nt[];
extern Class_Descriptor cd_S4900C2_nt;
extern VTBL_ENTRY _ZTI10S4900C2_nt[];
extern  VTBL_ENTRY _ZTV10S4900C2_nt[];
static Base_Class bases_S4900C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4900C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4900C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4900C1[];
extern void _ZN7S4900C1D1Ev();
extern void _ZN7S4900C1D0Ev();
extern void _ZN10S4900C3_nt2v3Ev();
extern void _ZN10S4900C3_nt2v4Ev();
extern void _ZN10S4900C3_nt2v5Ev();
extern void _ZN10S4900C3_nt2v6Ev();
extern void _ZN10S4900C2_nt2v7Ev();
extern void _ZN10S4900C2_nt2v8Ev();
extern void _ZN10S4900C2_nt2v9Ev();
extern void _ZN7S4900C12v1Ev();
extern void _ZN7S4900C12v2Ev();
static  VTBL_ENTRY vtc_S4900C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4900C1[0]),
  (VTBL_ENTRY)&_ZN7S4900C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4900C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4900C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4900C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4900C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4900C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S4900C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4900C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4900C1[];
extern  VTBL_ENTRY _ZTV7S4900C1[];
Class_Descriptor cd_S4900C1 = {  "S4900C1", // class name
  bases_S4900C1, 2,
  &(vtc_S4900C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,124), // object size
  NSPAIRA(_ZTI7S4900C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4900C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4899C3  {
  void *s4899c3f0;
  char s4899c3f1;
  int s4899c3f2[4];
  void *s4899c3f3;
  virtual  ~S4899C3(); // _ZN7S4899C3D1Ev
  virtual void  v3(); // _ZN7S4899C32v3Ev
  virtual void  v4(); // _ZN7S4899C32v4Ev
  virtual void  v5(); // _ZN7S4899C32v5Ev
  virtual void  v6(); // _ZN7S4899C32v6Ev
  S4899C3(); // tgen
};
//SIG(-1 S4899C3) C1{ vd v1 v2 v3 v4 Fp Fc Fi[4] Fp}


 S4899C3 ::~S4899C3(){ note_dtor("S4899C3", this);}
void  S4899C3 ::v3(){vfunc_called(this, "_ZN7S4899C32v3Ev");}
void  S4899C3 ::v4(){vfunc_called(this, "_ZN7S4899C32v4Ev");}
void  S4899C3 ::v5(){vfunc_called(this, "_ZN7S4899C32v5Ev");}
void  S4899C3 ::v6(){vfunc_called(this, "_ZN7S4899C32v6Ev");}
S4899C3 ::S4899C3(){ note_ctor("S4899C3", this);} // tgen

static void Test_S4899C3()
{
  extern Class_Descriptor cd_S4899C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4899C3, buf);
    S4899C3 *dp, &lv = *(dp=new (buf) S4899C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4899C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4899C3)");
    check_field_offset(lv, s4899c3f0, ABISELECT(8,4), "S4899C3.s4899c3f0");
    check_field_offset(lv, s4899c3f1, ABISELECT(16,8), "S4899C3.s4899c3f1");
    check_field_offset(lv, s4899c3f2, ABISELECT(20,12), "S4899C3.s4899c3f2");
    check_field_offset(lv, s4899c3f3, ABISELECT(40,28), "S4899C3.s4899c3f3");
    test_class_info(&lv, &cd_S4899C3);
    dp->~S4899C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4899C3(Test_S4899C3, "S4899C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4899C3C1Ev();
extern void _ZN7S4899C3D1Ev();
Name_Map name_map_S4899C3[] = {
  NSPAIR(_ZN7S4899C3C1Ev),
  NSPAIR(_ZN7S4899C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4899C3[];
extern void _ZN7S4899C3D1Ev();
extern void _ZN7S4899C3D0Ev();
extern void _ZN7S4899C32v3Ev();
extern void _ZN7S4899C32v4Ev();
extern void _ZN7S4899C32v5Ev();
extern void _ZN7S4899C32v6Ev();
static  VTBL_ENTRY vtc_S4899C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4899C3[0]),
  (VTBL_ENTRY)&_ZN7S4899C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4899C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S4899C3[];
extern  VTBL_ENTRY _ZTV7S4899C3[];
Class_Descriptor cd_S4899C3 = {  "S4899C3", // class name
  0,0,//no base classes
  &(vtc_S4899C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4899C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4899C3),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  S4899C2  : S4899C3 {
  int s4899c2f0[3];
  virtual  ~S4899C2(); // _ZN7S4899C2D1Ev
  virtual void  v7(); // _ZN7S4899C22v7Ev
  virtual void  v8(); // _ZN7S4899C22v8Ev
  virtual void  v9(); // _ZN7S4899C22v9Ev
  S4899C2(); // tgen
};
//SIG(-1 S4899C2) C1{ BC2{ vd v4 v5 v6 v7 Fp Fc Fi[4] Fp} vd v1 v2 v3 Fi[3]}


 S4899C2 ::~S4899C2(){ note_dtor("S4899C2", this);}
void  S4899C2 ::v7(){vfunc_called(this, "_ZN7S4899C22v7Ev");}
void  S4899C2 ::v8(){vfunc_called(this, "_ZN7S4899C22v8Ev");}
void  S4899C2 ::v9(){vfunc_called(this, "_ZN7S4899C22v9Ev");}
S4899C2 ::S4899C2(){ note_ctor("S4899C2", this);} // tgen

static void Test_S4899C2()
{
  extern Class_Descriptor cd_S4899C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4899C2, buf);
    S4899C2 *dp, &lv = *(dp=new (buf) S4899C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4899C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4899C2)");
    check_base_class_offset(lv, (S4899C3*), 0, "S4899C2");
    check_field_offset(lv, s4899c2f0, ABISELECT(48,32), "S4899C2.s4899c2f0");
    test_class_info(&lv, &cd_S4899C2);
    dp->~S4899C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4899C2(Test_S4899C2, "S4899C2", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4899C2C1Ev();
extern void _ZN7S4899C2D1Ev();
Name_Map name_map_S4899C2[] = {
  NSPAIR(_ZN7S4899C2C1Ev),
  NSPAIR(_ZN7S4899C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4899C3;
extern VTBL_ENTRY _ZTI7S4899C3[];
extern  VTBL_ENTRY _ZTV7S4899C3[];
static Base_Class bases_S4899C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4899C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4899C2[];
extern void _ZN7S4899C2D1Ev();
extern void _ZN7S4899C2D0Ev();
extern void _ZN7S4899C32v3Ev();
extern void _ZN7S4899C32v4Ev();
extern void _ZN7S4899C32v5Ev();
extern void _ZN7S4899C32v6Ev();
extern void _ZN7S4899C22v7Ev();
extern void _ZN7S4899C22v8Ev();
extern void _ZN7S4899C22v9Ev();
static  VTBL_ENTRY vtc_S4899C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4899C2[0]),
  (VTBL_ENTRY)&_ZN7S4899C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4899C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4899C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4899C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4899C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4899C2[];
extern  VTBL_ENTRY _ZTV7S4899C2[];
Class_Descriptor cd_S4899C2 = {  "S4899C2", // class name
  bases_S4899C2, 1,
  &(vtc_S4899C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4899C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4899C2),11, //virtual function table var
  2, // 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  S4899C4_nt  {
  long s4899c4f0;
  void *s4899c4f1;
  void  mf4899c4(); // _ZN10S4899C4_nt8mf4899c4Ev
};
//SIG(-1 S4899C4_nt) C1{ m Fl Fp}


void  S4899C4_nt ::mf4899c4(){}

//skip512 S4899C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4899C1  : S4899C2 {
  int s4899c1f0;
  ::S4899C4_nt s4899c1f1;
  int s4899c1f2[5];
  ::S4900C5 s4899c1f3;
  char s4899c1f4;
  virtual  ~S4899C1(); // _ZN7S4899C1D1Ev
  virtual void  v1(); // _ZN7S4899C12v1Ev
  virtual void  v2(); // _ZN7S4899C12v2Ev
  S4899C1(); // tgen
};
//SIG(1 S4899C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 Fp Fc Fi[4] Fp} vd v7 v8 v9 Fi[3]} vd v1 v2 Fi FC4{ m Fl Fp} Fi[5] FC5{ BC6{ vd v11} vd v10 Fi[5] FC7{ m Fi[4]}} Fc}


 S4899C1 ::~S4899C1(){ note_dtor("S4899C1", this);}
void  S4899C1 ::v1(){vfunc_called(this, "_ZN7S4899C12v1Ev");}
void  S4899C1 ::v2(){vfunc_called(this, "_ZN7S4899C12v2Ev");}
S4899C1 ::S4899C1(){ note_ctor("S4899C1", this);} // tgen

static void Test_S4899C1()
{
  extern Class_Descriptor cd_S4899C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S4899C1, buf);
    S4899C1 *dp, &lv = *(dp=new (buf) S4899C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S4899C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4899C1)");
    check_base_class_offset(lv, (S4899C3*)(S4899C2*), 0, "S4899C1");
    check_base_class_offset(lv, (S4899C2*), 0, "S4899C1");
    check_field_offset(lv, s4899c1f0, ABISELECT(60,44), "S4899C1.s4899c1f0");
    check_field_offset(lv, s4899c1f1, ABISELECT(64,48), "S4899C1.s4899c1f1");
    check_field_offset(lv, s4899c1f2, ABISELECT(80,56), "S4899C1.s4899c1f2");
    check_field_offset(lv, s4899c1f3, ABISELECT(104,76), "S4899C1.s4899c1f3");
    check_field_offset(lv, s4899c1f4, ABISELECT(152,116), "S4899C1.s4899c1f4");
    test_class_info(&lv, &cd_S4899C1);
    dp->~S4899C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4899C1(Test_S4899C1, "S4899C1", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S4899C1C1Ev();
extern void _ZN7S4899C1D1Ev();
Name_Map name_map_S4899C1[] = {
  NSPAIR(_ZN7S4899C1C1Ev),
  NSPAIR(_ZN7S4899C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4899C3;
extern VTBL_ENTRY _ZTI7S4899C3[];
extern  VTBL_ENTRY _ZTV7S4899C3[];
extern Class_Descriptor cd_S4899C2;
extern VTBL_ENTRY _ZTI7S4899C2[];
extern  VTBL_ENTRY _ZTV7S4899C2[];
static Base_Class bases_S4899C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4899C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4899C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4899C1[];
extern void _ZN7S4899C1D1Ev();
extern void _ZN7S4899C1D0Ev();
extern void _ZN7S4899C32v3Ev();
extern void _ZN7S4899C32v4Ev();
extern void _ZN7S4899C32v5Ev();
extern void _ZN7S4899C32v6Ev();
extern void _ZN7S4899C22v7Ev();
extern void _ZN7S4899C22v8Ev();
extern void _ZN7S4899C22v9Ev();
extern void _ZN7S4899C12v1Ev();
extern void _ZN7S4899C12v2Ev();
static  VTBL_ENTRY vtc_S4899C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4899C1[0]),
  (VTBL_ENTRY)&_ZN7S4899C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4899C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4899C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4899C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4899C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4899C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4899C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4899C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4899C1[];
extern  VTBL_ENTRY _ZTV7S4899C1[];
Class_Descriptor cd_S4899C1 = {  "S4899C1", // class name
  bases_S4899C1, 2,
  &(vtc_S4899C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S4899C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4899C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19331C3  {
  long double s19331c3f0[3];
  int s19331c3f1;
  virtual  ~S19331C3(); // _ZN8S19331C3D1Ev
  virtual void  v3(); // _ZN8S19331C32v3Ev
  virtual void  v4(); // _ZN8S19331C32v4Ev
  virtual void  v5(); // _ZN8S19331C32v5Ev
  virtual void  v6(); // _ZN8S19331C32v6Ev
  virtual void  v7(); // _ZN8S19331C32v7Ev
  virtual void  v8(); // _ZN8S19331C32v8Ev
  S19331C3(); // tgen
};
//SIG(-1 S19331C3) C1{ vd v1 v2 v3 v4 v5 v6 FD[3] Fi}


 S19331C3 ::~S19331C3(){ note_dtor("S19331C3", this);}
void  S19331C3 ::v3(){vfunc_called(this, "_ZN8S19331C32v3Ev");}
void  S19331C3 ::v4(){vfunc_called(this, "_ZN8S19331C32v4Ev");}
void  S19331C3 ::v5(){vfunc_called(this, "_ZN8S19331C32v5Ev");}
void  S19331C3 ::v6(){vfunc_called(this, "_ZN8S19331C32v6Ev");}
void  S19331C3 ::v7(){vfunc_called(this, "_ZN8S19331C32v7Ev");}
void  S19331C3 ::v8(){vfunc_called(this, "_ZN8S19331C32v8Ev");}
S19331C3 ::S19331C3(){ note_ctor("S19331C3", this);} // tgen

static void Test_S19331C3()
{
  extern Class_Descriptor cd_S19331C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19331C3, buf);
    S19331C3 *dp, &lv = *(dp=new (buf) S19331C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19331C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19331C3)");
    check_field_offset(lv, s19331c3f0, ABISELECT(16,4), "S19331C3.s19331c3f0");
    check_field_offset(lv, s19331c3f1, ABISELECT(64,40), "S19331C3.s19331c3f1");
    test_class_info(&lv, &cd_S19331C3);
    dp->~S19331C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19331C3(Test_S19331C3, "S19331C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19331C3C1Ev();
extern void _ZN8S19331C3D1Ev();
Name_Map name_map_S19331C3[] = {
  NSPAIR(_ZN8S19331C3C1Ev),
  NSPAIR(_ZN8S19331C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19331C3[];
extern void _ZN8S19331C3D1Ev();
extern void _ZN8S19331C3D0Ev();
extern void _ZN8S19331C32v3Ev();
extern void _ZN8S19331C32v4Ev();
extern void _ZN8S19331C32v5Ev();
extern void _ZN8S19331C32v6Ev();
extern void _ZN8S19331C32v7Ev();
extern void _ZN8S19331C32v8Ev();
static  VTBL_ENTRY vtc_S19331C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19331C3[0]),
  (VTBL_ENTRY)&_ZN8S19331C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19331C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19331C3[];
extern  VTBL_ENTRY _ZTV8S19331C3[];
Class_Descriptor cd_S19331C3 = {  "S19331C3", // class name
  0,0,//no base classes
  &(vtc_S19331C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19331C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19331C3),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  S19331C4  {
  int s19331c4f0;
  virtual void  v9(); // _ZN8S19331C42v9Ev
  virtual void  v10(); // _ZN8S19331C43v10Ev
  virtual void  v11(); // _ZN8S19331C43v11Ev
  virtual void  v12(); // _ZN8S19331C43v12Ev
  virtual void  v13(); // _ZN8S19331C43v13Ev
  ~S19331C4(); // tgen
  S19331C4(); // tgen
};
//SIG(-1 S19331C4) C1{ v1 v2 v3 v4 v5 Fi}


void  S19331C4 ::v9(){vfunc_called(this, "_ZN8S19331C42v9Ev");}
void  S19331C4 ::v10(){vfunc_called(this, "_ZN8S19331C43v10Ev");}
void  S19331C4 ::v11(){vfunc_called(this, "_ZN8S19331C43v11Ev");}
void  S19331C4 ::v12(){vfunc_called(this, "_ZN8S19331C43v12Ev");}
void  S19331C4 ::v13(){vfunc_called(this, "_ZN8S19331C43v13Ev");}
S19331C4 ::~S19331C4(){ note_dtor("S19331C4", this);} // tgen
S19331C4 ::S19331C4(){ note_ctor("S19331C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19331C4C1Ev();
extern void _ZN8S19331C4D1Ev();
Name_Map name_map_S19331C4[] = {
  NSPAIR(_ZN8S19331C4C1Ev),
  NSPAIR(_ZN8S19331C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19331C4[];
extern void _ZN8S19331C42v9Ev();
extern void _ZN8S19331C43v10Ev();
extern void _ZN8S19331C43v11Ev();
extern void _ZN8S19331C43v12Ev();
extern void _ZN8S19331C43v13Ev();
static  VTBL_ENTRY vtc_S19331C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19331C4[0]),
  (VTBL_ENTRY)&_ZN8S19331C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v13Ev,
};
extern VTBL_ENTRY _ZTI8S19331C4[];
extern  VTBL_ENTRY _ZTV8S19331C4[];
Class_Descriptor cd_S19331C4 = {  "S19331C4", // class name
  0,0,//no base classes
  &(vtc_S19331C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19331C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19331C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19331C2  : S19331C3 , S19331C4 {
  short s19331c2f0;
  virtual  ~S19331C2(); // _ZN8S19331C2D1Ev
  virtual void  v14(); // _ZN8S19331C23v14Ev
  virtual void  v15(); // _ZN8S19331C23v15Ev
  virtual void  v16(); // _ZN8S19331C23v16Ev
  virtual void  v17(); // _ZN8S19331C23v17Ev
  virtual void  v18(); // _ZN8S19331C23v18Ev
  virtual void  v19(); // _ZN8S19331C23v19Ev
  virtual void  v20(); // _ZN8S19331C23v20Ev
  virtual void  v21(); // _ZN8S19331C23v21Ev
  S19331C2(); // tgen
};
//SIG(-1 S19331C2) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 FD[3] Fi} BC3{ v15 v16 v17 v18 v19 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fs}


 S19331C2 ::~S19331C2(){ note_dtor("S19331C2", this);}
void  S19331C2 ::v14(){vfunc_called(this, "_ZN8S19331C23v14Ev");}
void  S19331C2 ::v15(){vfunc_called(this, "_ZN8S19331C23v15Ev");}
void  S19331C2 ::v16(){vfunc_called(this, "_ZN8S19331C23v16Ev");}
void  S19331C2 ::v17(){vfunc_called(this, "_ZN8S19331C23v17Ev");}
void  S19331C2 ::v18(){vfunc_called(this, "_ZN8S19331C23v18Ev");}
void  S19331C2 ::v19(){vfunc_called(this, "_ZN8S19331C23v19Ev");}
void  S19331C2 ::v20(){vfunc_called(this, "_ZN8S19331C23v20Ev");}
void  S19331C2 ::v21(){vfunc_called(this, "_ZN8S19331C23v21Ev");}
S19331C2 ::S19331C2(){ note_ctor("S19331C2", this);} // tgen

static void Test_S19331C2()
{
  extern Class_Descriptor cd_S19331C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19331C2, buf);
    S19331C2 *dp, &lv = *(dp=new (buf) S19331C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19331C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19331C2)");
    check_base_class_offset(lv, (S19331C3*), 0, "S19331C2");
    check_base_class_offset(lv, (S19331C4*), ABISELECT(72,44), "S19331C2");
    check_field_offset(lv, s19331c2f0, ABISELECT(84,52), "S19331C2.s19331c2f0");
    test_class_info(&lv, &cd_S19331C2);
    dp->~S19331C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19331C2(Test_S19331C2, "S19331C2", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19331C2C1Ev();
extern void _ZN8S19331C2D1Ev();
Name_Map name_map_S19331C2[] = {
  NSPAIR(_ZN8S19331C2C1Ev),
  NSPAIR(_ZN8S19331C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19331C3;
extern VTBL_ENTRY _ZTI8S19331C3[];
extern  VTBL_ENTRY _ZTV8S19331C3[];
extern Class_Descriptor cd_S19331C4;
extern VTBL_ENTRY _ZTI8S19331C4[];
extern  VTBL_ENTRY _ZTV8S19331C4[];
static Base_Class bases_S19331C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19331C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19331C4,    ABISELECT(72,44), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19331C2[];
extern void _ZN8S19331C2D1Ev();
extern void _ZN8S19331C2D0Ev();
extern void _ZN8S19331C32v3Ev();
extern void _ZN8S19331C32v4Ev();
extern void _ZN8S19331C32v5Ev();
extern void _ZN8S19331C32v6Ev();
extern void _ZN8S19331C32v7Ev();
extern void _ZN8S19331C32v8Ev();
extern void _ZN8S19331C23v14Ev();
extern void _ZN8S19331C23v15Ev();
extern void _ZN8S19331C23v16Ev();
extern void _ZN8S19331C23v17Ev();
extern void _ZN8S19331C23v18Ev();
extern void _ZN8S19331C23v19Ev();
extern void _ZN8S19331C23v20Ev();
extern void _ZN8S19331C23v21Ev();
extern void _ZN8S19331C42v9Ev();
extern void _ZN8S19331C43v10Ev();
extern void _ZN8S19331C43v11Ev();
extern void _ZN8S19331C43v12Ev();
extern void _ZN8S19331C43v13Ev();
static  VTBL_ENTRY vtc_S19331C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19331C2[0]),
  (VTBL_ENTRY)&_ZN8S19331C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19331C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v21Ev,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S19331C2[0]),
  (VTBL_ENTRY)&_ZN8S19331C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v13Ev,
};
extern VTBL_ENTRY _ZTI8S19331C2[];
extern  VTBL_ENTRY _ZTV8S19331C2[];
Class_Descriptor cd_S19331C2 = {  "S19331C2", // class name
  bases_S19331C2, 2,
  &(vtc_S19331C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19331C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19331C2),25, //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  S19331C1  : virtual S19331C2 {
  __tsi64 s19331c1f0;
  ::S19331C4 s19331c1f1[10];
  int s19331c1f2;
  virtual  ~S19331C1(); // _ZN8S19331C1D2Ev
  virtual void  v1(); // _ZN8S19331C12v1Ev
  virtual void  v2(); // _ZN8S19331C12v2Ev
  S19331C1(); // tgen
};
//SIG(1 S19331C1) C1{ VBC2{ BC3{ vd v3 v4 v5 v6 v7 v8 FD[3] Fi} BC4{ v9 v10 v11 v12 v13 Fi} vd v14 v15 v16 v17 v18 v19 v20 v21 Fs} vd v1 v2 FL FC4[10] Fi}


 S19331C1 ::~S19331C1(){ note_dtor("S19331C1", this);}
void  S19331C1 ::v1(){vfunc_called(this, "_ZN8S19331C12v1Ev");}
void  S19331C1 ::v2(){vfunc_called(this, "_ZN8S19331C12v2Ev");}
S19331C1 ::S19331C1(){ note_ctor("S19331C1", this);} // tgen

static void Test_S19331C1()
{
  extern Class_Descriptor cd_S19331C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,39)];
    init_test(&cd_S19331C1, buf);
    S19331C1 *dp, &lv = *(dp=new (buf) S19331C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,152), "sizeof(S19331C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19331C1)");
    check_base_class_offset(lv, (S19331C3*)(S19331C2*), ABISELECT(192,96), "S19331C1");
    check_base_class_offset(lv, (S19331C4*)(S19331C2*), ABISELECT(264,140), "S19331C1");
    check_base_class_offset(lv, (S19331C2*), ABISELECT(192,96), "S19331C1");
    check_field_offset(lv, s19331c1f0, ABISELECT(8,4), "S19331C1.s19331c1f0");
    check_field_offset(lv, s19331c1f1, ABISELECT(16,12), "S19331C1.s19331c1f1");
    check_field_offset(lv, s19331c1f2, ABISELECT(176,92), "S19331C1.s19331c1f2");
    test_class_info(&lv, &cd_S19331C1);
    dp->~S19331C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19331C1(Test_S19331C1, "S19331C1", ABISELECT(288,152));

#else // __cplusplus

extern void _ZN8S19331C1C1Ev();
extern void _ZN8S19331C1D2Ev();
Name_Map name_map_S19331C1[] = {
  NSPAIR(_ZN8S19331C1C1Ev),
  NSPAIR(_ZN8S19331C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19331C3;
extern VTBL_ENTRY _ZTI8S19331C3[];
extern  VTBL_ENTRY _ZTV8S19331C3[];
extern Class_Descriptor cd_S19331C4;
extern VTBL_ENTRY _ZTI8S19331C4[];
extern  VTBL_ENTRY _ZTV8S19331C4[];
extern Class_Descriptor cd_S19331C2;
extern VTBL_ENTRY _ZTI8S19331C2[];
extern  VTBL_ENTRY _ZTV8S19331C2[];
static Base_Class bases_S19331C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19331C3,    ABISELECT(192,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, 0},
  {&cd_S19331C4,    ABISELECT(264,140), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19331C2,    ABISELECT(192,96), //bcp->offset
    7, //bcp->virtual_function_table_offset
    22, //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 _ZTI8S19331C1[];
extern void _ZN8S19331C1D1Ev();
extern void _ZN8S19331C1D0Ev();
extern void _ZN8S19331C12v1Ev();
extern void _ZN8S19331C12v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19331C1D1Ev,_ZTv0_n12_N8S19331C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19331C1D1Ev,_ZThn96_N8S19331C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19331C1D0Ev,_ZTv0_n12_N8S19331C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19331C1D0Ev,_ZThn96_N8S19331C1D0Ev)() __attribute__((weak));
extern void _ZN8S19331C32v3Ev();
extern void _ZN8S19331C32v4Ev();
extern void _ZN8S19331C32v5Ev();
extern void _ZN8S19331C32v6Ev();
extern void _ZN8S19331C32v7Ev();
extern void _ZN8S19331C32v8Ev();
extern void _ZN8S19331C23v14Ev();
extern void _ZN8S19331C23v15Ev();
extern void _ZN8S19331C23v16Ev();
extern void _ZN8S19331C23v17Ev();
extern void _ZN8S19331C23v18Ev();
extern void _ZN8S19331C23v19Ev();
extern void _ZN8S19331C23v20Ev();
extern void _ZN8S19331C23v21Ev();
extern void _ZN8S19331C42v9Ev();
extern void _ZN8S19331C43v10Ev();
extern void _ZN8S19331C43v11Ev();
extern void _ZN8S19331C43v12Ev();
extern void _ZN8S19331C43v13Ev();
static  VTBL_ENTRY vtc_S19331C1[] = {
  ABISELECT(192,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19331C1[0]),
  (VTBL_ENTRY)&_ZN8S19331C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19331C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19331C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19331C12v2Ev,
  ABISELECT(72,44),
  ABISELECT(72,44),
  ABISELECT(72,44),
  ABISELECT(72,44),
  ABISELECT(72,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-96),
  ABISELECT(-192,-96),
  (VTBL_ENTRY)&(_ZTI8S19331C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19331C1D1Ev,_ZTv0_n12_N8S19331C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19331C1D0Ev,_ZTv0_n12_N8S19331C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19331C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19331C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19331C23v21Ev,
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI8S19331C1[0]),
  (VTBL_ENTRY)&_ZN8S19331C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19331C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19331C1[];
static  VTT_ENTRY vtt_S19331C1[] = {
  {&(_ZTV8S19331C1[3]),  3,52},
  {&(_ZTV8S19331C1[29]),  29,52},
  {&(_ZTV8S19331C1[47]),  47,52},
};
extern VTBL_ENTRY _ZTI8S19331C1[];
extern  VTBL_ENTRY _ZTV8S19331C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19331C1[];
static VTBL_ENTRY alt_thunk_names137[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19331C1D0Ev,_ZTv0_n12_N8S19331C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19331C1D0Ev,_ZThn96_N8S19331C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19331C1D1Ev,_ZTv0_n12_N8S19331C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19331C1D1Ev,_ZThn96_N8S19331C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19331C1 = {  "S19331C1", // class name
  bases_S19331C1, 3,
  &(vtc_S19331C1[0]), // expected_vtbl_contents
  &(vtt_S19331C1[0]), // expected_vtt_contents
  ABISELECT(288,152), // object size
  NSPAIRA(_ZTI8S19331C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19331C1),52, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19331C1),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names137,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9083C2  {
  virtual  ~S9083C2(); // _ZN7S9083C2D1Ev
  virtual void  v2(); // _ZN7S9083C22v2Ev
  S9083C2(); // tgen
};
//SIG(-1 S9083C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9083C2C1Ev();
extern void _ZN7S9083C2D1Ev();
Name_Map name_map_S9083C2[] = {
  NSPAIR(_ZN7S9083C2C1Ev),
  NSPAIR(_ZN7S9083C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9083C2[];
extern void _ZN7S9083C2D1Ev();
extern void _ZN7S9083C2D0Ev();
extern void _ZN7S9083C22v2Ev();
static  VTBL_ENTRY vtc_S9083C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9083C2[0]),
  (VTBL_ENTRY)&_ZN7S9083C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9083C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9083C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9083C2[];
extern  VTBL_ENTRY _ZTV7S9083C2[];
Class_Descriptor cd_S9083C2 = {  "S9083C2", // class name
  0,0,//no base classes
  &(vtc_S9083C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9083C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9083C2),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  S9083C3_nt  {
  ::S2123C37 s9083c3f0;
  void *s9083c3f1[2];
  void  mf9083c3(); // _ZN10S9083C3_nt8mf9083c3Ev
};
//SIG(-1 S9083C3_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S9083C3_nt ::mf9083c3(){}

//skip512 S9083C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9083C1  : S9083C2 {
  void *s9083c1f0;
  char s9083c1f1[2];
  void *s9083c1f2[2];
  char s9083c1f3;
  ::S9083C3_nt s9083c1f4;
  char s9083c1f5;
  void *s9083c1f6[9];
  char s9083c1f7;
  ::S2123C19_nt s9083c1f8;
  char s9083c1f9[2];
  int s9083c1f10[3];
  char s9083c1f11;
  virtual  ~S9083C1(); // _ZN7S9083C1D1Ev
  virtual void  v1(); // _ZN7S9083C12v1Ev
  S9083C1(); // tgen
};
//SIG(1 S9083C1) C1{ BC2{ vd v2} vd v1 Fp Fc[2] Fp[2] Fc FC3{ m FC4{ m Fp Fi[2] FC5{ m}} Fp[2]} Fc Fp[9] Fc FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fc[2] Fi[3] Fc}


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

static void Test_S9083C1()
{
  extern Class_Descriptor cd_S9083C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,33)];
    init_test(&cd_S9083C1, buf);
    S9083C1 *dp, &lv = *(dp=new (buf) S9083C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,128), "sizeof(S9083C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9083C1)");
    check_base_class_offset(lv, (S9083C2*), 0, "S9083C1");
    check_field_offset(lv, s9083c1f0, ABISELECT(8,4), "S9083C1.s9083c1f0");
    check_field_offset(lv, s9083c1f1, ABISELECT(16,8), "S9083C1.s9083c1f1");
    check_field_offset(lv, s9083c1f2, ABISELECT(24,12), "S9083C1.s9083c1f2");
    check_field_offset(lv, s9083c1f3, ABISELECT(40,20), "S9083C1.s9083c1f3");
    check_field_offset(lv, s9083c1f4, ABISELECT(48,24), "S9083C1.s9083c1f4");
    check_field_offset(lv, s9083c1f5, ABISELECT(88,48), "S9083C1.s9083c1f5");
    check_field_offset(lv, s9083c1f6, ABISELECT(96,52), "S9083C1.s9083c1f6");
    check_field_offset(lv, s9083c1f7, ABISELECT(168,88), "S9083C1.s9083c1f7");
    check_field_offset(lv, s9083c1f8, ABISELECT(176,92), "S9083C1.s9083c1f8");
    check_field_offset(lv, s9083c1f9, ABISELECT(200,108), "S9083C1.s9083c1f9");
    check_field_offset(lv, s9083c1f10, ABISELECT(204,112), "S9083C1.s9083c1f10");
    check_field_offset(lv, s9083c1f11, ABISELECT(216,124), "S9083C1.s9083c1f11");
    test_class_info(&lv, &cd_S9083C1);
    dp->~S9083C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9083C1(Test_S9083C1, "S9083C1", ABISELECT(224,128));

#else // __cplusplus

extern void _ZN7S9083C1C1Ev();
extern void _ZN7S9083C1D1Ev();
Name_Map name_map_S9083C1[] = {
  NSPAIR(_ZN7S9083C1C1Ev),
  NSPAIR(_ZN7S9083C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9083C2;
extern VTBL_ENTRY _ZTI7S9083C2[];
extern  VTBL_ENTRY _ZTV7S9083C2[];
static Base_Class bases_S9083C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9083C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9083C1[];
extern void _ZN7S9083C1D1Ev();
extern void _ZN7S9083C1D0Ev();
extern void _ZN7S9083C22v2Ev();
extern void _ZN7S9083C12v1Ev();
static  VTBL_ENTRY vtc_S9083C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9083C1[0]),
  (VTBL_ENTRY)&_ZN7S9083C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9083C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9083C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9083C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9083C1[];
extern  VTBL_ENTRY _ZTV7S9083C1[];
Class_Descriptor cd_S9083C1 = {  "S9083C1", // class name
  bases_S9083C1, 1,
  &(vtc_S9083C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,128), // object size
  NSPAIRA(_ZTI7S9083C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9083C1),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  S6664C4  {
  int s6664c4f0;
  void *s6664c4f1;
  long double s6664c4f2[6];
  void *s6664c4f3;
  int s6664c4f4:4;
  long s6664c4f5[7];
  long double s6664c4f6;
  void *s6664c4f7;
  virtual void  v4(); // _ZN7S6664C42v4Ev
  ~S6664C4(); // tgen
  S6664C4(); // tgen
};
//SIG(-1 S6664C4) C1{ v1 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp}


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

static void Test_S6664C4()
{
  extern Class_Descriptor cd_S6664C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,35)];
    init_test(&cd_S6664C4, buf);
    S6664C4 *dp, &lv = *(dp=new (buf) S6664C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S6664C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6664C4)");
    check_field_offset(lv, s6664c4f0, ABISELECT(8,4), "S6664C4.s6664c4f0");
    check_field_offset(lv, s6664c4f1, ABISELECT(16,8), "S6664C4.s6664c4f1");
    check_field_offset(lv, s6664c4f2, ABISELECT(32,12), "S6664C4.s6664c4f2");
    check_field_offset(lv, s6664c4f3, ABISELECT(128,84), "S6664C4.s6664c4f3");
    set_bf_and_test(lv, s6664c4f4, ABISELECT(136,88), 0, 4, 1, "S6664C4");
    set_bf_and_test(lv, s6664c4f4, ABISELECT(136,88), 0, 4, hide_sll(1LL<<3), "S6664C4");
    check_field_offset(lv, s6664c4f5, ABISELECT(144,92), "S6664C4.s6664c4f5");
    check_field_offset(lv, s6664c4f6, ABISELECT(208,120), "S6664C4.s6664c4f6");
    check_field_offset(lv, s6664c4f7, ABISELECT(224,132), "S6664C4.s6664c4f7");
    test_class_info(&lv, &cd_S6664C4);
    dp->~S6664C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6664C4(Test_S6664C4, "S6664C4", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN7S6664C4C1Ev();
extern void _ZN7S6664C4D1Ev();
Name_Map name_map_S6664C4[] = {
  NSPAIR(_ZN7S6664C4C1Ev),
  NSPAIR(_ZN7S6664C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6664C4[];
extern void _ZN7S6664C42v4Ev();
static  VTBL_ENTRY vtc_S6664C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6664C4[0]),
  (VTBL_ENTRY)&_ZN7S6664C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S6664C4[];
extern  VTBL_ENTRY _ZTV7S6664C4[];
Class_Descriptor cd_S6664C4 = {  "S6664C4", // class name
  0,0,//no base classes
  &(vtc_S6664C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI7S6664C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6664C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6664C3  : virtual S6664C4 {
  int s6664c3f0[6];
  __tsi64 s6664c3f1;
  void *s6664c3f2[9];
  virtual  ~S6664C3(); // _ZN7S6664C3D2Ev
  S6664C3(); // tgen
};
//SIG(-1 S6664C3) C1{ VBC2{ v1 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]}


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

static void Test_S6664C3()
{
  extern Class_Descriptor cd_S6664C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,53)];
    init_test(&cd_S6664C3, buf);
    S6664C3 *dp, &lv = *(dp=new (buf) S6664C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,208), "sizeof(S6664C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6664C3)");
    check_base_class_offset(lv, (S6664C4*), ABISELECT(112,72), "S6664C3");
    check_field_offset(lv, s6664c3f0, ABISELECT(8,4), "S6664C3.s6664c3f0");
    check_field_offset(lv, s6664c3f1, ABISELECT(32,28), "S6664C3.s6664c3f1");
    check_field_offset(lv, s6664c3f2, ABISELECT(40,36), "S6664C3.s6664c3f2");
    test_class_info(&lv, &cd_S6664C3);
    dp->~S6664C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6664C3(Test_S6664C3, "S6664C3", ABISELECT(352,208));

#else // __cplusplus

extern void _ZN7S6664C3C1Ev();
extern void _ZN7S6664C3D2Ev();
Name_Map name_map_S6664C3[] = {
  NSPAIR(_ZN7S6664C3C1Ev),
  NSPAIR(_ZN7S6664C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6664C4;
extern VTBL_ENTRY _ZTI7S6664C4[];
extern  VTBL_ENTRY _ZTV7S6664C4[];
static Base_Class bases_S6664C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6664C4,    ABISELECT(112,72), //bcp->offset
    5, //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 _ZTI7S6664C3[];
extern void _ZN7S6664C3D1Ev();
extern void _ZN7S6664C3D0Ev();
extern void _ZN7S6664C42v4Ev();
static  VTBL_ENTRY vtc_S6664C3[] = {
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6664C3[0]),
  (VTBL_ENTRY)&_ZN7S6664C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6664C3D0Ev,
  0,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S6664C3[0]),
  (VTBL_ENTRY)&_ZN7S6664C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S6664C3[];
static  VTT_ENTRY vtt_S6664C3[] = {
  {&(_ZTV7S6664C3[3]),  3,9},
  {&(_ZTV7S6664C3[8]),  8,9},
};
extern VTBL_ENTRY _ZTI7S6664C3[];
extern  VTBL_ENTRY _ZTV7S6664C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6664C3[];
Class_Descriptor cd_S6664C3 = {  "S6664C3", // class name
  bases_S6664C3, 1,
  &(vtc_S6664C3[0]), // expected_vtbl_contents
  &(vtt_S6664C3[0]), // expected_vtt_contents
  ABISELECT(352,208), // object size
  NSPAIRA(_ZTI7S6664C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6664C3),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6664C3),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  S6664C2  {
  void *s6664c2f0;
  __tsu64 s6664c2f1:1;
  ::S6664C3 s6664c2f2;
  int s6664c2f3;
  void *s6664c2f4;
  int s6664c2f5[2];
  __tsi64 s6664c2f6[10];
  virtual void  v3(); // _ZN7S6664C22v3Ev
  ~S6664C2(); // tgen
  S6664C2(); // tgen
};
//SIG(-1 S6664C2) C1{ v1 Fp FL:1 FC2{ VBC3{ v2 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]} Fi Fp Fi[2] FL[10]}


void  S6664C2 ::v3(){vfunc_called(this, "_ZN7S6664C22v3Ev");}
S6664C2 ::~S6664C2(){ note_dtor("S6664C2", this);} // tgen
S6664C2 ::S6664C2(){ note_ctor("S6664C2", this);} // tgen

static void Test_S6664C2()
{
  extern Class_Descriptor cd_S6664C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,80)];
    init_test(&cd_S6664C2, buf);
    S6664C2 *dp, &lv = *(dp=new (buf) S6664C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,316), "sizeof(S6664C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6664C2)");
    check_field_offset(lv, s6664c2f0, ABISELECT(8,4), "S6664C2.s6664c2f0");
    set_bf_and_test(lv, s6664c2f1, ABISELECT(16,8), 0, 1, 1, "S6664C2");
    check_field_offset(lv, s6664c2f2, ABISELECT(32,12), "S6664C2.s6664c2f2");
    check_field_offset(lv, s6664c2f3, ABISELECT(384,220), "S6664C2.s6664c2f3");
    check_field_offset(lv, s6664c2f4, ABISELECT(392,224), "S6664C2.s6664c2f4");
    check_field_offset(lv, s6664c2f5, ABISELECT(400,228), "S6664C2.s6664c2f5");
    check_field_offset(lv, s6664c2f6, ABISELECT(408,236), "S6664C2.s6664c2f6");
    test_class_info(&lv, &cd_S6664C2);
    dp->~S6664C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6664C2(Test_S6664C2, "S6664C2", ABISELECT(496,316));

#else // __cplusplus

extern void _ZN7S6664C2C1Ev();
extern void _ZN7S6664C2D1Ev();
Name_Map name_map_S6664C2[] = {
  NSPAIR(_ZN7S6664C2C1Ev),
  NSPAIR(_ZN7S6664C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6664C2[];
extern void _ZN7S6664C22v3Ev();
static  VTBL_ENTRY vtc_S6664C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6664C2[0]),
  (VTBL_ENTRY)&_ZN7S6664C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6664C2[];
extern  VTBL_ENTRY _ZTV7S6664C2[];
Class_Descriptor cd_S6664C2 = {  "S6664C2", // class name
  0,0,//no base classes
  &(vtc_S6664C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,316), // object size
  NSPAIRA(_ZTI7S6664C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6664C2),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  S6664C1  : S6664C2 , virtual S6664C3 {
  void *s6664c1f0;
  int s6664c1f1;
  long s6664c1f2;
  int s6664c1f3[6];
  virtual void  v1(); // _ZN7S6664C12v1Ev
  virtual void  v2(); // _ZN7S6664C12v2Ev
  ~S6664C1(); // tgen
  S6664C1(); // tgen
};
//SIG(1 S6664C1) C1{ BC2{ v3 Fp FL:1 FC3{ VBC4{ v4 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]} Fi Fp Fi[2] FL[10]} VBC3 v1 v2 Fp Fi Fl Fi[6]}


void  S6664C1 ::v1(){vfunc_called(this, "_ZN7S6664C12v1Ev");}
void  S6664C1 ::v2(){vfunc_called(this, "_ZN7S6664C12v2Ev");}
S6664C1 ::~S6664C1(){ note_dtor("S6664C1", this);} // tgen
S6664C1 ::S6664C1(){ note_ctor("S6664C1", this);} // tgen

static void Test_S6664C1()
{
  extern Class_Descriptor cd_S6664C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(57,141)];
    init_test(&cd_S6664C1, buf);
    S6664C1 *dp, &lv = *(dp=new (buf) S6664C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(896,560), "sizeof(S6664C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6664C1)");
    check_base_class_offset(lv, (S6664C2*), 0, "S6664C1");
    check_base_class_offset(lv, (S6664C4*)(S6664C3*), ABISELECT(656,424), "S6664C1");
    check_base_class_offset(lv, (S6664C3*), ABISELECT(536,352), "S6664C1");
    check_field_offset(lv, s6664c1f0, ABISELECT(488,316), "S6664C1.s6664c1f0");
    check_field_offset(lv, s6664c1f1, ABISELECT(496,320), "S6664C1.s6664c1f1");
    check_field_offset(lv, s6664c1f2, ABISELECT(504,324), "S6664C1.s6664c1f2");
    check_field_offset(lv, s6664c1f3, ABISELECT(512,328), "S6664C1.s6664c1f3");
    test_class_info(&lv, &cd_S6664C1);
    dp->~S6664C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6664C1(Test_S6664C1, "S6664C1", ABISELECT(896,560));

#else // __cplusplus

extern void _ZN7S6664C1C1Ev();
extern void _ZN7S6664C1D1Ev();
Name_Map name_map_S6664C1[] = {
  NSPAIR(_ZN7S6664C1C1Ev),
  NSPAIR(_ZN7S6664C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6664C2;
extern VTBL_ENTRY _ZTI7S6664C2[];
extern  VTBL_ENTRY _ZTV7S6664C2[];
extern Class_Descriptor cd_S6664C4;
extern VTBL_ENTRY _ZTI7S6664C4[];
extern  VTBL_ENTRY _ZTV7S6664C4[];
extern Class_Descriptor cd_S6664C3;
extern VTBL_ENTRY _ZTI7S6664C3[];
extern  VTBL_ENTRY _ZTV7S6664C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6664C3[];
static Base_Class bases_S6664C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6664C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6664C4,    ABISELECT(656,424), //bcp->offset
    15, //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_S6664C3,    ABISELECT(536,352), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6664C1[];
extern void _ZN7S6664C22v3Ev();
extern void _ZN7S6664C12v1Ev();
extern void _ZN7S6664C12v2Ev();
extern void _ZN7S6664C1D1Ev();
extern void _ZN7S6664C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S6664C1D1Ev,_ZTv0_n16_N7S6664C1D1Ev)();
extern void ABISELECT(_ZThn536_N7S6664C1D1Ev,_ZThn352_N7S6664C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6664C1D0Ev,_ZTv0_n16_N7S6664C1D0Ev)();
extern void ABISELECT(_ZThn536_N7S6664C1D0Ev,_ZThn352_N7S6664C1D0Ev)() __attribute__((weak));
extern void _ZN7S6664C42v4Ev();
static  VTBL_ENTRY vtc_S6664C1[] = {
  ABISELECT(656,424),
  ABISELECT(536,352),
  0,
  (VTBL_ENTRY)&(_ZTI7S6664C1[0]),
  (VTBL_ENTRY)&_ZN7S6664C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6664C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6664C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6664C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6664C1D0Ev,
  ABISELECT(-536,-352),
  ABISELECT(120,72),
  ABISELECT(-536,-352),
  (VTBL_ENTRY)&(_ZTI7S6664C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6664C1D1Ev,_ZTv0_n16_N7S6664C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6664C1D0Ev,_ZTv0_n16_N7S6664C1D0Ev),
  0,
  ABISELECT(-656,-424),
  (VTBL_ENTRY)&(_ZTI7S6664C1[0]),
  (VTBL_ENTRY)&_ZN7S6664C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S6664C1[];
extern void _ZN7S6664C3D1Ev();
extern void _ZN7S6664C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6664C3__7S6664C1[] = {
  ABISELECT(120,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6664C3[0]),
  (VTBL_ENTRY)&_ZN7S6664C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6664C3D0Ev,
};
extern void _ZN7S6664C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6664C4__7S6664C3__7S6664C1[] = {
  0,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S6664C3[0]),
  (VTBL_ENTRY)&_ZN7S6664C42v4Ev,
};
static  VTT_ENTRY vtt_S6664C1[] = {
  {&(_ZTV7S6664C1[4]),  4,19},
  {&(_ZTV7S6664C1[13]),  13,19},
  {&(_ZTV7S6664C1[18]),  18,19},
  {&(_tg__ZTV7S6664C3__7S6664C1[3]),  3,5},
  {&(_tg__ZTV7S6664C4__7S6664C3__7S6664C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6664C1[];
extern  VTBL_ENTRY _ZTV7S6664C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6664C1[];
static VTBL_ENTRY alt_thunk_names138[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6664C1D0Ev,_ZTv0_n16_N7S6664C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N7S6664C1D0Ev,_ZThn352_N7S6664C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6664C1D1Ev,_ZTv0_n16_N7S6664C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N7S6664C1D1Ev,_ZThn352_N7S6664C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6664C1 = {  "S6664C1", // class name
  bases_S6664C1, 3,
  &(vtc_S6664C1[0]), // expected_vtbl_contents
  &(vtt_S6664C1[0]), // expected_vtt_contents
  ABISELECT(896,560), // object size
  NSPAIRA(_ZTI7S6664C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6664C1),19, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6664C1),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  S6663C4  {
  int s6663c4f0;
  void *s6663c4f1;
  long double s6663c4f2[6];
  void *s6663c4f3;
  int s6663c4f4:4;
  long s6663c4f5[7];
  long double s6663c4f6;
  void *s6663c4f7;
  virtual void  v4(); // _ZN7S6663C42v4Ev
  ~S6663C4(); // tgen
  S6663C4(); // tgen
};
//SIG(-1 S6663C4) C1{ v1 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp}


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

static void Test_S6663C4()
{
  extern Class_Descriptor cd_S6663C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,35)];
    init_test(&cd_S6663C4, buf);
    S6663C4 *dp, &lv = *(dp=new (buf) S6663C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S6663C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6663C4)");
    check_field_offset(lv, s6663c4f0, ABISELECT(8,4), "S6663C4.s6663c4f0");
    check_field_offset(lv, s6663c4f1, ABISELECT(16,8), "S6663C4.s6663c4f1");
    check_field_offset(lv, s6663c4f2, ABISELECT(32,12), "S6663C4.s6663c4f2");
    check_field_offset(lv, s6663c4f3, ABISELECT(128,84), "S6663C4.s6663c4f3");
    set_bf_and_test(lv, s6663c4f4, ABISELECT(136,88), 0, 4, 1, "S6663C4");
    set_bf_and_test(lv, s6663c4f4, ABISELECT(136,88), 0, 4, hide_sll(1LL<<3), "S6663C4");
    check_field_offset(lv, s6663c4f5, ABISELECT(144,92), "S6663C4.s6663c4f5");
    check_field_offset(lv, s6663c4f6, ABISELECT(208,120), "S6663C4.s6663c4f6");
    check_field_offset(lv, s6663c4f7, ABISELECT(224,132), "S6663C4.s6663c4f7");
    test_class_info(&lv, &cd_S6663C4);
    dp->~S6663C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6663C4(Test_S6663C4, "S6663C4", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN7S6663C4C1Ev();
extern void _ZN7S6663C4D1Ev();
Name_Map name_map_S6663C4[] = {
  NSPAIR(_ZN7S6663C4C1Ev),
  NSPAIR(_ZN7S6663C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6663C4[];
extern void _ZN7S6663C42v4Ev();
static  VTBL_ENTRY vtc_S6663C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6663C4[0]),
  (VTBL_ENTRY)&_ZN7S6663C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S6663C4[];
extern  VTBL_ENTRY _ZTV7S6663C4[];
Class_Descriptor cd_S6663C4 = {  "S6663C4", // class name
  0,0,//no base classes
  &(vtc_S6663C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI7S6663C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6663C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6663C3  : virtual S6663C4 {
  int s6663c3f0[6];
  __tsi64 s6663c3f1;
  void *s6663c3f2[9];
  virtual  ~S6663C3(); // _ZN7S6663C3D2Ev
  S6663C3(); // tgen
};
//SIG(-1 S6663C3) C1{ VBC2{ v1 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]}


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

static void Test_S6663C3()
{
  extern Class_Descriptor cd_S6663C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,53)];
    init_test(&cd_S6663C3, buf);
    S6663C3 *dp, &lv = *(dp=new (buf) S6663C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,208), "sizeof(S6663C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6663C3)");
    check_base_class_offset(lv, (S6663C4*), ABISELECT(112,72), "S6663C3");
    check_field_offset(lv, s6663c3f0, ABISELECT(8,4), "S6663C3.s6663c3f0");
    check_field_offset(lv, s6663c3f1, ABISELECT(32,28), "S6663C3.s6663c3f1");
    check_field_offset(lv, s6663c3f2, ABISELECT(40,36), "S6663C3.s6663c3f2");
    test_class_info(&lv, &cd_S6663C3);
    dp->~S6663C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6663C3(Test_S6663C3, "S6663C3", ABISELECT(352,208));

#else // __cplusplus

extern void _ZN7S6663C3C1Ev();
extern void _ZN7S6663C3D2Ev();
Name_Map name_map_S6663C3[] = {
  NSPAIR(_ZN7S6663C3C1Ev),
  NSPAIR(_ZN7S6663C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6663C4;
extern VTBL_ENTRY _ZTI7S6663C4[];
extern  VTBL_ENTRY _ZTV7S6663C4[];
static Base_Class bases_S6663C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6663C4,    ABISELECT(112,72), //bcp->offset
    5, //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 _ZTI7S6663C3[];
extern void _ZN7S6663C3D1Ev();
extern void _ZN7S6663C3D0Ev();
extern void _ZN7S6663C42v4Ev();
static  VTBL_ENTRY vtc_S6663C3[] = {
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6663C3[0]),
  (VTBL_ENTRY)&_ZN7S6663C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6663C3D0Ev,
  0,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S6663C3[0]),
  (VTBL_ENTRY)&_ZN7S6663C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S6663C3[];
static  VTT_ENTRY vtt_S6663C3[] = {
  {&(_ZTV7S6663C3[3]),  3,9},
  {&(_ZTV7S6663C3[8]),  8,9},
};
extern VTBL_ENTRY _ZTI7S6663C3[];
extern  VTBL_ENTRY _ZTV7S6663C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6663C3[];
Class_Descriptor cd_S6663C3 = {  "S6663C3", // class name
  bases_S6663C3, 1,
  &(vtc_S6663C3[0]), // expected_vtbl_contents
  &(vtt_S6663C3[0]), // expected_vtt_contents
  ABISELECT(352,208), // object size
  NSPAIRA(_ZTI7S6663C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6663C3),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6663C3),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  S6663C2  {
  void *s6663c2f0;
  unsigned int s6663c2f1:1;
  ::S6663C3 s6663c2f2;
  int s6663c2f3;
  void *s6663c2f4;
  int s6663c2f5[2];
  __tsi64 s6663c2f6[10];
  virtual void  v3(); // _ZN7S6663C22v3Ev
  ~S6663C2(); // tgen
  S6663C2(); // tgen
};
//SIG(-1 S6663C2) C1{ v1 Fp Fi:1 FC2{ VBC3{ v2 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]} Fi Fp Fi[2] FL[10]}


void  S6663C2 ::v3(){vfunc_called(this, "_ZN7S6663C22v3Ev");}
S6663C2 ::~S6663C2(){ note_dtor("S6663C2", this);} // tgen
S6663C2 ::S6663C2(){ note_ctor("S6663C2", this);} // tgen

static void Test_S6663C2()
{
  extern Class_Descriptor cd_S6663C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,80)];
    init_test(&cd_S6663C2, buf);
    S6663C2 *dp, &lv = *(dp=new (buf) S6663C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,316), "sizeof(S6663C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6663C2)");
    check_field_offset(lv, s6663c2f0, ABISELECT(8,4), "S6663C2.s6663c2f0");
    set_bf_and_test(lv, s6663c2f1, ABISELECT(16,8), 0, 1, 1, "S6663C2");
    check_field_offset(lv, s6663c2f2, ABISELECT(32,12), "S6663C2.s6663c2f2");
    check_field_offset(lv, s6663c2f3, ABISELECT(384,220), "S6663C2.s6663c2f3");
    check_field_offset(lv, s6663c2f4, ABISELECT(392,224), "S6663C2.s6663c2f4");
    check_field_offset(lv, s6663c2f5, ABISELECT(400,228), "S6663C2.s6663c2f5");
    check_field_offset(lv, s6663c2f6, ABISELECT(408,236), "S6663C2.s6663c2f6");
    test_class_info(&lv, &cd_S6663C2);
    dp->~S6663C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6663C2(Test_S6663C2, "S6663C2", ABISELECT(496,316));

#else // __cplusplus

extern void _ZN7S6663C2C1Ev();
extern void _ZN7S6663C2D1Ev();
Name_Map name_map_S6663C2[] = {
  NSPAIR(_ZN7S6663C2C1Ev),
  NSPAIR(_ZN7S6663C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6663C2[];
extern void _ZN7S6663C22v3Ev();
static  VTBL_ENTRY vtc_S6663C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6663C2[0]),
  (VTBL_ENTRY)&_ZN7S6663C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6663C2[];
extern  VTBL_ENTRY _ZTV7S6663C2[];
Class_Descriptor cd_S6663C2 = {  "S6663C2", // class name
  0,0,//no base classes
  &(vtc_S6663C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,316), // object size
  NSPAIRA(_ZTI7S6663C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6663C2),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  S6663C1  : S6663C2 , virtual S6663C3 {
  void *s6663c1f0;
  int s6663c1f1;
  long s6663c1f2;
  int s6663c1f3[6];
  virtual void  v1(); // _ZN7S6663C12v1Ev
  virtual void  v2(); // _ZN7S6663C12v2Ev
  ~S6663C1(); // tgen
  S6663C1(); // tgen
};
//SIG(1 S6663C1) C1{ BC2{ v3 Fp Fi:1 FC3{ VBC4{ v4 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]} Fi Fp Fi[2] FL[10]} VBC3 v1 v2 Fp Fi Fl Fi[6]}


void  S6663C1 ::v1(){vfunc_called(this, "_ZN7S6663C12v1Ev");}
void  S6663C1 ::v2(){vfunc_called(this, "_ZN7S6663C12v2Ev");}
S6663C1 ::~S6663C1(){ note_dtor("S6663C1", this);} // tgen
S6663C1 ::S6663C1(){ note_ctor("S6663C1", this);} // tgen

static void Test_S6663C1()
{
  extern Class_Descriptor cd_S6663C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(57,141)];
    init_test(&cd_S6663C1, buf);
    S6663C1 *dp, &lv = *(dp=new (buf) S6663C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(896,560), "sizeof(S6663C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6663C1)");
    check_base_class_offset(lv, (S6663C2*), 0, "S6663C1");
    check_base_class_offset(lv, (S6663C4*)(S6663C3*), ABISELECT(656,424), "S6663C1");
    check_base_class_offset(lv, (S6663C3*), ABISELECT(536,352), "S6663C1");
    check_field_offset(lv, s6663c1f0, ABISELECT(488,316), "S6663C1.s6663c1f0");
    check_field_offset(lv, s6663c1f1, ABISELECT(496,320), "S6663C1.s6663c1f1");
    check_field_offset(lv, s6663c1f2, ABISELECT(504,324), "S6663C1.s6663c1f2");
    check_field_offset(lv, s6663c1f3, ABISELECT(512,328), "S6663C1.s6663c1f3");
    test_class_info(&lv, &cd_S6663C1);
    dp->~S6663C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6663C1(Test_S6663C1, "S6663C1", ABISELECT(896,560));

#else // __cplusplus

extern void _ZN7S6663C1C1Ev();
extern void _ZN7S6663C1D1Ev();
Name_Map name_map_S6663C1[] = {
  NSPAIR(_ZN7S6663C1C1Ev),
  NSPAIR(_ZN7S6663C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6663C2;
extern VTBL_ENTRY _ZTI7S6663C2[];
extern  VTBL_ENTRY _ZTV7S6663C2[];
extern Class_Descriptor cd_S6663C4;
extern VTBL_ENTRY _ZTI7S6663C4[];
extern  VTBL_ENTRY _ZTV7S6663C4[];
extern Class_Descriptor cd_S6663C3;
extern VTBL_ENTRY _ZTI7S6663C3[];
extern  VTBL_ENTRY _ZTV7S6663C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6663C3[];
static Base_Class bases_S6663C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6663C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6663C4,    ABISELECT(656,424), //bcp->offset
    15, //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_S6663C3,    ABISELECT(536,352), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6663C1[];
extern void _ZN7S6663C22v3Ev();
extern void _ZN7S6663C12v1Ev();
extern void _ZN7S6663C12v2Ev();
extern void _ZN7S6663C1D1Ev();
extern void _ZN7S6663C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S6663C1D1Ev,_ZTv0_n16_N7S6663C1D1Ev)();
extern void ABISELECT(_ZThn536_N7S6663C1D1Ev,_ZThn352_N7S6663C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6663C1D0Ev,_ZTv0_n16_N7S6663C1D0Ev)();
extern void ABISELECT(_ZThn536_N7S6663C1D0Ev,_ZThn352_N7S6663C1D0Ev)() __attribute__((weak));
extern void _ZN7S6663C42v4Ev();
static  VTBL_ENTRY vtc_S6663C1[] = {
  ABISELECT(656,424),
  ABISELECT(536,352),
  0,
  (VTBL_ENTRY)&(_ZTI7S6663C1[0]),
  (VTBL_ENTRY)&_ZN7S6663C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6663C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6663C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6663C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6663C1D0Ev,
  ABISELECT(-536,-352),
  ABISELECT(120,72),
  ABISELECT(-536,-352),
  (VTBL_ENTRY)&(_ZTI7S6663C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6663C1D1Ev,_ZTv0_n16_N7S6663C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6663C1D0Ev,_ZTv0_n16_N7S6663C1D0Ev),
  0,
  ABISELECT(-656,-424),
  (VTBL_ENTRY)&(_ZTI7S6663C1[0]),
  (VTBL_ENTRY)&_ZN7S6663C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S6663C1[];
extern void _ZN7S6663C3D1Ev();
extern void _ZN7S6663C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6663C3__7S6663C1[] = {
  ABISELECT(120,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6663C3[0]),
  (VTBL_ENTRY)&_ZN7S6663C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6663C3D0Ev,
};
extern void _ZN7S6663C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6663C4__7S6663C3__7S6663C1[] = {
  0,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S6663C3[0]),
  (VTBL_ENTRY)&_ZN7S6663C42v4Ev,
};
static  VTT_ENTRY vtt_S6663C1[] = {
  {&(_ZTV7S6663C1[4]),  4,19},
  {&(_ZTV7S6663C1[13]),  13,19},
  {&(_ZTV7S6663C1[18]),  18,19},
  {&(_tg__ZTV7S6663C3__7S6663C1[3]),  3,5},
  {&(_tg__ZTV7S6663C4__7S6663C3__7S6663C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6663C1[];
extern  VTBL_ENTRY _ZTV7S6663C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6663C1[];
static VTBL_ENTRY alt_thunk_names139[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6663C1D0Ev,_ZTv0_n16_N7S6663C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N7S6663C1D0Ev,_ZThn352_N7S6663C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6663C1D1Ev,_ZTv0_n16_N7S6663C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N7S6663C1D1Ev,_ZThn352_N7S6663C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6663C1 = {  "S6663C1", // class name
  bases_S6663C1, 3,
  &(vtc_S6663C1[0]), // expected_vtbl_contents
  &(vtt_S6663C1[0]), // expected_vtt_contents
  ABISELECT(896,560), // object size
  NSPAIRA(_ZTI7S6663C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6663C1),19, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6663C1),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names139,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7385C5  {
  int s7385c5f0;
  void *s7385c5f1;
  long double s7385c5f2[6];
  void *s7385c5f3;
  int s7385c5f4:4;
  long s7385c5f5[7];
  long double s7385c5f6;
  void *s7385c5f7;
  virtual void  v1(); // _ZN7S7385C52v1Ev
  ~S7385C5(); // tgen
  S7385C5(); // tgen
};
//SIG(-1 S7385C5) C1{ v1 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp}


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

static void Test_S7385C5()
{
  extern Class_Descriptor cd_S7385C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,35)];
    init_test(&cd_S7385C5, buf);
    S7385C5 *dp, &lv = *(dp=new (buf) S7385C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S7385C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7385C5)");
    check_field_offset(lv, s7385c5f0, ABISELECT(8,4), "S7385C5.s7385c5f0");
    check_field_offset(lv, s7385c5f1, ABISELECT(16,8), "S7385C5.s7385c5f1");
    check_field_offset(lv, s7385c5f2, ABISELECT(32,12), "S7385C5.s7385c5f2");
    check_field_offset(lv, s7385c5f3, ABISELECT(128,84), "S7385C5.s7385c5f3");
    set_bf_and_test(lv, s7385c5f4, ABISELECT(136,88), 0, 4, 1, "S7385C5");
    set_bf_and_test(lv, s7385c5f4, ABISELECT(136,88), 0, 4, hide_sll(1LL<<3), "S7385C5");
    check_field_offset(lv, s7385c5f5, ABISELECT(144,92), "S7385C5.s7385c5f5");
    check_field_offset(lv, s7385c5f6, ABISELECT(208,120), "S7385C5.s7385c5f6");
    check_field_offset(lv, s7385c5f7, ABISELECT(224,132), "S7385C5.s7385c5f7");
    test_class_info(&lv, &cd_S7385C5);
    dp->~S7385C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7385C5(Test_S7385C5, "S7385C5", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN7S7385C5C1Ev();
extern void _ZN7S7385C5D1Ev();
Name_Map name_map_S7385C5[] = {
  NSPAIR(_ZN7S7385C5C1Ev),
  NSPAIR(_ZN7S7385C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7385C5[];
extern void _ZN7S7385C52v1Ev();
static  VTBL_ENTRY vtc_S7385C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7385C5[0]),
  (VTBL_ENTRY)&_ZN7S7385C52v1Ev,
};
extern VTBL_ENTRY _ZTI7S7385C5[];
extern  VTBL_ENTRY _ZTV7S7385C5[];
Class_Descriptor cd_S7385C5 = {  "S7385C5", // class name
  0,0,//no base classes
  &(vtc_S7385C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI7S7385C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7385C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7385C4  : virtual S7385C5 {
  int s7385c4f0[6];
  __tsi64 s7385c4f1;
  void *s7385c4f2[9];
  virtual  ~S7385C4(); // _ZN7S7385C4D2Ev
  S7385C4(); // tgen
};
//SIG(-1 S7385C4) C1{ VBC2{ v1 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]}


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

static void Test_S7385C4()
{
  extern Class_Descriptor cd_S7385C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,53)];
    init_test(&cd_S7385C4, buf);
    S7385C4 *dp, &lv = *(dp=new (buf) S7385C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,208), "sizeof(S7385C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7385C4)");
    check_base_class_offset(lv, (S7385C5*), ABISELECT(112,72), "S7385C4");
    check_field_offset(lv, s7385c4f0, ABISELECT(8,4), "S7385C4.s7385c4f0");
    check_field_offset(lv, s7385c4f1, ABISELECT(32,28), "S7385C4.s7385c4f1");
    check_field_offset(lv, s7385c4f2, ABISELECT(40,36), "S7385C4.s7385c4f2");
    test_class_info(&lv, &cd_S7385C4);
    dp->~S7385C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7385C4(Test_S7385C4, "S7385C4", ABISELECT(352,208));

#else // __cplusplus

extern void _ZN7S7385C4C1Ev();
extern void _ZN7S7385C4D2Ev();
Name_Map name_map_S7385C4[] = {
  NSPAIR(_ZN7S7385C4C1Ev),
  NSPAIR(_ZN7S7385C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7385C5;
extern VTBL_ENTRY _ZTI7S7385C5[];
extern  VTBL_ENTRY _ZTV7S7385C5[];
static Base_Class bases_S7385C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7385C5,    ABISELECT(112,72), //bcp->offset
    5, //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 _ZTI7S7385C4[];
extern void _ZN7S7385C4D1Ev();
extern void _ZN7S7385C4D0Ev();
extern void _ZN7S7385C52v1Ev();
static  VTBL_ENTRY vtc_S7385C4[] = {
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7385C4[0]),
  (VTBL_ENTRY)&_ZN7S7385C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7385C4D0Ev,
  0,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7385C4[0]),
  (VTBL_ENTRY)&_ZN7S7385C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S7385C4[];
static  VTT_ENTRY vtt_S7385C4[] = {
  {&(_ZTV7S7385C4[3]),  3,9},
  {&(_ZTV7S7385C4[8]),  8,9},
};
extern VTBL_ENTRY _ZTI7S7385C4[];
extern  VTBL_ENTRY _ZTV7S7385C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7385C4[];
Class_Descriptor cd_S7385C4 = {  "S7385C4", // class name
  bases_S7385C4, 1,
  &(vtc_S7385C4[0]), // expected_vtbl_contents
  &(vtt_S7385C4[0]), // expected_vtt_contents
  ABISELECT(352,208), // object size
  NSPAIRA(_ZTI7S7385C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7385C4),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7385C4),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  S7385C3  {
  char s7385c3f0;
  int s7385c3f1[13];
  __tsi64 s7385c3f2;
  ::S7385C4 s7385c3f3;
  int s7385c3f4;
  void *s7385c3f5;
  void  mf7385c3(); // _ZN7S7385C38mf7385c3Ev
};
//SIG(-1 S7385C3) C1{ m Fc Fi[13] FL FC2{ VBC3{ v1 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]} Fi Fp}


void  S7385C3 ::mf7385c3(){}

static void Test_S7385C3()
{
  {
    init_simple_test("S7385C3");
    static S7385C3 lv;
    check2(sizeof(lv), ABISELECT(432,280), "sizeof(S7385C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7385C3)");
    check_field_offset(lv, s7385c3f0, 0, "S7385C3.s7385c3f0");
    check_field_offset(lv, s7385c3f1, 4, "S7385C3.s7385c3f1");
    check_field_offset(lv, s7385c3f2, 56, "S7385C3.s7385c3f2");
    check_field_offset(lv, s7385c3f3, 64, "S7385C3.s7385c3f3");
    check_field_offset(lv, s7385c3f4, ABISELECT(416,272), "S7385C3.s7385c3f4");
    check_field_offset(lv, s7385c3f5, ABISELECT(424,276), "S7385C3.s7385c3f5");
  }
}
static Arrange_To_Call_Me vS7385C3(Test_S7385C3, "S7385C3", ABISELECT(432,280));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S7385C3[];
VTBL_ENTRY *P__ZTI7S7385C3 = _ZTI7S7385C3; 
Class_Descriptor cd_S7385C3 = {  "S7385C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(432,280), // object size
  NSPAIRA(_ZTI7S7385C3),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  S7385C2  : virtual S7385C3 , S7385C4 {
  long double s7385c2f0;
  char s7385c2f1;
  int s7385c2f2;
  virtual void  v2(); // _ZN7S7385C22v2Ev
  virtual void  v3(); // _ZN7S7385C22v3Ev
  virtual void  v4(); // _ZN7S7385C22v4Ev
  ~S7385C2(); // tgen
  S7385C2(); // tgen
};
//SIG(-1 S7385C2) C1{ VBC2{ m Fc Fi[13] FL FC3{ VBC4{ v4 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]} Fi Fp} BC3 v1 v2 v3 FD Fc Fi}


void  S7385C2 ::v2(){vfunc_called(this, "_ZN7S7385C22v2Ev");}
void  S7385C2 ::v3(){vfunc_called(this, "_ZN7S7385C22v3Ev");}
void  S7385C2 ::v4(){vfunc_called(this, "_ZN7S7385C22v4Ev");}
S7385C2 ::~S7385C2(){ note_dtor("S7385C2", this);} // tgen
S7385C2 ::S7385C2(){ note_ctor("S7385C2", this);} // tgen

static void Test_S7385C2()
{
  extern Class_Descriptor cd_S7385C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(52,128)];
    init_test(&cd_S7385C2, buf);
    S7385C2 *dp, &lv = *(dp=new (buf) S7385C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(816,508), "sizeof(S7385C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7385C2)");
    check_base_class_offset(lv, (S7385C3*), ABISELECT(144,92), "S7385C2");
    check_base_class_offset(lv, (S7385C5*)(S7385C4*), ABISELECT(576,372), "S7385C2");
    check_base_class_offset(lv, (S7385C4*), 0, "S7385C2");
    check_field_offset(lv, s7385c2f0, ABISELECT(112,72), "S7385C2.s7385c2f0");
    check_field_offset(lv, s7385c2f1, ABISELECT(128,84), "S7385C2.s7385c2f1");
    check_field_offset(lv, s7385c2f2, ABISELECT(132,88), "S7385C2.s7385c2f2");
    test_class_info(&lv, &cd_S7385C2);
    dp->~S7385C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7385C2(Test_S7385C2, "S7385C2", ABISELECT(816,508));

#else // __cplusplus

extern void _ZN7S7385C2C1Ev();
extern void _ZN7S7385C2D1Ev();
Name_Map name_map_S7385C2[] = {
  NSPAIR(_ZN7S7385C2C1Ev),
  NSPAIR(_ZN7S7385C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7385C3;
extern VTBL_ENTRY _ZTI7S7385C3[];
extern Class_Descriptor cd_S7385C5;
extern VTBL_ENTRY _ZTI7S7385C5[];
extern  VTBL_ENTRY _ZTV7S7385C5[];
extern Class_Descriptor cd_S7385C4;
extern VTBL_ENTRY _ZTI7S7385C4[];
extern  VTBL_ENTRY _ZTV7S7385C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7385C4[];
static Base_Class bases_S7385C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7385C3,    ABISELECT(144,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7385C5,    ABISELECT(576,372), //bcp->offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7385C4,    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 _ZTI7S7385C2[];
extern void _ZN7S7385C2D1Ev();
extern void _ZN7S7385C2D0Ev();
extern void _ZN7S7385C22v2Ev();
extern void _ZN7S7385C22v3Ev();
extern void _ZN7S7385C22v4Ev();
extern void _ZN7S7385C52v1Ev();
static  VTBL_ENTRY vtc_S7385C2[] = {
  ABISELECT(144,92),
  ABISELECT(576,372),
  0,
  (VTBL_ENTRY)&(_ZTI7S7385C2[0]),
  (VTBL_ENTRY)&_ZN7S7385C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7385C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v4Ev,
  0,
  ABISELECT(-576,-372),
  (VTBL_ENTRY)&(_ZTI7S7385C2[0]),
  (VTBL_ENTRY)&_ZN7S7385C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S7385C2[];
extern void _ZN7S7385C4D1Ev();
extern void _ZN7S7385C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7385C4__7S7385C2[] = {
  ABISELECT(576,372),
  0,
  (VTBL_ENTRY)&(_ZTI7S7385C4[0]),
  (VTBL_ENTRY)&_ZN7S7385C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7385C4D0Ev,
};
extern void _ZN7S7385C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7385C5__7S7385C4__7S7385C2[] = {
  0,
  ABISELECT(-576,-372),
  (VTBL_ENTRY)&(_ZTI7S7385C4[0]),
  (VTBL_ENTRY)&_ZN7S7385C52v1Ev,
};
static  VTT_ENTRY vtt_S7385C2[] = {
  {&(_ZTV7S7385C2[4]),  4,13},
  {&(_tg__ZTV7S7385C4__7S7385C2[3]),  3,5},
  {&(_tg__ZTV7S7385C5__7S7385C4__7S7385C2[3]),  3,4},
  {&(_ZTV7S7385C2[12]),  12,13},
};
extern VTBL_ENTRY _ZTI7S7385C2[];
extern  VTBL_ENTRY _ZTV7S7385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7385C2[];
Class_Descriptor cd_S7385C2 = {  "S7385C2", // class name
  bases_S7385C2, 3,
  &(vtc_S7385C2[0]), // expected_vtbl_contents
  &(vtt_S7385C2[0]), // expected_vtt_contents
  ABISELECT(816,508), // object size
  NSPAIRA(_ZTI7S7385C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7385C2),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7385C2),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  S7385C1  : S7385C2 {
  void *s7385c1f0[9];
  ~S7385C1(); // tgen
  S7385C1(); // tgen
};
//SIG(1 S7385C1) C1{ BC2{ VBC3{ m Fc Fi[13] FL FC4{ VBC5{ v1 Fi Fp FD[6] Fp Fi:4 Fl[7] FD Fp} vd Fi[6] FL Fp[9]} Fi Fp} BC4 v2 v3 v4 FD Fc Fi} Fp[9]}


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

static void Test_S7385C1()
{
  extern Class_Descriptor cd_S7385C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(56,137)];
    init_test(&cd_S7385C1, buf);
    S7385C1 *dp, &lv = *(dp=new (buf) S7385C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(880,544), "sizeof(S7385C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7385C1)");
    check_base_class_offset(lv, (S7385C3*)(S7385C2*), ABISELECT(208,128), "S7385C1");
    check_base_class_offset(lv, (S7385C5*)(S7385C4*)(S7385C2*), ABISELECT(640,408), "S7385C1");
    check_base_class_offset(lv, (S7385C4*)(S7385C2*), 0, "S7385C1");
    check_base_class_offset(lv, (S7385C2*), 0, "S7385C1");
    check_field_offset(lv, s7385c1f0, ABISELECT(136,92), "S7385C1.s7385c1f0");
    test_class_info(&lv, &cd_S7385C1);
    dp->~S7385C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7385C1(Test_S7385C1, "S7385C1", ABISELECT(880,544));

#else // __cplusplus

extern void _ZN7S7385C1C1Ev();
extern void _ZN7S7385C1D1Ev();
Name_Map name_map_S7385C1[] = {
  NSPAIR(_ZN7S7385C1C1Ev),
  NSPAIR(_ZN7S7385C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7385C3;
extern VTBL_ENTRY _ZTI7S7385C3[];
extern Class_Descriptor cd_S7385C5;
extern VTBL_ENTRY _ZTI7S7385C5[];
extern  VTBL_ENTRY _ZTV7S7385C5[];
extern Class_Descriptor cd_S7385C4;
extern VTBL_ENTRY _ZTI7S7385C4[];
extern  VTBL_ENTRY _ZTV7S7385C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7385C4[];
extern Class_Descriptor cd_S7385C2;
extern VTBL_ENTRY _ZTI7S7385C2[];
extern  VTBL_ENTRY _ZTV7S7385C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7385C2[];
static Base_Class bases_S7385C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7385C3,    ABISELECT(208,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
    3, //immediately_derived
  0, 1},
  {&cd_S7385C5,    ABISELECT(640,408), //bcp->offset
    9, //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_S7385C4,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7385C2,    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 _ZTI7S7385C1[];
extern void _ZN7S7385C1D1Ev();
extern void _ZN7S7385C1D0Ev();
extern void _ZN7S7385C22v2Ev();
extern void _ZN7S7385C22v3Ev();
extern void _ZN7S7385C22v4Ev();
extern void _ZN7S7385C52v1Ev();
static  VTBL_ENTRY vtc_S7385C1[] = {
  ABISELECT(208,128),
  ABISELECT(640,408),
  0,
  (VTBL_ENTRY)&(_ZTI7S7385C1[0]),
  (VTBL_ENTRY)&_ZN7S7385C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7385C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v4Ev,
  0,
  ABISELECT(-640,-408),
  (VTBL_ENTRY)&(_ZTI7S7385C1[0]),
  (VTBL_ENTRY)&_ZN7S7385C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S7385C1[];
extern void _ZN7S7385C2D1Ev();
extern void _ZN7S7385C2D0Ev();
extern void _ZN7S7385C22v2Ev();
extern void _ZN7S7385C22v3Ev();
extern void _ZN7S7385C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7385C2__7S7385C1[] = {
  ABISELECT(208,128),
  ABISELECT(640,408),
  0,
  (VTBL_ENTRY)&(_ZTI7S7385C2[0]),
  (VTBL_ENTRY)&_ZN7S7385C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7385C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v2Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7385C22v4Ev,
};
extern void _ZN7S7385C4D1Ev();
extern void _ZN7S7385C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7385C47S7385C2__7S7385C1[] = {
  ABISELECT(640,408),
  0,
  (VTBL_ENTRY)&(_ZTI7S7385C4[0]),
  (VTBL_ENTRY)&_ZN7S7385C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7385C4D0Ev,
};
extern void _ZN7S7385C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7385C5__7S7385C47S7385C2__7S7385C1[] = {
  0,
  ABISELECT(-640,-408),
  (VTBL_ENTRY)&(_ZTI7S7385C4[0]),
  (VTBL_ENTRY)&_ZN7S7385C52v1Ev,
};
extern void _ZN7S7385C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7385C5__7S7385C2__7S7385C1[] = {
  0,
  ABISELECT(-640,-408),
  (VTBL_ENTRY)&(_ZTI7S7385C2[0]),
  (VTBL_ENTRY)&_ZN7S7385C52v1Ev,
};
static  VTT_ENTRY vtt_S7385C1[] = {
  {&(_ZTV7S7385C1[4]),  4,13},
  {&(_tg__ZTV7S7385C2__7S7385C1[4]),  4,9},
  {&(_tg__ZTV7S7385C47S7385C2__7S7385C1[3]),  3,5},
  {&(_tg__ZTV7S7385C5__7S7385C47S7385C2__7S7385C1[3]),  3,4},
  {&(_tg__ZTV7S7385C5__7S7385C2__7S7385C1[3]),  3,4},
  {&(_ZTV7S7385C1[12]),  12,13},
};
extern VTBL_ENTRY _ZTI7S7385C1[];
extern  VTBL_ENTRY _ZTV7S7385C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7385C1[];
Class_Descriptor cd_S7385C1 = {  "S7385C1", // class name
  bases_S7385C1, 4,
  &(vtc_S7385C1[0]), // expected_vtbl_contents
  &(vtt_S7385C1[0]), // expected_vtt_contents
  ABISELECT(880,544), // object size
  NSPAIRA(_ZTI7S7385C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7385C1),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7385C1),6, //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  S21131C5  {
  long double s21131c5f0[3];
  virtual void  v5(); // _ZN8S21131C52v5Ev
  virtual void  v6(); // _ZN8S21131C52v6Ev
  virtual void  v7(); // _ZN8S21131C52v7Ev
  virtual void  v8(); // _ZN8S21131C52v8Ev
  virtual void  v9(); // _ZN8S21131C52v9Ev
  virtual void  v10(); // _ZN8S21131C53v10Ev
  virtual void  v11(); // _ZN8S21131C53v11Ev
  ~S21131C5(); // tgen
  S21131C5(); // tgen
};
//SIG(-1 S21131C5) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S21131C5 ::v5(){vfunc_called(this, "_ZN8S21131C52v5Ev");}
void  S21131C5 ::v6(){vfunc_called(this, "_ZN8S21131C52v6Ev");}
void  S21131C5 ::v7(){vfunc_called(this, "_ZN8S21131C52v7Ev");}
void  S21131C5 ::v8(){vfunc_called(this, "_ZN8S21131C52v8Ev");}
void  S21131C5 ::v9(){vfunc_called(this, "_ZN8S21131C52v9Ev");}
void  S21131C5 ::v10(){vfunc_called(this, "_ZN8S21131C53v10Ev");}
void  S21131C5 ::v11(){vfunc_called(this, "_ZN8S21131C53v11Ev");}
S21131C5 ::~S21131C5(){ note_dtor("S21131C5", this);} // tgen
S21131C5 ::S21131C5(){ note_ctor("S21131C5", this);} // tgen

static void Test_S21131C5()
{
  extern Class_Descriptor cd_S21131C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S21131C5, buf);
    S21131C5 *dp, &lv = *(dp=new (buf) S21131C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S21131C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21131C5)");
    check_field_offset(lv, s21131c5f0, ABISELECT(16,4), "S21131C5.s21131c5f0");
    test_class_info(&lv, &cd_S21131C5);
    dp->~S21131C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21131C5(Test_S21131C5, "S21131C5", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S21131C5C1Ev();
extern void _ZN8S21131C5D1Ev();
Name_Map name_map_S21131C5[] = {
  NSPAIR(_ZN8S21131C5C1Ev),
  NSPAIR(_ZN8S21131C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21131C5[];
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY vtc_S21131C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C5[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S21131C5[];
extern  VTBL_ENTRY _ZTV8S21131C5[];
Class_Descriptor cd_S21131C5 = {  "S21131C5", // class name
  0,0,//no base classes
  &(vtc_S21131C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S21131C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21131C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21131C4  : virtual S21131C5 {
  virtual void  v12(); // _ZN8S21131C43v12Ev
  virtual void  v13(); // _ZN8S21131C43v13Ev
  virtual void  v14(); // _ZN8S21131C43v14Ev
  ~S21131C4(); // tgen
  S21131C4(); // tgen
};
//SIG(-1 S21131C4) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 FD[3]} v1 v2 v3}


void  S21131C4 ::v12(){vfunc_called(this, "_ZN8S21131C43v12Ev");}
void  S21131C4 ::v13(){vfunc_called(this, "_ZN8S21131C43v13Ev");}
void  S21131C4 ::v14(){vfunc_called(this, "_ZN8S21131C43v14Ev");}
S21131C4 ::~S21131C4(){ note_dtor("S21131C4", this);} // tgen
S21131C4 ::S21131C4(){ note_ctor("S21131C4", this);} // tgen

static void Test_S21131C4()
{
  extern Class_Descriptor cd_S21131C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S21131C4, buf);
    S21131C4 *dp, &lv = *(dp=new (buf) S21131C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S21131C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21131C4)");
    check_base_class_offset(lv, (S21131C5*), ABISELECT(16,4), "S21131C4");
    test_class_info(&lv, &cd_S21131C4);
    dp->~S21131C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21131C4(Test_S21131C4, "S21131C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S21131C4C1Ev();
extern void _ZN8S21131C4D1Ev();
Name_Map name_map_S21131C4[] = {
  NSPAIR(_ZN8S21131C4C1Ev),
  NSPAIR(_ZN8S21131C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21131C5;
extern VTBL_ENTRY _ZTI8S21131C5[];
extern  VTBL_ENTRY _ZTV8S21131C5[];
static Base_Class bases_S21131C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21131C5,    ABISELECT(16,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S21131C4[];
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY vtc_S21131C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C4[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21131C4[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S21131C4[];
static  VTT_ENTRY vtt_S21131C4[] = {
  {&(_ZTV8S21131C4[3]),  3,22},
  {&(_ZTV8S21131C4[15]),  15,22},
};
extern VTBL_ENTRY _ZTI8S21131C4[];
extern  VTBL_ENTRY _ZTV8S21131C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C4[];
Class_Descriptor cd_S21131C4 = {  "S21131C4", // class name
  bases_S21131C4, 1,
  &(vtc_S21131C4[0]), // expected_vtbl_contents
  &(vtt_S21131C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S21131C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21131C4),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21131C4),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  S21131C3  : virtual S21131C4 {
  virtual void  v15(); // _ZN8S21131C33v15Ev
  virtual void  v16(); // _ZN8S21131C33v16Ev
  ~S21131C3(); // tgen
  S21131C3(); // tgen
};
//SIG(-1 S21131C3) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 FD[3]} v10 v11 v12} v1 v2}


void  S21131C3 ::v15(){vfunc_called(this, "_ZN8S21131C33v15Ev");}
void  S21131C3 ::v16(){vfunc_called(this, "_ZN8S21131C33v16Ev");}
S21131C3 ::~S21131C3(){ note_dtor("S21131C3", this);} // tgen
S21131C3 ::S21131C3(){ note_ctor("S21131C3", this);} // tgen

static void Test_S21131C3()
{
  extern Class_Descriptor cd_S21131C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S21131C3, buf);
    S21131C3 *dp, &lv = *(dp=new (buf) S21131C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S21131C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21131C3)");
    check_base_class_offset(lv, (S21131C5*)(S21131C4*), ABISELECT(16,4), "S21131C3");
    check_base_class_offset(lv, (S21131C4*), 0, "S21131C3");
    test_class_info(&lv, &cd_S21131C3);
    dp->~S21131C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21131C3(Test_S21131C3, "S21131C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S21131C3C1Ev();
extern void _ZN8S21131C3D1Ev();
Name_Map name_map_S21131C3[] = {
  NSPAIR(_ZN8S21131C3C1Ev),
  NSPAIR(_ZN8S21131C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21131C5;
extern VTBL_ENTRY _ZTI8S21131C5[];
extern  VTBL_ENTRY _ZTV8S21131C5[];
extern Class_Descriptor cd_S21131C4;
extern VTBL_ENTRY _ZTI8S21131C4[];
extern  VTBL_ENTRY _ZTV8S21131C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C4[];
static Base_Class bases_S21131C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21131C5,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //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_S21131C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21131C3[];
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
extern void _ZN8S21131C33v15Ev();
extern void _ZN8S21131C33v16Ev();
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY vtc_S21131C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C3[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21131C3[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S21131C3[];
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C4__8S21131C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C4[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
};
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C5__8S21131C4__8S21131C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21131C4[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
static  VTT_ENTRY vtt_S21131C3[] = {
  {&(_ZTV8S21131C3[7]),  7,28},
  {&(_ZTV8S21131C3[7]),  7,28},
  {&(_ZTV8S21131C3[21]),  21,28},
  {&(_tg__ZTV8S21131C4__8S21131C3[3]),  3,6},
  {&(_tg__ZTV8S21131C5__8S21131C4__8S21131C3[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S21131C3[];
extern  VTBL_ENTRY _ZTV8S21131C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C3[];
Class_Descriptor cd_S21131C3 = {  "S21131C3", // class name
  bases_S21131C3, 2,
  &(vtc_S21131C3[0]), // expected_vtbl_contents
  &(vtt_S21131C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S21131C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21131C3),28, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21131C3),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  S21131C2  : virtual S21131C3 {
  virtual  ~S21131C2(); // _ZN8S21131C2D2Ev
  virtual void  v17(); // _ZN8S21131C23v17Ev
  virtual void  v18(); // _ZN8S21131C23v18Ev
  virtual void  v19(); // _ZN8S21131C23v19Ev
  virtual void  v20(); // _ZN8S21131C23v20Ev
  virtual void  v21(); // _ZN8S21131C23v21Ev
  virtual void  v22(); // _ZN8S21131C23v22Ev
  S21131C2(); // tgen
};
//SIG(-1 S21131C2) C1{ VBC2{ VBC3{ VBC4{ v7 v8 v9 v10 v11 v12 v13 FD[3]} v14 v15 v16} v17 v18} vd v1 v2 v3 v4 v5 v6}


 S21131C2 ::~S21131C2(){ note_dtor("S21131C2", this);}
void  S21131C2 ::v17(){vfunc_called(this, "_ZN8S21131C23v17Ev");}
void  S21131C2 ::v18(){vfunc_called(this, "_ZN8S21131C23v18Ev");}
void  S21131C2 ::v19(){vfunc_called(this, "_ZN8S21131C23v19Ev");}
void  S21131C2 ::v20(){vfunc_called(this, "_ZN8S21131C23v20Ev");}
void  S21131C2 ::v21(){vfunc_called(this, "_ZN8S21131C23v21Ev");}
void  S21131C2 ::v22(){vfunc_called(this, "_ZN8S21131C23v22Ev");}
S21131C2 ::S21131C2(){ note_ctor("S21131C2", this);} // tgen

static void Test_S21131C2()
{
  extern Class_Descriptor cd_S21131C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S21131C2, buf);
    S21131C2 *dp, &lv = *(dp=new (buf) S21131C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S21131C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21131C2)");
    check_base_class_offset(lv, (S21131C5*)(S21131C4*), ABISELECT(16,4), "S21131C2");
    check_base_class_offset(lv, (S21131C4*)(S21131C3*), 0, "S21131C2");
    check_base_class_offset(lv, (S21131C3*), 0, "S21131C2");
    test_class_info(&lv, &cd_S21131C2);
    dp->~S21131C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21131C2(Test_S21131C2, "S21131C2", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S21131C2C1Ev();
extern void _ZN8S21131C2D2Ev();
Name_Map name_map_S21131C2[] = {
  NSPAIR(_ZN8S21131C2C1Ev),
  NSPAIR(_ZN8S21131C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21131C5;
extern VTBL_ENTRY _ZTI8S21131C5[];
extern  VTBL_ENTRY _ZTV8S21131C5[];
extern Class_Descriptor cd_S21131C4;
extern VTBL_ENTRY _ZTI8S21131C4[];
extern  VTBL_ENTRY _ZTV8S21131C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C4[];
extern Class_Descriptor cd_S21131C3;
extern VTBL_ENTRY _ZTI8S21131C3[];
extern  VTBL_ENTRY _ZTV8S21131C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C3[];
static Base_Class bases_S21131C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21131C5,    ABISELECT(16,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    9, //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_S21131C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21131C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21131C2[];
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
extern void _ZN8S21131C33v15Ev();
extern void _ZN8S21131C33v16Ev();
extern void _ZN8S21131C2D1Ev();
extern void _ZN8S21131C2D0Ev();
extern void _ZN8S21131C23v17Ev();
extern void _ZN8S21131C23v18Ev();
extern void _ZN8S21131C23v19Ev();
extern void _ZN8S21131C23v20Ev();
extern void _ZN8S21131C23v21Ev();
extern void _ZN8S21131C23v22Ev();
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY vtc_S21131C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C2[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v16Ev,
  (VTBL_ENTRY)&_ZN8S21131C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21131C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v17Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v18Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v19Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v20Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v21Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21131C2[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S21131C2[];
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
extern void _ZN8S21131C33v15Ev();
extern void _ZN8S21131C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C3__8S21131C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C3[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v16Ev,
};
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C5__8S21131C3__8S21131C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21131C3[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C4__8S21131C2[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C4[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
};
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C5__8S21131C4__8S21131C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21131C4[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
static  VTT_ENTRY vtt_S21131C2[] = {
  {&(_ZTV8S21131C2[10]),  10,39},
  {&(_ZTV8S21131C2[10]),  10,39},
  {&(_ZTV8S21131C2[10]),  10,39},
  {&(_ZTV8S21131C2[32]),  32,39},
  {&(_tg__ZTV8S21131C3__8S21131C2[7]),  7,12},
  {&(_tg__ZTV8S21131C3__8S21131C2[7]),  7,12},
  {&(_tg__ZTV8S21131C5__8S21131C3__8S21131C2[9]),  9,16},
  {&(_tg__ZTV8S21131C4__8S21131C2[3]),  3,6},
  {&(_tg__ZTV8S21131C5__8S21131C4__8S21131C2[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S21131C2[];
extern  VTBL_ENTRY _ZTV8S21131C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C2[];
Class_Descriptor cd_S21131C2 = {  "S21131C2", // class name
  bases_S21131C2, 3,
  &(vtc_S21131C2[0]), // expected_vtbl_contents
  &(vtt_S21131C2[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S21131C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21131C2),39, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21131C2),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21131C1  : virtual S21131C2 {
  ::S21131C5 s21131c1f0;
  ::S21131C4 s21131c1f1;
  virtual  ~S21131C1(); // _ZN8S21131C1D2Ev
  virtual void  v1(); // _ZN8S21131C12v1Ev
  virtual void  v2(); // _ZN8S21131C12v2Ev
  virtual void  v3(); // _ZN8S21131C12v3Ev
  virtual void  v4(); // _ZN8S21131C12v4Ev
  S21131C1(); // tgen
};
//SIG(1 S21131C1) C1{ VBC2{ VBC3{ VBC4{ VBC5{ v5 v6 v7 v8 v9 v10 v11 FD[3]} v12 v13 v14} v15 v16} vd v17 v18 v19 v20 v21 v22} vd v1 v2 v3 v4 FC5 FC4}


 S21131C1 ::~S21131C1(){ note_dtor("S21131C1", this);}
void  S21131C1 ::v1(){vfunc_called(this, "_ZN8S21131C12v1Ev");}
void  S21131C1 ::v2(){vfunc_called(this, "_ZN8S21131C12v2Ev");}
void  S21131C1 ::v3(){vfunc_called(this, "_ZN8S21131C12v3Ev");}
void  S21131C1 ::v4(){vfunc_called(this, "_ZN8S21131C12v4Ev");}
S21131C1 ::S21131C1(){ note_ctor("S21131C1", this);} // tgen

static void Test_S21131C1()
{
  extern Class_Descriptor cd_S21131C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,33)];
    init_test(&cd_S21131C1, buf);
    S21131C1 *dp, &lv = *(dp=new (buf) S21131C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,128), "sizeof(S21131C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21131C1)");
    check_base_class_offset(lv, (S21131C5*)(S21131C4*), ABISELECT(160,88), "S21131C1");
    check_base_class_offset(lv, (S21131C4*)(S21131C3*), 0, "S21131C1");
    check_base_class_offset(lv, (S21131C3*)(S21131C2*), 0, "S21131C1");
    check_base_class_offset(lv, (S21131C2*), 0, "S21131C1");
    check_field_offset(lv, s21131c1f0, ABISELECT(16,4), "S21131C1.s21131c1f0");
    check_field_offset(lv, s21131c1f1, ABISELECT(80,44), "S21131C1.s21131c1f1");
    test_class_info(&lv, &cd_S21131C1);
    dp->~S21131C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21131C1(Test_S21131C1, "S21131C1", ABISELECT(224,128));

#else // __cplusplus

extern void _ZN8S21131C1C1Ev();
extern void _ZN8S21131C1D2Ev();
Name_Map name_map_S21131C1[] = {
  NSPAIR(_ZN8S21131C1C1Ev),
  NSPAIR(_ZN8S21131C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21131C5;
extern VTBL_ENTRY _ZTI8S21131C5[];
extern  VTBL_ENTRY _ZTV8S21131C5[];
extern Class_Descriptor cd_S21131C4;
extern VTBL_ENTRY _ZTI8S21131C4[];
extern  VTBL_ENTRY _ZTV8S21131C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C4[];
extern Class_Descriptor cd_S21131C3;
extern VTBL_ENTRY _ZTI8S21131C3[];
extern  VTBL_ENTRY _ZTV8S21131C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C3[];
extern Class_Descriptor cd_S21131C2;
extern VTBL_ENTRY _ZTI8S21131C2[];
extern  VTBL_ENTRY _ZTV8S21131C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C2[];
static Base_Class bases_S21131C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21131C5,    ABISELECT(160,88), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //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
  0, 1},
  {&cd_S21131C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    2, //immediately_derived
  0, 1},
  {&cd_S21131C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21131C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21131C1[];
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
extern void _ZN8S21131C33v15Ev();
extern void _ZN8S21131C33v16Ev();
extern void _ZN8S21131C1D1Ev();
extern void _ZN8S21131C1D0Ev();
extern void _ZN8S21131C23v17Ev();
extern void _ZN8S21131C23v18Ev();
extern void _ZN8S21131C23v19Ev();
extern void _ZN8S21131C23v20Ev();
extern void _ZN8S21131C23v21Ev();
extern void _ZN8S21131C23v22Ev();
extern void _ZN8S21131C12v1Ev();
extern void _ZN8S21131C12v2Ev();
extern void _ZN8S21131C12v3Ev();
extern void _ZN8S21131C12v4Ev();
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY vtc_S21131C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(160,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C1[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v16Ev,
  (VTBL_ENTRY)&_ZN8S21131C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21131C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v17Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v18Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v19Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v20Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v21Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v22Ev,
  (VTBL_ENTRY)&_ZN8S21131C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21131C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21131C12v3Ev,
  (VTBL_ENTRY)&_ZN8S21131C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S21131C1[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S21131C1[];
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
extern void _ZN8S21131C33v15Ev();
extern void _ZN8S21131C33v16Ev();
extern void _ZN8S21131C2D1Ev();
extern void _ZN8S21131C2D0Ev();
extern void _ZN8S21131C23v17Ev();
extern void _ZN8S21131C23v18Ev();
extern void _ZN8S21131C23v19Ev();
extern void _ZN8S21131C23v20Ev();
extern void _ZN8S21131C23v21Ev();
extern void _ZN8S21131C23v22Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C2__8S21131C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(160,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C2[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v16Ev,
  (VTBL_ENTRY)&_ZN8S21131C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21131C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v17Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v18Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v19Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v20Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v21Ev,
  (VTBL_ENTRY)&_ZN8S21131C23v22Ev,
};
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C5__8S21131C2__8S21131C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S21131C2[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
extern void _ZN8S21131C33v15Ev();
extern void _ZN8S21131C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C3__8S21131C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(160,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C3[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21131C33v16Ev,
};
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C5__8S21131C3__8S21131C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S21131C3[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
extern void _ZN8S21131C43v12Ev();
extern void _ZN8S21131C43v13Ev();
extern void _ZN8S21131C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C4__8S21131C1[] = {
  ABISELECT(160,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S21131C4[0]),
  (VTBL_ENTRY)&_ZN8S21131C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21131C43v14Ev,
};
extern void _ZN8S21131C52v5Ev();
extern void _ZN8S21131C52v6Ev();
extern void _ZN8S21131C52v7Ev();
extern void _ZN8S21131C52v8Ev();
extern void _ZN8S21131C52v9Ev();
extern void _ZN8S21131C53v10Ev();
extern void _ZN8S21131C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21131C5__8S21131C4__8S21131C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S21131C4[0]),
  (VTBL_ENTRY)&_ZN8S21131C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v7Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v8Ev,
  (VTBL_ENTRY)&_ZN8S21131C52v9Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v10Ev,
  (VTBL_ENTRY)&_ZN8S21131C53v11Ev,
};
static  VTT_ENTRY vtt_S21131C1[] = {
  {&(_ZTV8S21131C1[18]),  18,51},
  {&(_ZTV8S21131C1[18]),  18,51},
  {&(_ZTV8S21131C1[18]),  18,51},
  {&(_ZTV8S21131C1[18]),  18,51},
  {&(_ZTV8S21131C1[44]),  44,51},
  {&(_tg__ZTV8S21131C2__8S21131C1[10]),  10,23},
  {&(_tg__ZTV8S21131C2__8S21131C1[10]),  10,23},
  {&(_tg__ZTV8S21131C2__8S21131C1[10]),  10,23},
  {&(_tg__ZTV8S21131C5__8S21131C2__8S21131C1[9]),  9,16},
  {&(_tg__ZTV8S21131C3__8S21131C1[7]),  7,12},
  {&(_tg__ZTV8S21131C3__8S21131C1[7]),  7,12},
  {&(_tg__ZTV8S21131C5__8S21131C3__8S21131C1[9]),  9,16},
  {&(_tg__ZTV8S21131C4__8S21131C1[3]),  3,6},
  {&(_tg__ZTV8S21131C5__8S21131C4__8S21131C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S21131C1[];
extern  VTBL_ENTRY _ZTV8S21131C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21131C1[];
Class_Descriptor cd_S21131C1 = {  "S21131C1", // class name
  bases_S21131C1, 4,
  &(vtc_S21131C1[0]), // expected_vtbl_contents
  &(vtt_S21131C1[0]), // expected_vtt_contents
  ABISELECT(224,128), // object size
  NSPAIRA(_ZTI8S21131C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21131C1),51, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21131C1),14, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S501C5  {
  int s501c5f0;
  virtual void  v2(); // _ZN6S501C52v2Ev
  virtual void  v3(); // _ZN6S501C52v3Ev
  virtual void  v4(); // _ZN6S501C52v4Ev
  virtual void  v5(); // _ZN6S501C52v5Ev
  virtual void  v6(); // _ZN6S501C52v6Ev
  ~S501C5(); // tgen
  S501C5(); // tgen
};
//SIG(-1 S501C5) C1{ v1 v2 v3 v4 v5 Fi}


void  S501C5 ::v2(){vfunc_called(this, "_ZN6S501C52v2Ev");}
void  S501C5 ::v3(){vfunc_called(this, "_ZN6S501C52v3Ev");}
void  S501C5 ::v4(){vfunc_called(this, "_ZN6S501C52v4Ev");}
void  S501C5 ::v5(){vfunc_called(this, "_ZN6S501C52v5Ev");}
void  S501C5 ::v6(){vfunc_called(this, "_ZN6S501C52v6Ev");}
S501C5 ::~S501C5(){ note_dtor("S501C5", this);} // tgen
S501C5 ::S501C5(){ note_ctor("S501C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN6S501C5C1Ev();
extern void _ZN6S501C5D1Ev();
Name_Map name_map_S501C5[] = {
  NSPAIR(_ZN6S501C5C1Ev),
  NSPAIR(_ZN6S501C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S501C5[];
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
static  VTBL_ENTRY vtc_S501C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S501C5[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
};
extern VTBL_ENTRY _ZTI6S501C5[];
extern  VTBL_ENTRY _ZTV6S501C5[];
Class_Descriptor cd_S501C5 = {  "S501C5", // class name
  0,0,//no base classes
  &(vtc_S501C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S501C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S501C5),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S501C6  {
  long double s501c6f0[3];
  virtual void  v7(); // _ZN6S501C62v7Ev
  virtual void  v8(); // _ZN6S501C62v8Ev
  virtual void  v9(); // _ZN6S501C62v9Ev
  virtual void  v10(); // _ZN6S501C63v10Ev
  virtual void  v11(); // _ZN6S501C63v11Ev
  virtual void  v12(); // _ZN6S501C63v12Ev
  virtual void  v13(); // _ZN6S501C63v13Ev
  ~S501C6(); // tgen
  S501C6(); // tgen
};
//SIG(-1 S501C6) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S501C6 ::v7(){vfunc_called(this, "_ZN6S501C62v7Ev");}
void  S501C6 ::v8(){vfunc_called(this, "_ZN6S501C62v8Ev");}
void  S501C6 ::v9(){vfunc_called(this, "_ZN6S501C62v9Ev");}
void  S501C6 ::v10(){vfunc_called(this, "_ZN6S501C63v10Ev");}
void  S501C6 ::v11(){vfunc_called(this, "_ZN6S501C63v11Ev");}
void  S501C6 ::v12(){vfunc_called(this, "_ZN6S501C63v12Ev");}
void  S501C6 ::v13(){vfunc_called(this, "_ZN6S501C63v13Ev");}
S501C6 ::~S501C6(){ note_dtor("S501C6", this);} // tgen
S501C6 ::S501C6(){ note_ctor("S501C6", this);} // tgen

static void Test_S501C6()
{
  extern Class_Descriptor cd_S501C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S501C6, buf);
    S501C6 *dp, &lv = *(dp=new (buf) S501C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S501C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S501C6)");
    check_field_offset(lv, s501c6f0, ABISELECT(16,4), "S501C6.s501c6f0");
    test_class_info(&lv, &cd_S501C6);
    dp->~S501C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS501C6(Test_S501C6, "S501C6", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN6S501C6C1Ev();
extern void _ZN6S501C6D1Ev();
Name_Map name_map_S501C6[] = {
  NSPAIR(_ZN6S501C6C1Ev),
  NSPAIR(_ZN6S501C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S501C6[];
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY vtc_S501C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S501C6[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
extern VTBL_ENTRY _ZTI6S501C6[];
extern  VTBL_ENTRY _ZTV6S501C6[];
Class_Descriptor cd_S501C6 = {  "S501C6", // class name
  0,0,//no base classes
  &(vtc_S501C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI6S501C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S501C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S501C4  : S501C5 , virtual S501C6 {
  virtual void  v14(); // _ZN6S501C43v14Ev
  virtual void  v15(); // _ZN6S501C43v15Ev
  virtual void  v16(); // _ZN6S501C43v16Ev
  virtual void  v17(); // _ZN6S501C43v17Ev
  virtual void  v18(); // _ZN6S501C43v18Ev
  ~S501C4(); // tgen
  S501C4(); // tgen
};
//SIG(-1 S501C4) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S501C4 ::v14(){vfunc_called(this, "_ZN6S501C43v14Ev");}
void  S501C4 ::v15(){vfunc_called(this, "_ZN6S501C43v15Ev");}
void  S501C4 ::v16(){vfunc_called(this, "_ZN6S501C43v16Ev");}
void  S501C4 ::v17(){vfunc_called(this, "_ZN6S501C43v17Ev");}
void  S501C4 ::v18(){vfunc_called(this, "_ZN6S501C43v18Ev");}
S501C4 ::~S501C4(){ note_dtor("S501C4", this);} // tgen
S501C4 ::S501C4(){ note_ctor("S501C4", this);} // tgen

static void Test_S501C4()
{
  extern Class_Descriptor cd_S501C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S501C4, buf);
    S501C4 *dp, &lv = *(dp=new (buf) S501C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S501C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S501C4)");
    check_base_class_offset(lv, (S501C5*), 0, "S501C4");
    check_base_class_offset(lv, (S501C6*), ABISELECT(16,8), "S501C4");
    test_class_info(&lv, &cd_S501C4);
    dp->~S501C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS501C4(Test_S501C4, "S501C4", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN6S501C4C1Ev();
extern void _ZN6S501C4D1Ev();
Name_Map name_map_S501C4[] = {
  NSPAIR(_ZN6S501C4C1Ev),
  NSPAIR(_ZN6S501C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S501C5;
extern VTBL_ENTRY _ZTI6S501C5[];
extern  VTBL_ENTRY _ZTV6S501C5[];
extern Class_Descriptor cd_S501C6;
extern VTBL_ENTRY _ZTI6S501C6[];
extern  VTBL_ENTRY _ZTV6S501C6[];
static Base_Class bases_S501C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S501C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S501C6,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI6S501C4[];
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY vtc_S501C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C4[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S501C4[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
extern VTBL_ENTRY _ZTV6S501C4[];
static  VTT_ENTRY vtt_S501C4[] = {
  {&(_ZTV6S501C4[3]),  3,29},
  {&(_ZTV6S501C4[22]),  22,29},
};
extern VTBL_ENTRY _ZTI6S501C4[];
extern  VTBL_ENTRY _ZTV6S501C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C4[];
Class_Descriptor cd_S501C4 = {  "S501C4", // class name
  bases_S501C4, 2,
  &(vtc_S501C4[0]), // expected_vtbl_contents
  &(vtt_S501C4[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI6S501C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S501C4),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S501C4),2, //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  S501C3  : S501C4 {
  virtual void  v19(); // _ZN6S501C33v19Ev
  virtual void  v20(); // _ZN6S501C33v20Ev
  ~S501C3(); // tgen
  S501C3(); // tgen
};
//SIG(-1 S501C3) C1{ BC2{ BC3{ v3 v4 v5 v6 v7 Fi} VBC4{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v1 v2}


void  S501C3 ::v19(){vfunc_called(this, "_ZN6S501C33v19Ev");}
void  S501C3 ::v20(){vfunc_called(this, "_ZN6S501C33v20Ev");}
S501C3 ::~S501C3(){ note_dtor("S501C3", this);} // tgen
S501C3 ::S501C3(){ note_ctor("S501C3", this);} // tgen

static void Test_S501C3()
{
  extern Class_Descriptor cd_S501C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S501C3, buf);
    S501C3 *dp, &lv = *(dp=new (buf) S501C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S501C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S501C3)");
    check_base_class_offset(lv, (S501C5*)(S501C4*), 0, "S501C3");
    check_base_class_offset(lv, (S501C6*)(S501C4*), ABISELECT(16,8), "S501C3");
    check_base_class_offset(lv, (S501C4*), 0, "S501C3");
    test_class_info(&lv, &cd_S501C3);
    dp->~S501C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS501C3(Test_S501C3, "S501C3", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN6S501C3C1Ev();
extern void _ZN6S501C3D1Ev();
Name_Map name_map_S501C3[] = {
  NSPAIR(_ZN6S501C3C1Ev),
  NSPAIR(_ZN6S501C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S501C5;
extern VTBL_ENTRY _ZTI6S501C5[];
extern  VTBL_ENTRY _ZTV6S501C5[];
extern Class_Descriptor cd_S501C6;
extern VTBL_ENTRY _ZTI6S501C6[];
extern  VTBL_ENTRY _ZTV6S501C6[];
extern Class_Descriptor cd_S501C4;
extern VTBL_ENTRY _ZTI6S501C4[];
extern  VTBL_ENTRY _ZTV6S501C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C4[];
static Base_Class bases_S501C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S501C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S501C6,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S501C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S501C3[];
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
extern void _ZN6S501C33v19Ev();
extern void _ZN6S501C33v20Ev();
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY vtc_S501C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C3[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
  (VTBL_ENTRY)&_ZN6S501C33v19Ev,
  (VTBL_ENTRY)&_ZN6S501C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S501C3[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
extern VTBL_ENTRY _ZTV6S501C3[];
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
static  VTBL_ENTRY _tg__ZTV6S501C4__6S501C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C4[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
};
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY _tg__ZTV6S501C6__6S501C4__6S501C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S501C4[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
static  VTT_ENTRY vtt_S501C3[] = {
  {&(_ZTV6S501C3[3]),  3,31},
  {&(_tg__ZTV6S501C4__6S501C3[3]),  3,13},
  {&(_tg__ZTV6S501C6__6S501C4__6S501C3[9]),  9,16},
  {&(_ZTV6S501C3[24]),  24,31},
};
extern VTBL_ENTRY _ZTI6S501C3[];
extern  VTBL_ENTRY _ZTV6S501C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C3[];
Class_Descriptor cd_S501C3 = {  "S501C3", // class name
  bases_S501C3, 3,
  &(vtc_S501C3[0]), // expected_vtbl_contents
  &(vtt_S501C3[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI6S501C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S501C3),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S501C3),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S501C2  : S501C3 , S501C5 {
  long s501c2f0;
  virtual void  v21(); // _ZN6S501C23v21Ev
  virtual void  v22(); // _ZN6S501C23v22Ev
  ~S501C2(); // tgen
  S501C2(); // tgen
};
//SIG(-1 S501C2) C1{ BC2{ BC3{ BC4{ v3 v4 v5 v6 v7 Fi} VBC5{ v8 v9 v10 v11 v12 v13 v14 FD[3]} v15 v16 v17 v18 v19} v20 v21} BC4 v1 v2 Fl}


void  S501C2 ::v21(){vfunc_called(this, "_ZN6S501C23v21Ev");}
void  S501C2 ::v22(){vfunc_called(this, "_ZN6S501C23v22Ev");}
S501C2 ::~S501C2(){ note_dtor("S501C2", this);} // tgen
S501C2 ::S501C2(){ note_ctor("S501C2", this);} // tgen

static void Test_S501C2()
{
  extern Class_Descriptor cd_S501C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,16)];
    init_test(&cd_S501C2, buf);
    S501C2 *dp, &lv = *(dp=new (buf) S501C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S501C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S501C2)");
    check_base_class_offset(lv, (S501C5*)(S501C4*)(S501C3*), 0, "S501C2");
    check_base_class_offset(lv, (S501C6*)(S501C4*)(S501C3*), ABISELECT(48,20), "S501C2");
    check_base_class_offset(lv, (S501C4*)(S501C3*), 0, "S501C2");
    check_base_class_offset(lv, (S501C3*), 0, "S501C2");
    /*is_ambiguous_... S501C2::S501C5 */ AMB_check_base_class_offset(lv, (S501C5*), ABISELECT(16,8), "S501C2");
    check_field_offset(lv, s501c2f0, ABISELECT(32,16), "S501C2.s501c2f0");
    test_class_info(&lv, &cd_S501C2);
    dp->~S501C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS501C2(Test_S501C2, "S501C2", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN6S501C2C1Ev();
extern void _ZN6S501C2D1Ev();
Name_Map name_map_S501C2[] = {
  NSPAIR(_ZN6S501C2C1Ev),
  NSPAIR(_ZN6S501C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S501C5;
extern VTBL_ENTRY _ZTI6S501C5[];
extern  VTBL_ENTRY _ZTV6S501C5[];
extern Class_Descriptor cd_S501C6;
extern VTBL_ENTRY _ZTI6S501C6[];
extern  VTBL_ENTRY _ZTV6S501C6[];
extern Class_Descriptor cd_S501C4;
extern VTBL_ENTRY _ZTI6S501C4[];
extern  VTBL_ENTRY _ZTV6S501C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C4[];
extern Class_Descriptor cd_S501C3;
extern VTBL_ENTRY _ZTI6S501C3[];
extern  VTBL_ENTRY _ZTV6S501C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C3[];
extern Class_Descriptor cd_S501C5;
extern VTBL_ENTRY _ZTI6S501C5[];
extern  VTBL_ENTRY _ZTV6S501C5[];
static Base_Class bases_S501C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S501C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S501C6,    ABISELECT(48,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //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_S501C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S501C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S501C5,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S501C2[];
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
extern void _ZN6S501C33v19Ev();
extern void _ZN6S501C33v20Ev();
extern void _ZN6S501C23v21Ev();
extern void _ZN6S501C23v22Ev();
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY vtc_S501C2[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C2[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
  (VTBL_ENTRY)&_ZN6S501C33v19Ev,
  (VTBL_ENTRY)&_ZN6S501C33v20Ev,
  (VTBL_ENTRY)&_ZN6S501C23v21Ev,
  (VTBL_ENTRY)&_ZN6S501C23v22Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S501C2[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI6S501C2[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
extern VTBL_ENTRY _ZTV6S501C2[];
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
extern void _ZN6S501C33v19Ev();
extern void _ZN6S501C33v20Ev();
static  VTBL_ENTRY _tg__ZTV6S501C3__6S501C2[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C3[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
  (VTBL_ENTRY)&_ZN6S501C33v19Ev,
  (VTBL_ENTRY)&_ZN6S501C33v20Ev,
};
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
static  VTBL_ENTRY _tg__ZTV6S501C46S501C3__6S501C2[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C4[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
};
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY _tg__ZTV6S501C6__6S501C46S501C3__6S501C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI6S501C4[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY _tg__ZTV6S501C6__6S501C3__6S501C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI6S501C3[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
static  VTT_ENTRY vtt_S501C2[] = {
  {&(_ZTV6S501C2[3]),  3,40},
  {&(_tg__ZTV6S501C3__6S501C2[3]),  3,15},
  {&(_tg__ZTV6S501C46S501C3__6S501C2[3]),  3,13},
  {&(_tg__ZTV6S501C6__6S501C46S501C3__6S501C2[9]),  9,16},
  {&(_tg__ZTV6S501C6__6S501C3__6S501C2[9]),  9,16},
  {&(_ZTV6S501C2[33]),  33,40},
};
extern VTBL_ENTRY _ZTI6S501C2[];
extern  VTBL_ENTRY _ZTV6S501C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C2[];
Class_Descriptor cd_S501C2 = {  "S501C2", // class name
  bases_S501C2, 5,
  &(vtc_S501C2[0]), // expected_vtbl_contents
  &(vtt_S501C2[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI6S501C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S501C2),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S501C2),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S501C1  : S501C2 {
  virtual  ~S501C1(); // _ZN6S501C1D2Ev
  virtual void  v1(); // _ZN6S501C12v1Ev
  S501C1(); // tgen
};
//SIG(1 S501C1) C1{ BC2{ BC3{ BC4{ BC5{ v2 v3 v4 v5 v6 Fi} VBC6{ v7 v8 v9 v10 v11 v12 v13 FD[3]} v14 v15 v16 v17 v18} v19 v20} BC5 v21 v22 Fl} vd v1}


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

static void Test_S501C1()
{
  extern Class_Descriptor cd_S501C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,16)];
    init_test(&cd_S501C1, buf);
    S501C1 *dp, &lv = *(dp=new (buf) S501C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S501C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S501C1)");
    check_base_class_offset(lv, (S501C5*)(S501C4*)(S501C3*)(S501C2*), 0, "S501C1");
    check_base_class_offset(lv, (S501C6*)(S501C4*)(S501C3*)(S501C2*), ABISELECT(48,20), "S501C1");
    check_base_class_offset(lv, (S501C4*)(S501C3*)(S501C2*), 0, "S501C1");
    check_base_class_offset(lv, (S501C3*)(S501C2*), 0, "S501C1");
    /*is_ambiguous_... S501C2::S501C5 */ AMB_check_base_class_offset(lv, (S501C5*)(S501C2*), ABISELECT(16,8), "S501C1");
    check_base_class_offset(lv, (S501C2*), 0, "S501C1");
    test_class_info(&lv, &cd_S501C1);
    dp->~S501C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS501C1(Test_S501C1, "S501C1", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN6S501C1C1Ev();
extern void _ZN6S501C1D2Ev();
Name_Map name_map_S501C1[] = {
  NSPAIR(_ZN6S501C1C1Ev),
  NSPAIR(_ZN6S501C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S501C5;
extern VTBL_ENTRY _ZTI6S501C5[];
extern  VTBL_ENTRY _ZTV6S501C5[];
extern Class_Descriptor cd_S501C6;
extern VTBL_ENTRY _ZTI6S501C6[];
extern  VTBL_ENTRY _ZTV6S501C6[];
extern Class_Descriptor cd_S501C4;
extern VTBL_ENTRY _ZTI6S501C4[];
extern  VTBL_ENTRY _ZTV6S501C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C4[];
extern Class_Descriptor cd_S501C3;
extern VTBL_ENTRY _ZTI6S501C3[];
extern  VTBL_ENTRY _ZTV6S501C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C3[];
extern Class_Descriptor cd_S501C5;
extern VTBL_ENTRY _ZTI6S501C5[];
extern  VTBL_ENTRY _ZTV6S501C5[];
extern Class_Descriptor cd_S501C2;
extern VTBL_ENTRY _ZTI6S501C2[];
extern  VTBL_ENTRY _ZTV6S501C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C2[];
static Base_Class bases_S501C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S501C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S501C6,    ABISELECT(48,20), //bcp->offset
    27, //bcp->virtual_function_table_offset
    9, //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_S501C4,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S501C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S501C5,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S501C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S501C1[];
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
extern void _ZN6S501C33v19Ev();
extern void _ZN6S501C33v20Ev();
extern void _ZN6S501C23v21Ev();
extern void _ZN6S501C23v22Ev();
extern void _ZN6S501C1D1Ev();
extern void _ZN6S501C1D0Ev();
extern void _ZN6S501C12v1Ev();
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY vtc_S501C1[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C1[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
  (VTBL_ENTRY)&_ZN6S501C33v19Ev,
  (VTBL_ENTRY)&_ZN6S501C33v20Ev,
  (VTBL_ENTRY)&_ZN6S501C23v21Ev,
  (VTBL_ENTRY)&_ZN6S501C23v22Ev,
  (VTBL_ENTRY)&_ZN6S501C1D1Ev,
  (VTBL_ENTRY)&_ZN6S501C1D0Ev,
  (VTBL_ENTRY)&_ZN6S501C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S501C1[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI6S501C1[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
extern VTBL_ENTRY _ZTV6S501C1[];
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
extern void _ZN6S501C33v19Ev();
extern void _ZN6S501C33v20Ev();
extern void _ZN6S501C23v21Ev();
extern void _ZN6S501C23v22Ev();
static  VTBL_ENTRY _tg__ZTV6S501C2__6S501C1[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C2[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
  (VTBL_ENTRY)&_ZN6S501C33v19Ev,
  (VTBL_ENTRY)&_ZN6S501C33v20Ev,
  (VTBL_ENTRY)&_ZN6S501C23v21Ev,
  (VTBL_ENTRY)&_ZN6S501C23v22Ev,
};
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
extern void _ZN6S501C33v19Ev();
extern void _ZN6S501C33v20Ev();
static  VTBL_ENTRY _tg__ZTV6S501C36S501C2__6S501C1[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C3[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
  (VTBL_ENTRY)&_ZN6S501C33v19Ev,
  (VTBL_ENTRY)&_ZN6S501C33v20Ev,
};
extern void _ZN6S501C52v2Ev();
extern void _ZN6S501C52v3Ev();
extern void _ZN6S501C52v4Ev();
extern void _ZN6S501C52v5Ev();
extern void _ZN6S501C52v6Ev();
extern void _ZN6S501C43v14Ev();
extern void _ZN6S501C43v15Ev();
extern void _ZN6S501C43v16Ev();
extern void _ZN6S501C43v17Ev();
extern void _ZN6S501C43v18Ev();
static  VTBL_ENTRY _tg__ZTV6S501C46S501C36S501C2__6S501C1[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI6S501C4[0]),
  (VTBL_ENTRY)&_ZN6S501C52v2Ev,
  (VTBL_ENTRY)&_ZN6S501C52v3Ev,
  (VTBL_ENTRY)&_ZN6S501C52v4Ev,
  (VTBL_ENTRY)&_ZN6S501C52v5Ev,
  (VTBL_ENTRY)&_ZN6S501C52v6Ev,
  (VTBL_ENTRY)&_ZN6S501C43v14Ev,
  (VTBL_ENTRY)&_ZN6S501C43v15Ev,
  (VTBL_ENTRY)&_ZN6S501C43v16Ev,
  (VTBL_ENTRY)&_ZN6S501C43v17Ev,
  (VTBL_ENTRY)&_ZN6S501C43v18Ev,
};
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY _tg__ZTV6S501C6__6S501C46S501C36S501C2__6S501C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI6S501C4[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY _tg__ZTV6S501C6__6S501C36S501C2__6S501C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI6S501C3[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
extern void _ZN6S501C62v7Ev();
extern void _ZN6S501C62v8Ev();
extern void _ZN6S501C62v9Ev();
extern void _ZN6S501C63v10Ev();
extern void _ZN6S501C63v11Ev();
extern void _ZN6S501C63v12Ev();
extern void _ZN6S501C63v13Ev();
static  VTBL_ENTRY _tg__ZTV6S501C6__6S501C2__6S501C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI6S501C2[0]),
  (VTBL_ENTRY)&_ZN6S501C62v7Ev,
  (VTBL_ENTRY)&_ZN6S501C62v8Ev,
  (VTBL_ENTRY)&_ZN6S501C62v9Ev,
  (VTBL_ENTRY)&_ZN6S501C63v10Ev,
  (VTBL_ENTRY)&_ZN6S501C63v11Ev,
  (VTBL_ENTRY)&_ZN6S501C63v12Ev,
  (VTBL_ENTRY)&_ZN6S501C63v13Ev,
};
static  VTT_ENTRY vtt_S501C1[] = {
  {&(_ZTV6S501C1[3]),  3,43},
  {&(_tg__ZTV6S501C2__6S501C1[3]),  3,17},
  {&(_tg__ZTV6S501C36S501C2__6S501C1[3]),  3,15},
  {&(_tg__ZTV6S501C46S501C36S501C2__6S501C1[3]),  3,13},
  {&(_tg__ZTV6S501C6__6S501C46S501C36S501C2__6S501C1[9]),  9,16},
  {&(_tg__ZTV6S501C6__6S501C36S501C2__6S501C1[9]),  9,16},
  {&(_tg__ZTV6S501C6__6S501C2__6S501C1[9]),  9,16},
  {&(_ZTV6S501C1[36]),  36,43},
};
extern VTBL_ENTRY _ZTI6S501C1[];
extern  VTBL_ENTRY _ZTV6S501C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S501C1[];
Class_Descriptor cd_S501C1 = {  "S501C1", // class name
  bases_S501C1, 6,
  &(vtc_S501C1[0]), // expected_vtbl_contents
  &(vtt_S501C1[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI6S501C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S501C1),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S501C1),8, //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  S5913C3  {
  short s5913c3f0;
  virtual void  v5(); // _ZN7S5913C32v5Ev
  ~S5913C3(); // tgen
  S5913C3(); // tgen
};
//SIG(-1 S5913C3) C1{ v1 Fs}


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

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

#else // __cplusplus

extern void _ZN7S5913C3C1Ev();
extern void _ZN7S5913C3D1Ev();
Name_Map name_map_S5913C3[] = {
  NSPAIR(_ZN7S5913C3C1Ev),
  NSPAIR(_ZN7S5913C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5913C3[];
extern void _ZN7S5913C32v5Ev();
static  VTBL_ENTRY vtc_S5913C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5913C3[0]),
  (VTBL_ENTRY)&_ZN7S5913C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5913C3[];
extern  VTBL_ENTRY _ZTV7S5913C3[];
Class_Descriptor cd_S5913C3 = {  "S5913C3", // class name
  0,0,//no base classes
  &(vtc_S5913C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S5913C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5913C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5913C5  : virtual S5913C3 {
  int s5913c5f0;
  virtual void  v6(); // _ZN7S5913C52v6Ev
  ~S5913C5(); // tgen
  S5913C5(); // tgen
};
//SIG(-1 S5913C5) C1{ VBC2{ v2 Fs} v1 Fi}


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

static void Test_S5913C5()
{
  extern Class_Descriptor cd_S5913C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5913C5, buf);
    S5913C5 *dp, &lv = *(dp=new (buf) S5913C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5913C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5913C5)");
    check_base_class_offset(lv, (S5913C3*), ABISELECT(16,8), "S5913C5");
    check_field_offset(lv, s5913c5f0, ABISELECT(8,4), "S5913C5.s5913c5f0");
    test_class_info(&lv, &cd_S5913C5);
    dp->~S5913C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5913C5(Test_S5913C5, "S5913C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S5913C5C1Ev();
extern void _ZN7S5913C5D1Ev();
Name_Map name_map_S5913C5[] = {
  NSPAIR(_ZN7S5913C5C1Ev),
  NSPAIR(_ZN7S5913C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5913C3;
extern VTBL_ENTRY _ZTI7S5913C3[];
extern  VTBL_ENTRY _ZTV7S5913C3[];
static Base_Class bases_S5913C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5913C3,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5913C5[];
extern void _ZN7S5913C52v6Ev();
extern void _ZN7S5913C32v5Ev();
static  VTBL_ENTRY vtc_S5913C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5913C5[0]),
  (VTBL_ENTRY)&_ZN7S5913C52v6Ev,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5913C5[0]),
  (VTBL_ENTRY)&_ZN7S5913C32v5Ev,
};
extern VTBL_ENTRY _ZTV7S5913C5[];
static  VTT_ENTRY vtt_S5913C5[] = {
  {&(_ZTV7S5913C5[3]),  3,8},
  {&(_ZTV7S5913C5[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S5913C5[];
extern  VTBL_ENTRY _ZTV7S5913C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5913C5[];
Class_Descriptor cd_S5913C5 = {  "S5913C5", // class name
  bases_S5913C5, 1,
  &(vtc_S5913C5[0]), // expected_vtbl_contents
  &(vtt_S5913C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S5913C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5913C5),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5913C5),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  S5913C7  {
  ::S19737C2 s5913c7f0;
  int s5913c7f1;
  virtual void  v7(); // _ZN7S5913C72v7Ev
  ~S5913C7(); // tgen
  S5913C7(); // tgen
};
//SIG(-1 S5913C7) C1{ v1 FC2{ m FL Fp[8]} Fi}


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

static void Test_S5913C7()
{
  extern Class_Descriptor cd_S5913C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S5913C7, buf);
    S5913C7 *dp, &lv = *(dp=new (buf) S5913C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S5913C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5913C7)");
    check_field_offset(lv, s5913c7f0, ABISELECT(8,4), "S5913C7.s5913c7f0");
    check_field_offset(lv, s5913c7f1, ABISELECT(80,44), "S5913C7.s5913c7f1");
    test_class_info(&lv, &cd_S5913C7);
    dp->~S5913C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5913C7(Test_S5913C7, "S5913C7", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S5913C7C1Ev();
extern void _ZN7S5913C7D1Ev();
Name_Map name_map_S5913C7[] = {
  NSPAIR(_ZN7S5913C7C1Ev),
  NSPAIR(_ZN7S5913C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5913C7[];
extern void _ZN7S5913C72v7Ev();
static  VTBL_ENTRY vtc_S5913C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5913C7[0]),
  (VTBL_ENTRY)&_ZN7S5913C72v7Ev,
};
extern VTBL_ENTRY _ZTI7S5913C7[];
extern  VTBL_ENTRY _ZTV7S5913C7[];
Class_Descriptor cd_S5913C7 = {  "S5913C7", // class name
  0,0,//no base classes
  &(vtc_S5913C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S5913C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5913C7),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  S5913C4  : virtual S5913C3 , virtual S5913C5 , virtual S19737C5 , virtual S5913C7 , virtual S19737C2 {
  int s5913c4f0;
  long double s5913c4f1;
  int s5913c4f2;
  ~S5913C4(); // tgen
  S5913C4(); // tgen
};
//SIG(-1 S5913C4) C1{ VBC2{ v1 Fs} VBC3{ VBC2 v2 Fi} VBC4{ m Fc Fi Fp[2]} VBC5{ v3 FC6{ m FL Fp[8]} Fi} VBC6 Fi FD Fi}


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

static void Test_S5913C4()
{
  extern Class_Descriptor cd_S5913C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,37)];
    init_test(&cd_S5913C4, buf);
    S5913C4 *dp, &lv = *(dp=new (buf) S5913C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,144), "sizeof(S5913C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5913C4)");
    check_base_class_offset(lv, (S5913C3*), ABISELECT(40,24), "S5913C4");
    check_base_class_offset(lv, (S5913C3*)(S5913C5*), ABISELECT(40,24), "S5913C4");
    check_base_class_offset(lv, (S5913C5*), ABISELECT(56,32), "S5913C4");
    check_base_class_offset(lv, (S19737C5*), ABISELECT(72,40), "S5913C4");
    check_base_class_offset(lv, (S5913C7*), ABISELECT(96,56), "S5913C4");
    check_base_class_offset(lv, (S19737C2*), ABISELECT(184,104), "S5913C4");
    check_field_offset(lv, s5913c4f0, ABISELECT(8,4), "S5913C4.s5913c4f0");
    check_field_offset(lv, s5913c4f1, ABISELECT(16,8), "S5913C4.s5913c4f1");
    check_field_offset(lv, s5913c4f2, ABISELECT(32,20), "S5913C4.s5913c4f2");
    test_class_info(&lv, &cd_S5913C4);
    dp->~S5913C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5913C4(Test_S5913C4, "S5913C4", ABISELECT(256,144));

#else // __cplusplus

extern void _ZN7S5913C4C1Ev();
extern void _ZN7S5913C4D1Ev();
Name_Map name_map_S5913C4[] = {
  NSPAIR(_ZN7S5913C4C1Ev),
  NSPAIR(_ZN7S5913C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5913C3;
extern VTBL_ENTRY _ZTI7S5913C3[];
extern  VTBL_ENTRY _ZTV7S5913C3[];
extern Class_Descriptor cd_S5913C5;
extern VTBL_ENTRY _ZTI7S5913C5[];
extern  VTBL_ENTRY _ZTV7S5913C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5913C5[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S5913C7;
extern VTBL_ENTRY _ZTI7S5913C7[];
extern  VTBL_ENTRY _ZTV7S5913C7[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
static Base_Class bases_S5913C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5913C3,    ABISELECT(40,24), //bcp->offset
    7, //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_S5913C5,    ABISELECT(56,32), //bcp->offset
    11, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C5,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5913C7,    ABISELECT(96,56), //bcp->offset
    16, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19737C2,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5913C4[];
extern void _ZN7S5913C32v5Ev();
extern void _ZN7S5913C52v6Ev();
extern void _ZN7S5913C72v7Ev();
static  VTBL_ENTRY vtc_S5913C4[] = {
  ABISELECT(184,104),
  ABISELECT(96,56),
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5913C4[0]),
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S5913C4[0]),
  (VTBL_ENTRY)&_ZN7S5913C32v5Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S5913C4[0]),
  (VTBL_ENTRY)&_ZN7S5913C52v6Ev,
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S5913C4[0]),
  (VTBL_ENTRY)&_ZN7S5913C72v7Ev,
};
extern VTBL_ENTRY _ZTV7S5913C4[];
extern void _ZN7S5913C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S5913C5__7S5913C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5913C5[0]),
  (VTBL_ENTRY)&_ZN7S5913C52v6Ev,
};
extern void _ZN7S5913C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S5913C3__7S5913C5__7S5913C4[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S5913C5[0]),
  (VTBL_ENTRY)&_ZN7S5913C32v5Ev,
};
static  VTT_ENTRY vtt_S5913C4[] = {
  {&(_ZTV7S5913C4[7]),  7,20},
  {&(_ZTV7S5913C4[10]),  10,20},
  {&(_ZTV7S5913C4[15]),  15,20},
  {&(_ZTV7S5913C4[19]),  19,20},
  {&(_tg__ZTV7S5913C5__7S5913C4[3]),  3,4},
  {&(_tg__ZTV7S5913C3__7S5913C5__7S5913C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S5913C4[];
extern  VTBL_ENTRY _ZTV7S5913C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5913C4[];
Class_Descriptor cd_S5913C4 = {  "S5913C4", // class name
  bases_S5913C4, 5,
  &(vtc_S5913C4[0]), // expected_vtbl_contents
  &(vtt_S5913C4[0]), // expected_vtt_contents
  ABISELECT(256,144), // object size
  NSPAIRA(_ZTI7S5913C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S5913C4),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5913C4),6, //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  S5913C1  : S19737C2 , S5913C3 , virtual S5913C4 {
  int s5913c1f0;
  ::S19737C5 s5913c1f1;
  virtual void  v1(); // _ZN7S5913C12v1Ev
  virtual void  v2(); // _ZN7S5913C12v2Ev
  virtual void  v3(); // _ZN7S5913C12v3Ev
  virtual void  v4(); // _ZN7S5913C12v4Ev
  ~S5913C1(); // tgen
  S5913C1(); // tgen
};
//SIG(1 S5913C1) C1{ BC2{ m FL Fp[8]} BC3{ v5 Fs} VBC4{ VBC3 VBC5{ VBC3 v6 Fi} VBC6{ m Fc Fi Fp[2]} VBC7{ v7 FC2 Fi} VBC2 Fi FD Fi} v1 v2 v3 v4 Fi FC6}


void  S5913C1 ::v1(){vfunc_called(this, "_ZN7S5913C12v1Ev");}
void  S5913C1 ::v2(){vfunc_called(this, "_ZN7S5913C12v2Ev");}
void  S5913C1 ::v3(){vfunc_called(this, "_ZN7S5913C12v3Ev");}
void  S5913C1 ::v4(){vfunc_called(this, "_ZN7S5913C12v4Ev");}
S5913C1 ::~S5913C1(){ note_dtor("S5913C1", this);} // tgen
S5913C1 ::S5913C1(){ note_ctor("S5913C1", this);} // tgen

static void Test_S5913C1()
{
  extern Class_Descriptor cd_S5913C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,54)];
    init_test(&cd_S5913C1, buf);
    S5913C1 *dp, &lv = *(dp=new (buf) S5913C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,212), "sizeof(S5913C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5913C1)");
    /*is_ambiguous_... S5913C1::S19737C2 */ AMB_check_base_class_offset(lv, (S19737C2*), ABISELECT(16,8), "S5913C1");
    /*is_ambiguous_... S5913C1::S5913C3 */ AMB_check_base_class_offset(lv, (S5913C3*), 0, "S5913C1");
    check_base_class_offset(lv, (S5913C3*)(S5913C4*), ABISELECT(168,92), "S5913C1");
    check_base_class_offset(lv, (S5913C3*)(S5913C5*), ABISELECT(168,92), "S5913C1");
    check_base_class_offset(lv, (S5913C5*)(S5913C4*), ABISELECT(184,100), "S5913C1");
    check_base_class_offset(lv, (S19737C5*)(S5913C4*), ABISELECT(200,108), "S5913C1");
    check_base_class_offset(lv, (S5913C7*)(S5913C4*), ABISELECT(224,124), "S5913C1");
    check_base_class_offset(lv, (S19737C2*)(S5913C4*), ABISELECT(312,172), "S5913C1");
    check_base_class_offset(lv, (S5913C4*), ABISELECT(128,68), "S5913C1");
    check_field_offset(lv, s5913c1f0, ABISELECT(88,48), "S5913C1.s5913c1f0");
    check_field_offset(lv, s5913c1f1, ABISELECT(96,52), "S5913C1.s5913c1f1");
    test_class_info(&lv, &cd_S5913C1);
    dp->~S5913C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5913C1(Test_S5913C1, "S5913C1", ABISELECT(384,212));

#else // __cplusplus

extern void _ZN7S5913C1C1Ev();
extern void _ZN7S5913C1D1Ev();
Name_Map name_map_S5913C1[] = {
  NSPAIR(_ZN7S5913C1C1Ev),
  NSPAIR(_ZN7S5913C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S5913C3;
extern VTBL_ENTRY _ZTI7S5913C3[];
extern  VTBL_ENTRY _ZTV7S5913C3[];
extern Class_Descriptor cd_S5913C3;
extern VTBL_ENTRY _ZTI7S5913C3[];
extern  VTBL_ENTRY _ZTV7S5913C3[];
extern Class_Descriptor cd_S5913C5;
extern VTBL_ENTRY _ZTI7S5913C5[];
extern  VTBL_ENTRY _ZTV7S5913C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5913C5[];
extern Class_Descriptor cd_S19737C5;
extern VTBL_ENTRY _ZTI8S19737C5[];
extern Class_Descriptor cd_S5913C7;
extern VTBL_ENTRY _ZTI7S5913C7[];
extern  VTBL_ENTRY _ZTV7S5913C7[];
extern Class_Descriptor cd_S19737C2;
extern VTBL_ENTRY _ZTI8S19737C2[];
extern Class_Descriptor cd_S5913C4;
extern VTBL_ENTRY _ZTI7S5913C4[];
extern  VTBL_ENTRY _ZTV7S5913C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5913C4[];
static Base_Class bases_S5913C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19737C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5913C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5913C3,    ABISELECT(168,92), //bcp->offset
    20, //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_S5913C5,    ABISELECT(184,100), //bcp->offset
    24, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C5,    ABISELECT(200,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
    7, //immediately_derived
  0, 1},
  {&cd_S5913C7,    ABISELECT(224,124), //bcp->offset
    29, //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
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19737C2,    ABISELECT(312,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, 1},
  {&cd_S5913C4,    ABISELECT(128,68), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5913C1[];
extern void _ZN7S5913C32v5Ev();
extern void _ZN7S5913C12v1Ev();
extern void _ZN7S5913C12v2Ev();
extern void _ZN7S5913C12v3Ev();
extern void _ZN7S5913C12v4Ev();
extern void _ZN7S5913C32v5Ev();
extern void _ZN7S5913C52v6Ev();
extern void _ZN7S5913C72v7Ev();
static  VTBL_ENTRY vtc_S5913C1[] = {
  ABISELECT(312,172),
  ABISELECT(224,124),
  ABISELECT(200,108),
  ABISELECT(184,100),
  ABISELECT(168,92),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S5913C1[0]),
  (VTBL_ENTRY)&_ZN7S5913C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5913C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5913C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5913C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5913C12v4Ev,
  ABISELECT(184,104),
  ABISELECT(96,56),
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S5913C1[0]),
  0,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S5913C1[0]),
  (VTBL_ENTRY)&_ZN7S5913C32v5Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI7S5913C1[0]),
  (VTBL_ENTRY)&_ZN7S5913C52v6Ev,
  0,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI7S5913C1[0]),
  (VTBL_ENTRY)&_ZN7S5913C72v7Ev,
};
extern VTBL_ENTRY _ZTV7S5913C1[];
static  VTBL_ENTRY _tg__ZTV7S5913C4__7S5913C1[] = {
  ABISELECT(184,104),
  ABISELECT(96,56),
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5913C4[0]),
};
extern void _ZN7S5913C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S5913C3__7S5913C4__7S5913C1[] = {
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S5913C4[0]),
  (VTBL_ENTRY)&_ZN7S5913C32v5Ev,
};
extern void _ZN7S5913C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S5913C5__7S5913C4__7S5913C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S5913C4[0]),
  (VTBL_ENTRY)&_ZN7S5913C52v6Ev,
};
extern void _ZN7S5913C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S5913C7__7S5913C4__7S5913C1[] = {
  0,
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S5913C4[0]),
  (VTBL_ENTRY)&_ZN7S5913C72v7Ev,
};
extern void _ZN7S5913C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S5913C5__7S5913C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5913C5[0]),
  (VTBL_ENTRY)&_ZN7S5913C52v6Ev,
};
extern void _ZN7S5913C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S5913C3__7S5913C5__7S5913C1[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S5913C5[0]),
  (VTBL_ENTRY)&_ZN7S5913C32v5Ev,
};
static  VTT_ENTRY vtt_S5913C1[] = {
  {&(_ZTV7S5913C1[8]),  8,33},
  {&(_ZTV7S5913C1[20]),  20,33},
  {&(_ZTV7S5913C1[23]),  23,33},
  {&(_ZTV7S5913C1[28]),  28,33},
  {&(_ZTV7S5913C1[32]),  32,33},
  {&(_tg__ZTV7S5913C4__7S5913C1[7]),  7,7},
  {&(_tg__ZTV7S5913C3__7S5913C4__7S5913C1[3]),  3,4},
  {&(_tg__ZTV7S5913C5__7S5913C4__7S5913C1[4]),  4,5},
  {&(_tg__ZTV7S5913C7__7S5913C4__7S5913C1[3]),  3,4},
  {&(_tg__ZTV7S5913C5__7S5913C1[3]),  3,4},
  {&(_tg__ZTV7S5913C3__7S5913C5__7S5913C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S5913C1[];
extern  VTBL_ENTRY _ZTV7S5913C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5913C1[];
Class_Descriptor cd_S5913C1 = {  "S5913C1", // class name
  bases_S5913C1, 8,
  &(vtc_S5913C1[0]), // expected_vtbl_contents
  &(vtt_S5913C1[0]), // expected_vtt_contents
  ABISELECT(384,212), // object size
  NSPAIRA(_ZTI7S5913C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5913C1),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5913C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2103C4  {
  void *s2103c4f0;
  virtual  ~S2103C4(); // _ZN7S2103C4D1Ev
  virtual void  v2(); // _ZN7S2103C42v2Ev
  virtual void  v3(); // _ZN7S2103C42v3Ev
  virtual void  v4(); // _ZN7S2103C42v4Ev
  virtual void  v5(); // _ZN7S2103C42v5Ev
  S2103C4(); // tgen
};
//SIG(-1 S2103C4) C1{ vd v1 v2 v3 v4 Fp}


 S2103C4 ::~S2103C4(){ note_dtor("S2103C4", this);}
void  S2103C4 ::v2(){vfunc_called(this, "_ZN7S2103C42v2Ev");}
void  S2103C4 ::v3(){vfunc_called(this, "_ZN7S2103C42v3Ev");}
void  S2103C4 ::v4(){vfunc_called(this, "_ZN7S2103C42v4Ev");}
void  S2103C4 ::v5(){vfunc_called(this, "_ZN7S2103C42v5Ev");}
S2103C4 ::S2103C4(){ note_ctor("S2103C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2103C4C1Ev();
extern void _ZN7S2103C4D1Ev();
Name_Map name_map_S2103C4[] = {
  NSPAIR(_ZN7S2103C4C1Ev),
  NSPAIR(_ZN7S2103C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2103C4[];
extern void _ZN7S2103C4D1Ev();
extern void _ZN7S2103C4D0Ev();
extern void _ZN7S2103C42v2Ev();
extern void _ZN7S2103C42v3Ev();
extern void _ZN7S2103C42v4Ev();
extern void _ZN7S2103C42v5Ev();
static  VTBL_ENTRY vtc_S2103C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2103C4[0]),
  (VTBL_ENTRY)&_ZN7S2103C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2103C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2103C4[];
extern  VTBL_ENTRY _ZTV7S2103C4[];
Class_Descriptor cd_S2103C4 = {  "S2103C4", // class name
  0,0,//no base classes
  &(vtc_S2103C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2103C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2103C4),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  S2103C5  {
  ::S2123C20_nt s2103c5f0;
  int s2103c5f1[2];
  char s2103c5f2;
  virtual  ~S2103C5(); // _ZN7S2103C5D1Ev
  virtual void  v6(); // _ZN7S2103C52v6Ev
  virtual void  v7(); // _ZN7S2103C52v7Ev
  virtual void  v8(); // _ZN7S2103C52v8Ev
  S2103C5(); // tgen
};
//SIG(-1 S2103C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2103C5 ::~S2103C5(){ note_dtor("S2103C5", this);}
void  S2103C5 ::v6(){vfunc_called(this, "_ZN7S2103C52v6Ev");}
void  S2103C5 ::v7(){vfunc_called(this, "_ZN7S2103C52v7Ev");}
void  S2103C5 ::v8(){vfunc_called(this, "_ZN7S2103C52v8Ev");}
S2103C5 ::S2103C5(){ note_ctor("S2103C5", this);} // tgen

static void Test_S2103C5()
{
  extern Class_Descriptor cd_S2103C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2103C5, buf);
    S2103C5 *dp, &lv = *(dp=new (buf) S2103C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2103C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2103C5)");
    check_field_offset(lv, s2103c5f0, ABISELECT(8,4), "S2103C5.s2103c5f0");
    check_field_offset(lv, s2103c5f1, ABISELECT(24,16), "S2103C5.s2103c5f1");
    check_field_offset(lv, s2103c5f2, ABISELECT(32,24), "S2103C5.s2103c5f2");
    test_class_info(&lv, &cd_S2103C5);
    dp->~S2103C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2103C5(Test_S2103C5, "S2103C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2103C5C1Ev();
extern void _ZN7S2103C5D1Ev();
Name_Map name_map_S2103C5[] = {
  NSPAIR(_ZN7S2103C5C1Ev),
  NSPAIR(_ZN7S2103C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2103C5[];
extern void _ZN7S2103C5D1Ev();
extern void _ZN7S2103C5D0Ev();
extern void _ZN7S2103C52v6Ev();
extern void _ZN7S2103C52v7Ev();
extern void _ZN7S2103C52v8Ev();
static  VTBL_ENTRY vtc_S2103C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2103C5[0]),
  (VTBL_ENTRY)&_ZN7S2103C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2103C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2103C5[];
extern  VTBL_ENTRY _ZTV7S2103C5[];
Class_Descriptor cd_S2103C5 = {  "S2103C5", // class name
  0,0,//no base classes
  &(vtc_S2103C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2103C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2103C5),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  S2103C3  : S2103C4 , S2103C5 {
  void *s2103c3f0;
  virtual  ~S2103C3(); // _ZN7S2103C3D1Ev
  virtual void  v9(); // _ZN7S2103C32v9Ev
  virtual void  v10(); // _ZN7S2103C33v10Ev
  virtual void  v11(); // _ZN7S2103C33v11Ev
  virtual void  v12(); // _ZN7S2103C33v12Ev
  S2103C3(); // tgen
};
//SIG(-1 S2103C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2103C3 ::~S2103C3(){ note_dtor("S2103C3", this);}
void  S2103C3 ::v9(){vfunc_called(this, "_ZN7S2103C32v9Ev");}
void  S2103C3 ::v10(){vfunc_called(this, "_ZN7S2103C33v10Ev");}
void  S2103C3 ::v11(){vfunc_called(this, "_ZN7S2103C33v11Ev");}
void  S2103C3 ::v12(){vfunc_called(this, "_ZN7S2103C33v12Ev");}
S2103C3 ::S2103C3(){ note_ctor("S2103C3", this);} // tgen

static void Test_S2103C3()
{
  extern Class_Descriptor cd_S2103C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2103C3, buf);
    S2103C3 *dp, &lv = *(dp=new (buf) S2103C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2103C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2103C3)");
    check_base_class_offset(lv, (S2103C4*), 0, "S2103C3");
    check_base_class_offset(lv, (S2103C5*), ABISELECT(16,8), "S2103C3");
    check_field_offset(lv, s2103c3f0, ABISELECT(56,36), "S2103C3.s2103c3f0");
    test_class_info(&lv, &cd_S2103C3);
    dp->~S2103C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2103C3(Test_S2103C3, "S2103C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2103C3C1Ev();
extern void _ZN7S2103C3D1Ev();
Name_Map name_map_S2103C3[] = {
  NSPAIR(_ZN7S2103C3C1Ev),
  NSPAIR(_ZN7S2103C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2103C4;
extern VTBL_ENTRY _ZTI7S2103C4[];
extern  VTBL_ENTRY _ZTV7S2103C4[];
extern Class_Descriptor cd_S2103C5;
extern VTBL_ENTRY _ZTI7S2103C5[];
extern  VTBL_ENTRY _ZTV7S2103C5[];
static Base_Class bases_S2103C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2103C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2103C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2103C3[];
extern void _ZN7S2103C3D1Ev();
extern void _ZN7S2103C3D0Ev();
extern void _ZN7S2103C42v2Ev();
extern void _ZN7S2103C42v3Ev();
extern void _ZN7S2103C42v4Ev();
extern void _ZN7S2103C42v5Ev();
extern void _ZN7S2103C32v9Ev();
extern void _ZN7S2103C33v10Ev();
extern void _ZN7S2103C33v11Ev();
extern void _ZN7S2103C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2103C3D1Ev,_ZThn8_N7S2103C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2103C3D0Ev,_ZThn8_N7S2103C3D0Ev)();
extern void _ZN7S2103C52v6Ev();
extern void _ZN7S2103C52v7Ev();
extern void _ZN7S2103C52v8Ev();
static  VTBL_ENTRY vtc_S2103C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2103C3[0]),
  (VTBL_ENTRY)&_ZN7S2103C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2103C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2103C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2103C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2103C3D1Ev,_ZThn8_N7S2103C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2103C3D0Ev,_ZThn8_N7S2103C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2103C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2103C3[];
extern  VTBL_ENTRY _ZTV7S2103C3[];
Class_Descriptor cd_S2103C3 = {  "S2103C3", // class name
  bases_S2103C3, 2,
  &(vtc_S2103C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2103C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2103C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2103C2  : S2103C3 {
  virtual  ~S2103C2(); // _ZN7S2103C2D1Ev
  S2103C2(); // tgen
};
//SIG(-1 S2103C2) C1{ BC2{ BC3{ vd v1 v2 v3 v4 Fp} BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v8 v9 v10 v11 Fp} vd}


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

static void Test_S2103C2()
{
  extern Class_Descriptor cd_S2103C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2103C2, buf);
    S2103C2 *dp, &lv = *(dp=new (buf) S2103C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2103C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2103C2)");
    check_base_class_offset(lv, (S2103C4*)(S2103C3*), 0, "S2103C2");
    check_base_class_offset(lv, (S2103C5*)(S2103C3*), ABISELECT(16,8), "S2103C2");
    check_base_class_offset(lv, (S2103C3*), 0, "S2103C2");
    test_class_info(&lv, &cd_S2103C2);
    dp->~S2103C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2103C2(Test_S2103C2, "S2103C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2103C2C1Ev();
extern void _ZN7S2103C2D1Ev();
Name_Map name_map_S2103C2[] = {
  NSPAIR(_ZN7S2103C2C1Ev),
  NSPAIR(_ZN7S2103C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2103C4;
extern VTBL_ENTRY _ZTI7S2103C4[];
extern  VTBL_ENTRY _ZTV7S2103C4[];
extern Class_Descriptor cd_S2103C5;
extern VTBL_ENTRY _ZTI7S2103C5[];
extern  VTBL_ENTRY _ZTV7S2103C5[];
extern Class_Descriptor cd_S2103C3;
extern VTBL_ENTRY _ZTI7S2103C3[];
extern  VTBL_ENTRY _ZTV7S2103C3[];
static Base_Class bases_S2103C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2103C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2103C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S2103C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2103C2[];
extern void _ZN7S2103C2D1Ev();
extern void _ZN7S2103C2D0Ev();
extern void _ZN7S2103C42v2Ev();
extern void _ZN7S2103C42v3Ev();
extern void _ZN7S2103C42v4Ev();
extern void _ZN7S2103C42v5Ev();
extern void _ZN7S2103C32v9Ev();
extern void _ZN7S2103C33v10Ev();
extern void _ZN7S2103C33v11Ev();
extern void _ZN7S2103C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2103C2D1Ev,_ZThn8_N7S2103C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2103C2D0Ev,_ZThn8_N7S2103C2D0Ev)();
extern void _ZN7S2103C52v6Ev();
extern void _ZN7S2103C52v7Ev();
extern void _ZN7S2103C52v8Ev();
static  VTBL_ENTRY vtc_S2103C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2103C2[0]),
  (VTBL_ENTRY)&_ZN7S2103C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2103C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2103C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2103C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2103C2D1Ev,_ZThn8_N7S2103C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2103C2D0Ev,_ZThn8_N7S2103C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2103C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2103C2[];
extern  VTBL_ENTRY _ZTV7S2103C2[];
Class_Descriptor cd_S2103C2 = {  "S2103C2", // class name
  bases_S2103C2, 3,
  &(vtc_S2103C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2103C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2103C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2103C1  : S2103C2 {
  ::S2123C20_nt s2103c1f0;
  ::S2123C20_nt s2103c1f1;
  ::S2123C20_nt s2103c1f2;
  __tsi64 s2103c1f3;
  virtual void  v1(); // _ZN7S2103C12v1Ev
  ~S2103C1(); // tgen
  S2103C1(); // tgen
};
//SIG(1 S2103C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 Fp} BC5{ vd v6 v7 v8 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v9 v10 v11 v12 Fp} vd} v1 FC6 FC6 FC6 FL}


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

static void Test_S2103C1()
{
  extern Class_Descriptor cd_S2103C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S2103C1, buf);
    S2103C1 *dp, &lv = *(dp=new (buf) S2103C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S2103C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2103C1)");
    check_base_class_offset(lv, (S2103C4*)(S2103C3*)(S2103C2*), 0, "S2103C1");
    check_base_class_offset(lv, (S2103C5*)(S2103C3*)(S2103C2*), ABISELECT(16,8), "S2103C1");
    check_base_class_offset(lv, (S2103C3*)(S2103C2*), 0, "S2103C1");
    check_base_class_offset(lv, (S2103C2*), 0, "S2103C1");
    check_field_offset(lv, s2103c1f0, ABISELECT(64,40), "S2103C1.s2103c1f0");
    check_field_offset(lv, s2103c1f1, ABISELECT(80,52), "S2103C1.s2103c1f1");
    check_field_offset(lv, s2103c1f2, ABISELECT(96,64), "S2103C1.s2103c1f2");
    check_field_offset(lv, s2103c1f3, ABISELECT(112,76), "S2103C1.s2103c1f3");
    test_class_info(&lv, &cd_S2103C1);
    dp->~S2103C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2103C1(Test_S2103C1, "S2103C1", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S2103C1C1Ev();
extern void _ZN7S2103C1D1Ev();
Name_Map name_map_S2103C1[] = {
  NSPAIR(_ZN7S2103C1C1Ev),
  NSPAIR(_ZN7S2103C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2103C4;
extern VTBL_ENTRY _ZTI7S2103C4[];
extern  VTBL_ENTRY _ZTV7S2103C4[];
extern Class_Descriptor cd_S2103C5;
extern VTBL_ENTRY _ZTI7S2103C5[];
extern  VTBL_ENTRY _ZTV7S2103C5[];
extern Class_Descriptor cd_S2103C3;
extern VTBL_ENTRY _ZTI7S2103C3[];
extern  VTBL_ENTRY _ZTV7S2103C3[];
extern Class_Descriptor cd_S2103C2;
extern VTBL_ENTRY _ZTI7S2103C2[];
extern  VTBL_ENTRY _ZTV7S2103C2[];
static Base_Class bases_S2103C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2103C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2103C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2103C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2103C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2103C1[];
extern void _ZN7S2103C1D1Ev();
extern void _ZN7S2103C1D0Ev();
extern void _ZN7S2103C42v2Ev();
extern void _ZN7S2103C42v3Ev();
extern void _ZN7S2103C42v4Ev();
extern void _ZN7S2103C42v5Ev();
extern void _ZN7S2103C32v9Ev();
extern void _ZN7S2103C33v10Ev();
extern void _ZN7S2103C33v11Ev();
extern void _ZN7S2103C33v12Ev();
extern void _ZN7S2103C12v1Ev();
extern void ABISELECT(_ZThn16_N7S2103C1D1Ev,_ZThn8_N7S2103C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2103C1D0Ev,_ZThn8_N7S2103C1D0Ev)();
extern void _ZN7S2103C52v6Ev();
extern void _ZN7S2103C52v7Ev();
extern void _ZN7S2103C52v8Ev();
static  VTBL_ENTRY vtc_S2103C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2103C1[0]),
  (VTBL_ENTRY)&_ZN7S2103C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2103C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2103C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2103C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2103C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2103C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2103C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2103C1D1Ev,_ZThn8_N7S2103C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2103C1D0Ev,_ZThn8_N7S2103C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2103C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2103C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2103C1[];
extern  VTBL_ENTRY _ZTV7S2103C1[];
Class_Descriptor cd_S2103C1 = {  "S2103C1", // class name
  bases_S2103C1, 4,
  &(vtc_S2103C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S2103C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2103C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6125C4  : virtual S2123C30 , S2123C27 , S2123C23 {
  ~S6125C4(); // tgen
  S6125C4(); // tgen
};
//SIG(-1 S6125C4) C1{ VBC2{ m} BC3{ m} BC4{ m}}


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

static void Test_S6125C4()
{
  extern Class_Descriptor cd_S6125C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6125C4, buf);
    S6125C4 *dp, &lv = *(dp=new (buf) S6125C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6125C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6125C4)");
    check_base_class_offset(lv, (S2123C30*), 0, "S6125C4");
    check_base_class_offset(lv, (S2123C27*), 0, "S6125C4");
    check_base_class_offset(lv, (S2123C23*), 0, "S6125C4");
    test_class_info(&lv, &cd_S6125C4);
    dp->~S6125C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6125C4(Test_S6125C4, "S6125C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6125C4C1Ev();
extern void _ZN7S6125C4D1Ev();
Name_Map name_map_S6125C4[] = {
  NSPAIR(_ZN7S6125C4C1Ev),
  NSPAIR(_ZN7S6125C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
static Base_Class bases_S6125C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6125C4[];
static  VTBL_ENTRY vtc_S6125C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C4[0]),
};
extern VTBL_ENTRY _ZTV7S6125C4[];
static  VTT_ENTRY vtt_S6125C4[] = {
  {&(_ZTV7S6125C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6125C4[];
extern  VTBL_ENTRY _ZTV7S6125C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C4[];
Class_Descriptor cd_S6125C4 = {  "S6125C4", // class name
  bases_S6125C4, 3,
  &(vtc_S6125C4[0]), // expected_vtbl_contents
  &(vtt_S6125C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6125C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6125C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6125C4),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  S6125C8  : S2123C30 , virtual S2123C23 , virtual S2123C27 {
  virtual void  v1(); // _ZN7S6125C82v1Ev
  ~S6125C8(); // tgen
  S6125C8(); // tgen
};
//SIG(-1 S6125C8) C1{ BC2{ m} VBC3{ m} VBC4{ m} v1}


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

static void Test_S6125C8()
{
  extern Class_Descriptor cd_S6125C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6125C8, buf);
    S6125C8 *dp, &lv = *(dp=new (buf) S6125C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6125C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6125C8)");
    check_base_class_offset(lv, (S2123C30*), 0, "S6125C8");
    check_base_class_offset(lv, (S2123C23*), 0, "S6125C8");
    check_base_class_offset(lv, (S2123C27*), 0, "S6125C8");
    test_class_info(&lv, &cd_S6125C8);
    dp->~S6125C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6125C8(Test_S6125C8, "S6125C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6125C8C1Ev();
extern void _ZN7S6125C8D1Ev();
Name_Map name_map_S6125C8[] = {
  NSPAIR(_ZN7S6125C8C1Ev),
  NSPAIR(_ZN7S6125C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
static Base_Class bases_S6125C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S6125C8[];
extern void _ZN7S6125C82v1Ev();
static  VTBL_ENTRY vtc_S6125C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C8[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
};
extern VTBL_ENTRY _ZTV7S6125C8[];
static  VTT_ENTRY vtt_S6125C8[] = {
  {&(_ZTV7S6125C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S6125C8[];
extern  VTBL_ENTRY _ZTV7S6125C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C8[];
Class_Descriptor cd_S6125C8 = {  "S6125C8", // class name
  bases_S6125C8, 3,
  &(vtc_S6125C8[0]), // expected_vtbl_contents
  &(vtt_S6125C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6125C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6125C8),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6125C8),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  S6125C7  : virtual S2123C30 , S2123C23 , S6125C8 , virtual S6125C4 , virtual S2863C11_nt {
  char s6125c7f0;
  virtual  ~S6125C7(); // _ZN7S6125C7D2Ev
  S6125C7(); // tgen
};
//SIG(-1 S6125C7) C1{ VBC2{ m} BC3{ m} BC4{ BC2 VBC3 VBC5{ m} v1} VBC6{ VBC2 BC5 BC3} VBC7{ vd m} vd Fc}


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

static void Test_S6125C7()
{
  extern Class_Descriptor cd_S6125C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6125C7, buf);
    S6125C7 *dp, &lv = *(dp=new (buf) S6125C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6125C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6125C7)");
    /*is_ambiguous_... S6125C7::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*), ABISELECT(9,5), "S6125C7");
    check_base_class_offset(lv, (S2123C30*)(S6125C4*), ABISELECT(9,5), "S6125C7");
    /*is_ambiguous_... S6125C7::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*), 0, "S6125C7");
    check_base_class_offset(lv, (S2123C30*)(S6125C8*), 0, "S6125C7");
    check_base_class_offset(lv, (S2123C23*)(S6125C8*), ABISELECT(9,5), "S6125C7");
    check_base_class_offset(lv, (S2123C27*)(S6125C8*), 0, "S6125C7");
    check_base_class_offset(lv, (S6125C8*), 0, "S6125C7");
    check_base_class_offset(lv, (S2123C27*)(S6125C4*), ABISELECT(16,8), "S6125C7");
    check_base_class_offset(lv, (S2123C23*)(S6125C4*), ABISELECT(16,8), "S6125C7");
    check_base_class_offset(lv, (S6125C4*), ABISELECT(16,8), "S6125C7");
    check_base_class_offset(lv, (S2863C11_nt*), ABISELECT(24,12), "S6125C7");
    check_field_offset(lv, s6125c7f0, ABISELECT(8,4), "S6125C7.s6125c7f0");
    test_class_info(&lv, &cd_S6125C7);
    dp->~S6125C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6125C7(Test_S6125C7, "S6125C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6125C7C1Ev();
extern void _ZN7S6125C7D2Ev();
Name_Map name_map_S6125C7[] = {
  NSPAIR(_ZN7S6125C7C1Ev),
  NSPAIR(_ZN7S6125C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S6125C8;
extern VTBL_ENTRY _ZTI7S6125C8[];
extern  VTBL_ENTRY _ZTV7S6125C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C8[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S6125C4;
extern VTBL_ENTRY _ZTI7S6125C4[];
extern  VTBL_ENTRY _ZTV7S6125C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C4[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
static Base_Class bases_S6125C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6125C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C27,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6125C4,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2863C11_nt,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6125C7[];
extern void _ZN7S6125C82v1Ev();
extern void _ZN7S6125C7D1Ev();
extern void _ZN7S6125C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S6125C7D1Ev,_ZThn12_N7S6125C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S6125C7D0Ev,_ZThn12_N7S6125C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6125C7[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
  (VTBL_ENTRY)&_ZN7S6125C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6125C7D0Ev,
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S6125C7[];
extern void _ZN7S6125C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6125C8__7S6125C7[] = {
  0,
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C8[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6125C4__7S6125C7[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C4[0]),
};
static  VTT_ENTRY vtt_S6125C7[] = {
  {&(_ZTV7S6125C7[7]),  7,18},
  {&(_tg__ZTV7S6125C8__7S6125C7[4]),  4,5},
  {&(_ZTV7S6125C7[13]),  13,18},
  {&(_ZTV7S6125C7[16]),  16,18},
  {&(_tg__ZTV7S6125C4__7S6125C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6125C7[];
extern  VTBL_ENTRY _ZTV7S6125C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C7[];
static VTBL_ENTRY alt_thunk_names140[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6125C7D0Ev,_ZThn12_N7S6125C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6125C7D1Ev,_ZThn12_N7S6125C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6125C7 = {  "S6125C7", // class name
  bases_S6125C7, 10,
  &(vtc_S6125C7[0]), // expected_vtbl_contents
  &(vtt_S6125C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6125C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6125C7),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6125C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names140,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6125C3  : virtual S6125C4 , S6125C7 {
  ::S2863C11_nt s6125c3f0;
  virtual  ~S6125C3(); // _ZN7S6125C3D2Ev
  S6125C3(); // tgen
};
//SIG(-1 S6125C3) C1{ VBC2{ VBC3{ m} BC4{ m} BC5{ m}} BC6{ VBC3 BC5 BC7{ BC3 VBC5 VBC4 v1} VBC2 VBC8{ vd m} vd Fc} vd FC8}


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

static void Test_S6125C3()
{
  extern Class_Descriptor cd_S6125C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6125C3, buf);
    S6125C3 *dp, &lv = *(dp=new (buf) S6125C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6125C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6125C3)");
    check_base_class_offset(lv, (S2123C30*)(S6125C4*), ABISELECT(32,16), "S6125C3");
    /*is_ambiguous_... S6125C7::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S6125C7*), ABISELECT(32,16), "S6125C3");
    check_base_class_offset(lv, (S2123C27*)(S6125C4*), ABISELECT(24,12), "S6125C3");
    check_base_class_offset(lv, (S2123C23*)(S6125C4*), ABISELECT(24,12), "S6125C3");
    check_base_class_offset(lv, (S6125C4*), ABISELECT(24,12), "S6125C3");
    check_base_class_offset(lv, (S6125C4*)(S6125C7*), ABISELECT(24,12), "S6125C3");
    /*is_ambiguous_... S6125C7::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S6125C7*), 0, "S6125C3");
    check_base_class_offset(lv, (S2123C30*)(S6125C8*)(S6125C7*), 0, "S6125C3");
    check_base_class_offset(lv, (S2123C23*)(S6125C8*)(S6125C7*), ABISELECT(32,16), "S6125C3");
    check_base_class_offset(lv, (S2123C27*)(S6125C8*)(S6125C7*), 0, "S6125C3");
    check_base_class_offset(lv, (S6125C8*)(S6125C7*), 0, "S6125C3");
    check_base_class_offset(lv, (S2863C11_nt*)(S6125C7*), ABISELECT(32,16), "S6125C3");
    check_base_class_offset(lv, (S6125C7*), 0, "S6125C3");
    check_field_offset(lv, s6125c3f0, ABISELECT(16,8), "S6125C3.s6125c3f0");
    test_class_info(&lv, &cd_S6125C3);
    dp->~S6125C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6125C3(Test_S6125C3, "S6125C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6125C3C1Ev();
extern void _ZN7S6125C3D2Ev();
Name_Map name_map_S6125C3[] = {
  NSPAIR(_ZN7S6125C3C1Ev),
  NSPAIR(_ZN7S6125C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S6125C4;
extern VTBL_ENTRY _ZTI7S6125C4[];
extern  VTBL_ENTRY _ZTV7S6125C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C4[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S6125C8;
extern VTBL_ENTRY _ZTI7S6125C8[];
extern  VTBL_ENTRY _ZTV7S6125C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C8[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S6125C7;
extern VTBL_ENTRY _ZTI7S6125C7[];
extern  VTBL_ENTRY _ZTV7S6125C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C7[];
static Base_Class bases_S6125C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    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, 1},
  {&cd_S2123C27,    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_S2123C23,    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_S6125C4,    ABISELECT(24,12), //bcp->offset
    10, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    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
    8, //immediately_derived
  0, 1},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6125C8,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2863C11_nt,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6125C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6125C3[];
extern void _ZN7S6125C82v1Ev();
extern void _ZN7S6125C3D1Ev();
extern void _ZN7S6125C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S6125C3D1Ev,_ZTv0_n12_N7S6125C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S6125C3D1Ev,_ZThn16_N7S6125C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6125C3D0Ev,_ZTv0_n12_N7S6125C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S6125C3D0Ev,_ZThn16_N7S6125C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6125C3[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(32,16),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C3[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
  (VTBL_ENTRY)&_ZN7S6125C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6125C3D0Ev,
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6125C3[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6125C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C3D1Ev,_ZTv0_n12_N7S6125C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C3D0Ev,_ZTv0_n12_N7S6125C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S6125C3[];
extern void _ZN7S6125C82v1Ev();
extern void _ZN7S6125C7D1Ev();
extern void _ZN7S6125C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6125C7__7S6125C3[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(32,16),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
  (VTBL_ENTRY)&_ZN7S6125C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6125C7D0Ev,
};
extern void _ZN7S6125C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6125C87S6125C7__7S6125C3[] = {
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C8[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6125C4__7S6125C7__7S6125C3[] = {
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S6125C7D1Ev,_ZThn16_N7S6125C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S6125C7D0Ev,_ZThn16_N7S6125C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S6125C7__7S6125C3[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6125C4__7S6125C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C4[0]),
};
static  VTT_ENTRY vtt_S6125C3[] = {
  {&(_ZTV7S6125C3[7]),  7,18},
  {&(_tg__ZTV7S6125C7__7S6125C3[7]),  7,10},
  {&(_tg__ZTV7S6125C87S6125C7__7S6125C3[4]),  4,5},
  {&(_tg__ZTV7S6125C4__7S6125C7__7S6125C3[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S6125C7__7S6125C3[3]),  3,5},
  {&(_ZTV7S6125C3[13]),  13,18},
  {&(_ZTV7S6125C3[16]),  16,18},
  {&(_tg__ZTV7S6125C4__7S6125C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6125C3[];
extern  VTBL_ENTRY _ZTV7S6125C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C3[];
static VTBL_ENTRY alt_thunk_names141[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6125C7D0Ev,_ZThn16_N7S6125C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6125C7D1Ev,_ZThn16_N7S6125C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C3D0Ev,_ZTv0_n12_N7S6125C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6125C3D0Ev,_ZThn16_N7S6125C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C3D1Ev,_ZTv0_n12_N7S6125C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6125C3D1Ev,_ZThn16_N7S6125C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6125C3 = {  "S6125C3", // class name
  bases_S6125C3, 11,
  &(vtc_S6125C3[0]), // expected_vtbl_contents
  &(vtt_S6125C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6125C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6125C3),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6125C3),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names141,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6125C1  : S2123C30 , S6125C3 , S21777C11_nt , S2123C8_nt , S2123C27 {
  ~S6125C1(); // tgen
  S6125C1(); // tgen
};
//SIG(1 S6125C1) C1{ BC2{ m} BC3{ VBC4{ VBC2 BC5{ m} BC6{ m}} BC7{ VBC2 BC6 BC8{ BC2 VBC6 VBC5 v1} VBC4 VBC9{ vd m} vd Fc} vd FC9} BC10{ m Fp} BC11{ m} BC5}


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

static void Test_S6125C1()
{
  extern Class_Descriptor cd_S6125C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6125C1, buf);
    S6125C1 *dp, &lv = *(dp=new (buf) S6125C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6125C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6125C1)");
    /*is_ambiguous_... S6125C1::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*), ABISELECT(24,12), "S6125C1");
    check_base_class_offset(lv, (S2123C30*)(S6125C4*), ABISELECT(40,20), "S6125C1");
    /*is_ambiguous_... S6125C7::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S6125C7*)(S6125C3*), ABISELECT(40,20), "S6125C1");
    check_base_class_offset(lv, (S2123C27*)(S6125C4*), ABISELECT(32,16), "S6125C1");
    check_base_class_offset(lv, (S2123C23*)(S6125C4*), ABISELECT(32,16), "S6125C1");
    check_base_class_offset(lv, (S6125C4*)(S6125C3*), ABISELECT(32,16), "S6125C1");
    check_base_class_offset(lv, (S6125C4*)(S6125C7*)(S6125C3*), ABISELECT(32,16), "S6125C1");
    /*is_ambiguous_... S6125C7::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S6125C7*)(S6125C3*), 0, "S6125C1");
    check_base_class_offset(lv, (S2123C30*)(S6125C8*)(S6125C7*)(S6125C3*), 0, "S6125C1");
    check_base_class_offset(lv, (S2123C23*)(S6125C8*)(S6125C7*)(S6125C3*), ABISELECT(40,20), "S6125C1");
    check_base_class_offset(lv, (S2123C27*)(S6125C8*)(S6125C7*)(S6125C3*), ABISELECT(40,20), "S6125C1");
    check_base_class_offset(lv, (S6125C8*)(S6125C7*)(S6125C3*), 0, "S6125C1");
    check_base_class_offset(lv, (S2863C11_nt*)(S6125C7*)(S6125C3*), ABISELECT(40,20), "S6125C1");
    check_base_class_offset(lv, (S6125C7*)(S6125C3*), 0, "S6125C1");
    check_base_class_offset(lv, (S6125C3*), 0, "S6125C1");
    check_base_class_offset(lv, (S21777C11_nt*), ABISELECT(24,12), "S6125C1");
    check_base_class_offset(lv, (S2123C8_nt*), 0, "S6125C1");
    /*is_ambiguous_... S6125C1::S2123C27 */ AMB_check_base_class_offset(lv, (S2123C27*), 0, "S6125C1");
    test_class_info(&lv, &cd_S6125C1);
    dp->~S6125C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6125C1(Test_S6125C1, "S6125C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6125C1C1Ev();
extern void _ZN7S6125C1D1Ev();
Name_Map name_map_S6125C1[] = {
  NSPAIR(_ZN7S6125C1C1Ev),
  NSPAIR(_ZN7S6125C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S6125C4;
extern VTBL_ENTRY _ZTI7S6125C4[];
extern  VTBL_ENTRY _ZTV7S6125C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C4[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S6125C8;
extern VTBL_ENTRY _ZTI7S6125C8[];
extern  VTBL_ENTRY _ZTV7S6125C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C8[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S6125C7;
extern VTBL_ENTRY _ZTI7S6125C7[];
extern  VTBL_ENTRY _ZTV7S6125C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C7[];
extern Class_Descriptor cd_S6125C3;
extern VTBL_ENTRY _ZTI7S6125C3[];
extern  VTBL_ENTRY _ZTV7S6125C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C3[];
extern Class_Descriptor cd_S21777C11_nt;
extern VTBL_ENTRY _ZTI12S21777C11_nt[];
extern Class_Descriptor cd_S2123C8_nt;
extern VTBL_ENTRY _ZTI10S2123C8_nt[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
static Base_Class bases_S6125C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    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_S2123C30,    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
    4, //immediately_derived
  0, 1},
  {&cd_S2123C27,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2123C23,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6125C4,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    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
    9, //immediately_derived
  0, 1},
  {&cd_S2123C27,    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
    9, //immediately_derived
  0, 1},
  {&cd_S6125C8,    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
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2863C11_nt,    ABISELECT(40,20), //bcp->offset
    13, //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
    11, //immediately_derived
  0, 1},
  {&cd_S6125C7,    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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6125C3,    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_S21777C11_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
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6125C1[];
extern void _ZN7S6125C82v1Ev();
extern void _ZN7S6125C1D1Ev();
extern void _ZN7S6125C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S6125C1D1Ev,_ZTv0_n12_N7S6125C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S6125C1D1Ev,_ZThn20_N7S6125C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6125C1D0Ev,_ZTv0_n12_N7S6125C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S6125C1D0Ev,_ZThn20_N7S6125C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6125C1[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C1[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
  (VTBL_ENTRY)&_ZN7S6125C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6125C1D0Ev,
  ABISELECT(8,4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6125C1[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6125C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C1D1Ev,_ZTv0_n12_N7S6125C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C1D0Ev,_ZTv0_n12_N7S6125C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6125C1[];
extern void _ZN7S6125C82v1Ev();
extern void _ZN7S6125C3D1Ev();
extern void _ZN7S6125C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6125C3__7S6125C1[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C3[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
  (VTBL_ENTRY)&_ZN7S6125C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6125C3D0Ev,
};
extern void _ZN7S6125C82v1Ev();
extern void _ZN7S6125C7D1Ev();
extern void _ZN7S6125C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6125C77S6125C3__7S6125C1[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
  (VTBL_ENTRY)&_ZN7S6125C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6125C7D0Ev,
};
extern void _ZN7S6125C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6125C87S6125C77S6125C3__7S6125C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C8[0]),
  (VTBL_ENTRY)&_ZN7S6125C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6125C4__7S6125C77S6125C3__7S6125C1[] = {
  ABISELECT(8,4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S6125C7D1Ev,_ZThn20_N7S6125C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S6125C7D0Ev,_ZThn20_N7S6125C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S6125C77S6125C3__7S6125C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6125C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6125C4__7S6125C3__7S6125C1[] = {
  ABISELECT(8,4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6125C3[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S6125C3D1Ev,_ZTv0_n12_N7S6125C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S6125C3D1Ev,_ZThn20_N7S6125C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6125C3D0Ev,_ZTv0_n12_N7S6125C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S6125C3D0Ev,_ZThn20_N7S6125C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__7S6125C3__7S6125C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6125C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C3D1Ev,_ZTv0_n12_N7S6125C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6125C3D0Ev,_ZTv0_n12_N7S6125C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6125C4__7S6125C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6125C4[0]),
};
static  VTT_ENTRY vtt_S6125C1[] = {
  {&(_ZTV7S6125C1[7]),  7,18},
  {&(_tg__ZTV7S6125C3__7S6125C1[7]),  7,10},
  {&(_tg__ZTV7S6125C77S6125C3__7S6125C1[7]),  7,10},
  {&(_tg__ZTV7S6125C87S6125C77S6125C3__7S6125C1[4]),  4,5},
  {&(_tg__ZTV7S6125C4__7S6125C77S6125C3__7S6125C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S6125C77S6125C3__7S6125C1[3]),  3,5},
  {&(_tg__ZTV7S6125C4__7S6125C3__7S6125C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__7S6125C3__7S6125C1[3]),  3,5},
  {&(_ZTV7S6125C1[13]),  13,18},
  {&(_ZTV7S6125C1[16]),  16,18},
  {&(_tg__ZTV7S6125C4__7S6125C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6125C1[];
extern  VTBL_ENTRY _ZTV7S6125C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6125C1[];
static VTBL_ENTRY alt_thunk_names142[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C3D0Ev,_ZTv0_n12_N7S6125C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S6125C3D0Ev,_ZThn20_N7S6125C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C3D1Ev,_ZTv0_n12_N7S6125C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S6125C3D1Ev,_ZThn20_N7S6125C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C7D0Ev,_ZTv0_n12_N7S6125C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S6125C7D0Ev,_ZThn20_N7S6125C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C7D1Ev,_ZTv0_n12_N7S6125C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S6125C7D1Ev,_ZThn20_N7S6125C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C1D0Ev,_ZTv0_n12_N7S6125C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S6125C1D0Ev,_ZThn20_N7S6125C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6125C1D1Ev,_ZTv0_n12_N7S6125C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S6125C1D1Ev,_ZThn20_N7S6125C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6125C1 = {  "S6125C1", // class name
  bases_S6125C1, 16,
  &(vtc_S6125C1[0]), // expected_vtbl_contents
  &(vtt_S6125C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6125C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6125C1),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6125C1),11, //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  S19236C2  : S2123C30 {
  char s19236c2f0:5;
  virtual  ~S19236C2(); // _ZN8S19236C2D1Ev
  S19236C2(); // tgen
};
//SIG(-1 S19236C2) C1{ BC2{ m} vd Fc:5}


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

static void Test_S19236C2()
{
  extern Class_Descriptor cd_S19236C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19236C2, buf);
    S19236C2 *dp, &lv = *(dp=new (buf) S19236C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19236C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19236C2)");
    check_base_class_offset(lv, (S2123C30*), 0, "S19236C2");
    set_bf_and_test(lv, s19236c2f0, ABISELECT(8,4), 0, 5, 1, "S19236C2");
    set_bf_and_test(lv, s19236c2f0, ABISELECT(8,4), 0, 5, hide_sll(1LL<<4), "S19236C2");
    test_class_info(&lv, &cd_S19236C2);
    dp->~S19236C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19236C2(Test_S19236C2, "S19236C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19236C2C1Ev();
extern void _ZN8S19236C2D1Ev();
Name_Map name_map_S19236C2[] = {
  NSPAIR(_ZN8S19236C2C1Ev),
  NSPAIR(_ZN8S19236C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
static Base_Class bases_S19236C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19236C2[];
extern void _ZN8S19236C2D1Ev();
extern void _ZN8S19236C2D0Ev();
static  VTBL_ENTRY vtc_S19236C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C2[0]),
  (VTBL_ENTRY)&_ZN8S19236C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19236C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19236C2[];
extern  VTBL_ENTRY _ZTV8S19236C2[];
Class_Descriptor cd_S19236C2 = {  "S19236C2", // class name
  bases_S19236C2, 1,
  &(vtc_S19236C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19236C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19236C2),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  S19236C5  : virtual S2123C30 , S2123C27 , S2123C23 {
  ~S19236C5(); // tgen
  S19236C5(); // tgen
};
//SIG(-1 S19236C5) C1{ VBC2{ m} BC3{ m} BC4{ m}}


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

static void Test_S19236C5()
{
  extern Class_Descriptor cd_S19236C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19236C5, buf);
    S19236C5 *dp, &lv = *(dp=new (buf) S19236C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19236C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19236C5)");
    check_base_class_offset(lv, (S2123C30*), 0, "S19236C5");
    check_base_class_offset(lv, (S2123C27*), 0, "S19236C5");
    check_base_class_offset(lv, (S2123C23*), 0, "S19236C5");
    test_class_info(&lv, &cd_S19236C5);
    dp->~S19236C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19236C5(Test_S19236C5, "S19236C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19236C5C1Ev();
extern void _ZN8S19236C5D1Ev();
Name_Map name_map_S19236C5[] = {
  NSPAIR(_ZN8S19236C5C1Ev),
  NSPAIR(_ZN8S19236C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
static Base_Class bases_S19236C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19236C5[];
static  VTBL_ENTRY vtc_S19236C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C5[0]),
};
extern VTBL_ENTRY _ZTV8S19236C5[];
static  VTT_ENTRY vtt_S19236C5[] = {
  {&(_ZTV8S19236C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19236C5[];
extern  VTBL_ENTRY _ZTV8S19236C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C5[];
Class_Descriptor cd_S19236C5 = {  "S19236C5", // class name
  bases_S19236C5, 3,
  &(vtc_S19236C5[0]), // expected_vtbl_contents
  &(vtt_S19236C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19236C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19236C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19236C5),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  S19236C9  : S2123C30 , virtual S2123C23 , virtual S2123C27 {
  virtual void  v1(); // _ZN8S19236C92v1Ev
  ~S19236C9(); // tgen
  S19236C9(); // tgen
};
//SIG(-1 S19236C9) C1{ BC2{ m} VBC3{ m} VBC4{ m} v1}


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

static void Test_S19236C9()
{
  extern Class_Descriptor cd_S19236C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19236C9, buf);
    S19236C9 *dp, &lv = *(dp=new (buf) S19236C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19236C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19236C9)");
    check_base_class_offset(lv, (S2123C30*), 0, "S19236C9");
    check_base_class_offset(lv, (S2123C23*), 0, "S19236C9");
    check_base_class_offset(lv, (S2123C27*), 0, "S19236C9");
    test_class_info(&lv, &cd_S19236C9);
    dp->~S19236C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19236C9(Test_S19236C9, "S19236C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19236C9C1Ev();
extern void _ZN8S19236C9D1Ev();
Name_Map name_map_S19236C9[] = {
  NSPAIR(_ZN8S19236C9C1Ev),
  NSPAIR(_ZN8S19236C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
static Base_Class bases_S19236C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19236C9[];
extern void _ZN8S19236C92v1Ev();
static  VTBL_ENTRY vtc_S19236C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C9[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S19236C9[];
static  VTT_ENTRY vtt_S19236C9[] = {
  {&(_ZTV8S19236C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19236C9[];
extern  VTBL_ENTRY _ZTV8S19236C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C9[];
Class_Descriptor cd_S19236C9 = {  "S19236C9", // class name
  bases_S19236C9, 3,
  &(vtc_S19236C9[0]), // expected_vtbl_contents
  &(vtt_S19236C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19236C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19236C9),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19236C9),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  S19236C8  : virtual S2123C30 , S2123C23 , S19236C9 , virtual S19236C5 , virtual S2863C11_nt {
  char s19236c8f0;
  virtual  ~S19236C8(); // _ZN8S19236C8D2Ev
  S19236C8(); // tgen
};
//SIG(-1 S19236C8) C1{ VBC2{ m} BC3{ m} BC4{ BC2 VBC3 VBC5{ m} v1} VBC6{ VBC2 BC5 BC3} VBC7{ vd m} vd Fc}


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

static void Test_S19236C8()
{
  extern Class_Descriptor cd_S19236C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19236C8, buf);
    S19236C8 *dp, &lv = *(dp=new (buf) S19236C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19236C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19236C8)");
    /*is_ambiguous_... S19236C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*), ABISELECT(9,5), "S19236C8");
    check_base_class_offset(lv, (S2123C30*)(S19236C5*), ABISELECT(9,5), "S19236C8");
    /*is_ambiguous_... S19236C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*), 0, "S19236C8");
    check_base_class_offset(lv, (S2123C30*)(S19236C9*), 0, "S19236C8");
    check_base_class_offset(lv, (S2123C23*)(S19236C9*), ABISELECT(9,5), "S19236C8");
    check_base_class_offset(lv, (S2123C27*)(S19236C9*), 0, "S19236C8");
    check_base_class_offset(lv, (S19236C9*), 0, "S19236C8");
    check_base_class_offset(lv, (S2123C27*)(S19236C5*), ABISELECT(16,8), "S19236C8");
    check_base_class_offset(lv, (S2123C23*)(S19236C5*), ABISELECT(16,8), "S19236C8");
    check_base_class_offset(lv, (S19236C5*), ABISELECT(16,8), "S19236C8");
    check_base_class_offset(lv, (S2863C11_nt*), ABISELECT(24,12), "S19236C8");
    check_field_offset(lv, s19236c8f0, ABISELECT(8,4), "S19236C8.s19236c8f0");
    test_class_info(&lv, &cd_S19236C8);
    dp->~S19236C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19236C8(Test_S19236C8, "S19236C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19236C8C1Ev();
extern void _ZN8S19236C8D2Ev();
Name_Map name_map_S19236C8[] = {
  NSPAIR(_ZN8S19236C8C1Ev),
  NSPAIR(_ZN8S19236C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S19236C9;
extern VTBL_ENTRY _ZTI8S19236C9[];
extern  VTBL_ENTRY _ZTV8S19236C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C9[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S19236C5;
extern VTBL_ENTRY _ZTI8S19236C5[];
extern  VTBL_ENTRY _ZTV8S19236C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C5[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
static Base_Class bases_S19236C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19236C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C27,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19236C5,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2863C11_nt,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19236C8[];
extern void _ZN8S19236C92v1Ev();
extern void _ZN8S19236C8D1Ev();
extern void _ZN8S19236C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19236C8D1Ev,_ZThn12_N8S19236C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S19236C8D0Ev,_ZThn12_N8S19236C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19236C8[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
  (VTBL_ENTRY)&_ZN8S19236C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19236C8D0Ev,
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19236C8[];
extern void _ZN8S19236C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19236C9__8S19236C8[] = {
  0,
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C9[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19236C5__8S19236C8[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C5[0]),
};
static  VTT_ENTRY vtt_S19236C8[] = {
  {&(_ZTV8S19236C8[7]),  7,18},
  {&(_tg__ZTV8S19236C9__8S19236C8[4]),  4,5},
  {&(_ZTV8S19236C8[13]),  13,18},
  {&(_ZTV8S19236C8[16]),  16,18},
  {&(_tg__ZTV8S19236C5__8S19236C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19236C8[];
extern  VTBL_ENTRY _ZTV8S19236C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C8[];
static VTBL_ENTRY alt_thunk_names143[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19236C8D0Ev,_ZThn12_N8S19236C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19236C8D1Ev,_ZThn12_N8S19236C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19236C8 = {  "S19236C8", // class name
  bases_S19236C8, 10,
  &(vtc_S19236C8[0]), // expected_vtbl_contents
  &(vtt_S19236C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19236C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19236C8),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19236C8),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names143,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19236C4  : virtual S19236C5 , S19236C8 {
  ::S2863C11_nt s19236c4f0;
  virtual  ~S19236C4(); // _ZN8S19236C4D2Ev
  S19236C4(); // tgen
};
//SIG(-1 S19236C4) C1{ VBC2{ VBC3{ m} BC4{ m} BC5{ m}} BC6{ VBC3 BC5 BC7{ BC3 VBC5 VBC4 v1} VBC2 VBC8{ vd m} vd Fc} vd FC8}


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

static void Test_S19236C4()
{
  extern Class_Descriptor cd_S19236C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19236C4, buf);
    S19236C4 *dp, &lv = *(dp=new (buf) S19236C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19236C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19236C4)");
    check_base_class_offset(lv, (S2123C30*)(S19236C5*), ABISELECT(32,16), "S19236C4");
    /*is_ambiguous_... S19236C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S19236C8*), ABISELECT(32,16), "S19236C4");
    check_base_class_offset(lv, (S2123C27*)(S19236C5*), ABISELECT(24,12), "S19236C4");
    check_base_class_offset(lv, (S2123C23*)(S19236C5*), ABISELECT(24,12), "S19236C4");
    check_base_class_offset(lv, (S19236C5*), ABISELECT(24,12), "S19236C4");
    check_base_class_offset(lv, (S19236C5*)(S19236C8*), ABISELECT(24,12), "S19236C4");
    /*is_ambiguous_... S19236C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S19236C8*), 0, "S19236C4");
    check_base_class_offset(lv, (S2123C30*)(S19236C9*)(S19236C8*), 0, "S19236C4");
    check_base_class_offset(lv, (S2123C23*)(S19236C9*)(S19236C8*), ABISELECT(32,16), "S19236C4");
    check_base_class_offset(lv, (S2123C27*)(S19236C9*)(S19236C8*), 0, "S19236C4");
    check_base_class_offset(lv, (S19236C9*)(S19236C8*), 0, "S19236C4");
    check_base_class_offset(lv, (S2863C11_nt*)(S19236C8*), ABISELECT(32,16), "S19236C4");
    check_base_class_offset(lv, (S19236C8*), 0, "S19236C4");
    check_field_offset(lv, s19236c4f0, ABISELECT(16,8), "S19236C4.s19236c4f0");
    test_class_info(&lv, &cd_S19236C4);
    dp->~S19236C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19236C4(Test_S19236C4, "S19236C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19236C4C1Ev();
extern void _ZN8S19236C4D2Ev();
Name_Map name_map_S19236C4[] = {
  NSPAIR(_ZN8S19236C4C1Ev),
  NSPAIR(_ZN8S19236C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S19236C5;
extern VTBL_ENTRY _ZTI8S19236C5[];
extern  VTBL_ENTRY _ZTV8S19236C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C5[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S19236C9;
extern VTBL_ENTRY _ZTI8S19236C9[];
extern  VTBL_ENTRY _ZTV8S19236C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C9[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S19236C8;
extern VTBL_ENTRY _ZTI8S19236C8[];
extern  VTBL_ENTRY _ZTV8S19236C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C8[];
static Base_Class bases_S19236C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    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, 1},
  {&cd_S2123C27,    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_S2123C23,    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_S19236C5,    ABISELECT(24,12), //bcp->offset
    10, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    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
    8, //immediately_derived
  0, 1},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19236C9,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2863C11_nt,    ABISELECT(32,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19236C8,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19236C4[];
extern void _ZN8S19236C92v1Ev();
extern void _ZN8S19236C4D1Ev();
extern void _ZN8S19236C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19236C4D1Ev,_ZTv0_n12_N8S19236C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19236C4D1Ev,_ZThn16_N8S19236C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19236C4D0Ev,_ZTv0_n12_N8S19236C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19236C4D0Ev,_ZThn16_N8S19236C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19236C4[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(32,16),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C4[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
  (VTBL_ENTRY)&_ZN8S19236C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19236C4D0Ev,
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19236C4[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19236C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C4D1Ev,_ZTv0_n12_N8S19236C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C4D0Ev,_ZTv0_n12_N8S19236C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19236C4[];
extern void _ZN8S19236C92v1Ev();
extern void _ZN8S19236C8D1Ev();
extern void _ZN8S19236C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19236C8__8S19236C4[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(32,16),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
  (VTBL_ENTRY)&_ZN8S19236C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19236C8D0Ev,
};
extern void _ZN8S19236C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19236C98S19236C8__8S19236C4[] = {
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C9[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19236C5__8S19236C8__8S19236C4[] = {
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19236C8D1Ev,_ZThn16_N8S19236C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19236C8D0Ev,_ZThn16_N8S19236C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S19236C8__8S19236C4[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19236C5__8S19236C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C5[0]),
};
static  VTT_ENTRY vtt_S19236C4[] = {
  {&(_ZTV8S19236C4[7]),  7,18},
  {&(_tg__ZTV8S19236C8__8S19236C4[7]),  7,10},
  {&(_tg__ZTV8S19236C98S19236C8__8S19236C4[4]),  4,5},
  {&(_tg__ZTV8S19236C5__8S19236C8__8S19236C4[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S19236C8__8S19236C4[3]),  3,5},
  {&(_ZTV8S19236C4[13]),  13,18},
  {&(_ZTV8S19236C4[16]),  16,18},
  {&(_tg__ZTV8S19236C5__8S19236C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19236C4[];
extern  VTBL_ENTRY _ZTV8S19236C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C4[];
static VTBL_ENTRY alt_thunk_names144[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19236C8D0Ev,_ZThn16_N8S19236C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19236C8D1Ev,_ZThn16_N8S19236C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C4D0Ev,_ZTv0_n12_N8S19236C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19236C4D0Ev,_ZThn16_N8S19236C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C4D1Ev,_ZTv0_n12_N8S19236C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19236C4D1Ev,_ZThn16_N8S19236C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19236C4 = {  "S19236C4", // class name
  bases_S19236C4, 11,
  &(vtc_S19236C4[0]), // expected_vtbl_contents
  &(vtt_S19236C4[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19236C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19236C4),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19236C4),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names144,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19236C1  : virtual S19236C2 , S19236C4 , S2863C11_nt {
  ~S19236C1(); // tgen
  S19236C1(); // tgen
};
//SIG(1 S19236C1) C1{ VBC2{ BC3{ m} vd Fc:5} BC4{ VBC5{ VBC3 BC6{ m} BC7{ m}} BC8{ VBC3 BC7 BC9{ BC3 VBC7 VBC6 v1} VBC5 VBC10{ vd m} vd Fc} vd FC10} BC10}


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

static void Test_S19236C1()
{
  extern Class_Descriptor cd_S19236C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19236C1, buf);
    S19236C1 *dp, &lv = *(dp=new (buf) S19236C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19236C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19236C1)");
    check_base_class_offset(lv, (S2123C30*)(S19236C2*), ABISELECT(32,16), "S19236C1");
    check_base_class_offset(lv, (S19236C2*), ABISELECT(32,16), "S19236C1");
    check_base_class_offset(lv, (S2123C30*)(S19236C5*), ABISELECT(56,28), "S19236C1");
    /*is_ambiguous_... S19236C8::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*)(S19236C8*)(S19236C4*), ABISELECT(56,28), "S19236C1");
    check_base_class_offset(lv, (S2123C27*)(S19236C5*), ABISELECT(48,24), "S19236C1");
    check_base_class_offset(lv, (S2123C23*)(S19236C5*), ABISELECT(48,24), "S19236C1");
    check_base_class_offset(lv, (S19236C5*)(S19236C4*), ABISELECT(48,24), "S19236C1");
    check_base_class_offset(lv, (S19236C5*)(S19236C8*)(S19236C4*), ABISELECT(48,24), "S19236C1");
    /*is_ambiguous_... S19236C8::S2123C23 */ AMB_check_base_class_offset(lv, (S2123C23*)(S19236C8*)(S19236C4*), 0, "S19236C1");
    check_base_class_offset(lv, (S2123C30*)(S19236C9*)(S19236C8*)(S19236C4*), 0, "S19236C1");
    check_base_class_offset(lv, (S2123C23*)(S19236C9*)(S19236C8*)(S19236C4*), ABISELECT(56,28), "S19236C1");
    check_base_class_offset(lv, (S2123C27*)(S19236C9*)(S19236C8*)(S19236C4*), 0, "S19236C1");
    check_base_class_offset(lv, (S19236C9*)(S19236C8*)(S19236C4*), 0, "S19236C1");
    check_base_class_offset(lv, (S2863C11_nt*)(S19236C8*)(S19236C4*), ABISELECT(56,28), "S19236C1");
    check_base_class_offset(lv, (S19236C8*)(S19236C4*), 0, "S19236C1");
    check_base_class_offset(lv, (S19236C4*), 0, "S19236C1");
    /*is_ambiguous_... S19236C1::S2863C11_nt */ AMB_check_base_class_offset(lv, (S2863C11_nt*), ABISELECT(24,12), "S19236C1");
    test_class_info(&lv, &cd_S19236C1);
    dp->~S19236C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19236C1(Test_S19236C1, "S19236C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S19236C1C1Ev();
extern void _ZN8S19236C1D1Ev();
Name_Map name_map_S19236C1[] = {
  NSPAIR(_ZN8S19236C1C1Ev),
  NSPAIR(_ZN8S19236C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S19236C2;
extern VTBL_ENTRY _ZTI8S19236C2[];
extern  VTBL_ENTRY _ZTV8S19236C2[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S19236C5;
extern VTBL_ENTRY _ZTI8S19236C5[];
extern  VTBL_ENTRY _ZTV8S19236C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C5[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S19236C9;
extern VTBL_ENTRY _ZTI8S19236C9[];
extern  VTBL_ENTRY _ZTV8S19236C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C9[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
extern Class_Descriptor cd_S19236C8;
extern VTBL_ENTRY _ZTI8S19236C8[];
extern  VTBL_ENTRY _ZTV8S19236C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C8[];
extern Class_Descriptor cd_S19236C4;
extern VTBL_ENTRY _ZTI8S19236C4[];
extern  VTBL_ENTRY _ZTV8S19236C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C4[];
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
static Base_Class bases_S19236C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    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, 0},
  {&cd_S19236C2,    ABISELECT(32,16), //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2123C30,    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
    5, //immediately_derived
  0, 1},
  {&cd_S2123C27,    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_S2123C23,    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_S19236C5,    ABISELECT(48,24), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    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
    10, //immediately_derived
  0, 1},
  {&cd_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19236C9,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2863C11_nt,    ABISELECT(56,28), //bcp->offset
    23, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19236C8,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19236C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2863C11_nt,    ABISELECT(24,12), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19236C1[];
extern void _ZN8S19236C92v1Ev();
extern void _ZN8S19236C1D1Ev();
extern void _ZN8S19236C1D0Ev();
extern void ABISELECT(_ZThn24_N8S19236C1D1Ev,_ZThn12_N8S19236C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19236C1D0Ev,_ZThn12_N8S19236C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19236C1D1Ev,_ZTv0_n12_N8S19236C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19236C1D1Ev,_ZThn16_N8S19236C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19236C1D0Ev,_ZTv0_n12_N8S19236C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19236C1D0Ev,_ZThn16_N8S19236C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19236C1D1Ev,_ZTv0_n12_N8S19236C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19236C1D1Ev,_ZThn28_N8S19236C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19236C1D0Ev,_ZTv0_n12_N8S19236C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19236C1D0Ev,_ZThn28_N8S19236C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19236C1[] = {
  ABISELECT(32,16),
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C1[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
  (VTBL_ENTRY)&_ZN8S19236C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19236C1D0Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19236C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19236C1D1Ev,_ZThn12_N8S19236C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19236C1D0Ev,_ZThn12_N8S19236C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19236C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C1D1Ev,_ZTv0_n12_N8S19236C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C1D0Ev,_ZTv0_n12_N8S19236C1D0Ev),
  ABISELECT(8,4),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19236C1[0]),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19236C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C1D1Ev,_ZTv0_n12_N8S19236C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C1D0Ev,_ZTv0_n12_N8S19236C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19236C1[];
extern void _ZN8S19236C92v1Ev();
extern void _ZN8S19236C4D1Ev();
extern void _ZN8S19236C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19236C4__8S19236C1[] = {
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C4[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
  (VTBL_ENTRY)&_ZN8S19236C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19236C4D0Ev,
};
extern void _ZN8S19236C92v1Ev();
extern void _ZN8S19236C8D1Ev();
extern void _ZN8S19236C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19236C88S19236C4__8S19236C1[] = {
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
  (VTBL_ENTRY)&_ZN8S19236C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19236C8D0Ev,
};
extern void _ZN8S19236C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19236C98S19236C88S19236C4__8S19236C1[] = {
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C9[0]),
  (VTBL_ENTRY)&_ZN8S19236C92v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19236C5__8S19236C88S19236C4__8S19236C1[] = {
  ABISELECT(8,4),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S19236C8D1Ev,_ZThn28_N8S19236C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S19236C8D0Ev,_ZThn28_N8S19236C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S19236C88S19236C4__8S19236C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19236C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19236C5__8S19236C4__8S19236C1[] = {
  ABISELECT(8,4),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19236C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19236C4D1Ev,_ZTv0_n12_N8S19236C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S19236C4D1Ev,_ZThn28_N8S19236C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19236C4D0Ev,_ZTv0_n12_N8S19236C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S19236C4D0Ev,_ZThn28_N8S19236C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S2863C11_nt__8S19236C4__8S19236C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19236C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C4D1Ev,_ZTv0_n12_N8S19236C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19236C4D0Ev,_ZTv0_n12_N8S19236C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19236C5__8S19236C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19236C5[0]),
};
static  VTT_ENTRY vtt_S19236C1[] = {
  {&(_ZTV8S19236C1[8]),  8,28},
  {&(_tg__ZTV8S19236C4__8S19236C1[7]),  7,10},
  {&(_tg__ZTV8S19236C88S19236C4__8S19236C1[7]),  7,10},
  {&(_tg__ZTV8S19236C98S19236C88S19236C4__8S19236C1[4]),  4,5},
  {&(_tg__ZTV8S19236C5__8S19236C88S19236C4__8S19236C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S19236C88S19236C4__8S19236C1[3]),  3,5},
  {&(_tg__ZTV8S19236C5__8S19236C4__8S19236C1[3]),  3,3},
  {&(_tg__ZTV11S2863C11_nt__8S19236C4__8S19236C1[3]),  3,5},
  {&(_ZTV8S19236C1[18]),  18,28},
  {&(_ZTV8S19236C1[23]),  23,28},
  {&(_ZTV8S19236C1[26]),  26,28},
  {&(_tg__ZTV8S19236C5__8S19236C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19236C1[];
extern  VTBL_ENTRY _ZTV8S19236C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19236C1[];
static VTBL_ENTRY alt_thunk_names145[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C4D0Ev,_ZTv0_n12_N8S19236C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19236C4D0Ev,_ZThn28_N8S19236C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C4D1Ev,_ZTv0_n12_N8S19236C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19236C4D1Ev,_ZThn28_N8S19236C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C8D0Ev,_ZTv0_n12_N8S19236C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19236C8D0Ev,_ZThn28_N8S19236C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C8D1Ev,_ZTv0_n12_N8S19236C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19236C8D1Ev,_ZThn28_N8S19236C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C1D0Ev,_ZTv0_n12_N8S19236C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19236C1D0Ev,_ZThn28_N8S19236C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19236C1D0Ev,_ZThn16_N8S19236C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19236C1D1Ev,_ZTv0_n12_N8S19236C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19236C1D1Ev,_ZThn28_N8S19236C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19236C1D1Ev,_ZThn16_N8S19236C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19236C1 = {  "S19236C1", // class name
  bases_S19236C1, 15,
  &(vtc_S19236C1[0]), // expected_vtbl_contents
  &(vtt_S19236C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S19236C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19236C1),28, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19236C1),12, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names145,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3415C3  {
  int s3415c3f0;
  virtual void  v8(); // _ZN7S3415C32v8Ev
  virtual void  v9(); // _ZN7S3415C32v9Ev
  virtual void  v10(); // _ZN7S3415C33v10Ev
  virtual void  v11(); // _ZN7S3415C33v11Ev
  virtual void  v12(); // _ZN7S3415C33v12Ev
  ~S3415C3(); // tgen
  S3415C3(); // tgen
};
//SIG(-1 S3415C3) C1{ v1 v2 v3 v4 v5 Fi}


void  S3415C3 ::v8(){vfunc_called(this, "_ZN7S3415C32v8Ev");}
void  S3415C3 ::v9(){vfunc_called(this, "_ZN7S3415C32v9Ev");}
void  S3415C3 ::v10(){vfunc_called(this, "_ZN7S3415C33v10Ev");}
void  S3415C3 ::v11(){vfunc_called(this, "_ZN7S3415C33v11Ev");}
void  S3415C3 ::v12(){vfunc_called(this, "_ZN7S3415C33v12Ev");}
S3415C3 ::~S3415C3(){ note_dtor("S3415C3", this);} // tgen
S3415C3 ::S3415C3(){ note_ctor("S3415C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3415C3C1Ev();
extern void _ZN7S3415C3D1Ev();
Name_Map name_map_S3415C3[] = {
  NSPAIR(_ZN7S3415C3C1Ev),
  NSPAIR(_ZN7S3415C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3415C3[];
extern void _ZN7S3415C32v8Ev();
extern void _ZN7S3415C32v9Ev();
extern void _ZN7S3415C33v10Ev();
extern void _ZN7S3415C33v11Ev();
extern void _ZN7S3415C33v12Ev();
static  VTBL_ENTRY vtc_S3415C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3415C3[0]),
  (VTBL_ENTRY)&_ZN7S3415C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3415C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S3415C3[];
extern  VTBL_ENTRY _ZTV7S3415C3[];
Class_Descriptor cd_S3415C3 = {  "S3415C3", // class name
  0,0,//no base classes
  &(vtc_S3415C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3415C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3415C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3415C4  {
  long double s3415c4f0[3];
  virtual void  v13(); // _ZN7S3415C43v13Ev
  virtual void  v14(); // _ZN7S3415C43v14Ev
  virtual void  v15(); // _ZN7S3415C43v15Ev
  virtual void  v16(); // _ZN7S3415C43v16Ev
  virtual void  v17(); // _ZN7S3415C43v17Ev
  virtual void  v18(); // _ZN7S3415C43v18Ev
  virtual void  v19(); // _ZN7S3415C43v19Ev
  ~S3415C4(); // tgen
  S3415C4(); // tgen
};
//SIG(-1 S3415C4) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S3415C4 ::v13(){vfunc_called(this, "_ZN7S3415C43v13Ev");}
void  S3415C4 ::v14(){vfunc_called(this, "_ZN7S3415C43v14Ev");}
void  S3415C4 ::v15(){vfunc_called(this, "_ZN7S3415C43v15Ev");}
void  S3415C4 ::v16(){vfunc_called(this, "_ZN7S3415C43v16Ev");}
void  S3415C4 ::v17(){vfunc_called(this, "_ZN7S3415C43v17Ev");}
void  S3415C4 ::v18(){vfunc_called(this, "_ZN7S3415C43v18Ev");}
void  S3415C4 ::v19(){vfunc_called(this, "_ZN7S3415C43v19Ev");}
S3415C4 ::~S3415C4(){ note_dtor("S3415C4", this);} // tgen
S3415C4 ::S3415C4(){ note_ctor("S3415C4", this);} // tgen

static void Test_S3415C4()
{
  extern Class_Descriptor cd_S3415C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S3415C4, buf);
    S3415C4 *dp, &lv = *(dp=new (buf) S3415C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S3415C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3415C4)");
    check_field_offset(lv, s3415c4f0, ABISELECT(16,4), "S3415C4.s3415c4f0");
    test_class_info(&lv, &cd_S3415C4);
    dp->~S3415C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3415C4(Test_S3415C4, "S3415C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S3415C4C1Ev();
extern void _ZN7S3415C4D1Ev();
Name_Map name_map_S3415C4[] = {
  NSPAIR(_ZN7S3415C4C1Ev),
  NSPAIR(_ZN7S3415C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3415C4[];
extern void _ZN7S3415C43v13Ev();
extern void _ZN7S3415C43v14Ev();
extern void _ZN7S3415C43v15Ev();
extern void _ZN7S3415C43v16Ev();
extern void _ZN7S3415C43v17Ev();
extern void _ZN7S3415C43v18Ev();
extern void _ZN7S3415C43v19Ev();
static  VTBL_ENTRY vtc_S3415C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3415C4[0]),
  (VTBL_ENTRY)&_ZN7S3415C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v18Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v19Ev,
};
extern VTBL_ENTRY _ZTI7S3415C4[];
extern  VTBL_ENTRY _ZTV7S3415C4[];
Class_Descriptor cd_S3415C4 = {  "S3415C4", // class name
  0,0,//no base classes
  &(vtc_S3415C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S3415C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3415C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3415C2  : S3415C3 , virtual S3415C4 {
  virtual void  v20(); // _ZN7S3415C23v20Ev
  virtual void  v21(); // _ZN7S3415C23v21Ev
  virtual void  v22(); // _ZN7S3415C23v22Ev
  virtual void  v23(); // _ZN7S3415C23v23Ev
  virtual void  v24(); // _ZN7S3415C23v24Ev
  ~S3415C2(); // tgen
  S3415C2(); // tgen
};
//SIG(-1 S3415C2) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S3415C2 ::v20(){vfunc_called(this, "_ZN7S3415C23v20Ev");}
void  S3415C2 ::v21(){vfunc_called(this, "_ZN7S3415C23v21Ev");}
void  S3415C2 ::v22(){vfunc_called(this, "_ZN7S3415C23v22Ev");}
void  S3415C2 ::v23(){vfunc_called(this, "_ZN7S3415C23v23Ev");}
void  S3415C2 ::v24(){vfunc_called(this, "_ZN7S3415C23v24Ev");}
S3415C2 ::~S3415C2(){ note_dtor("S3415C2", this);} // tgen
S3415C2 ::S3415C2(){ note_ctor("S3415C2", this);} // tgen

static void Test_S3415C2()
{
  extern Class_Descriptor cd_S3415C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S3415C2, buf);
    S3415C2 *dp, &lv = *(dp=new (buf) S3415C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3415C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3415C2)");
    check_base_class_offset(lv, (S3415C3*), 0, "S3415C2");
    check_base_class_offset(lv, (S3415C4*), ABISELECT(16,8), "S3415C2");
    test_class_info(&lv, &cd_S3415C2);
    dp->~S3415C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3415C2(Test_S3415C2, "S3415C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3415C2C1Ev();
extern void _ZN7S3415C2D1Ev();
Name_Map name_map_S3415C2[] = {
  NSPAIR(_ZN7S3415C2C1Ev),
  NSPAIR(_ZN7S3415C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3415C3;
extern VTBL_ENTRY _ZTI7S3415C3[];
extern  VTBL_ENTRY _ZTV7S3415C3[];
extern Class_Descriptor cd_S3415C4;
extern VTBL_ENTRY _ZTI7S3415C4[];
extern  VTBL_ENTRY _ZTV7S3415C4[];
static Base_Class bases_S3415C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3415C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3415C4,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI7S3415C2[];
extern void _ZN7S3415C32v8Ev();
extern void _ZN7S3415C32v9Ev();
extern void _ZN7S3415C33v10Ev();
extern void _ZN7S3415C33v11Ev();
extern void _ZN7S3415C33v12Ev();
extern void _ZN7S3415C23v20Ev();
extern void _ZN7S3415C23v21Ev();
extern void _ZN7S3415C23v22Ev();
extern void _ZN7S3415C23v23Ev();
extern void _ZN7S3415C23v24Ev();
extern void _ZN7S3415C43v13Ev();
extern void _ZN7S3415C43v14Ev();
extern void _ZN7S3415C43v15Ev();
extern void _ZN7S3415C43v16Ev();
extern void _ZN7S3415C43v17Ev();
extern void _ZN7S3415C43v18Ev();
extern void _ZN7S3415C43v19Ev();
static  VTBL_ENTRY vtc_S3415C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3415C2[0]),
  (VTBL_ENTRY)&_ZN7S3415C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3415C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3415C2[0]),
  (VTBL_ENTRY)&_ZN7S3415C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v18Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v19Ev,
};
extern VTBL_ENTRY _ZTV7S3415C2[];
static  VTT_ENTRY vtt_S3415C2[] = {
  {&(_ZTV7S3415C2[3]),  3,29},
  {&(_ZTV7S3415C2[22]),  22,29},
};
extern VTBL_ENTRY _ZTI7S3415C2[];
extern  VTBL_ENTRY _ZTV7S3415C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3415C2[];
Class_Descriptor cd_S3415C2 = {  "S3415C2", // class name
  bases_S3415C2, 2,
  &(vtc_S3415C2[0]), // expected_vtbl_contents
  &(vtt_S3415C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3415C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3415C2),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3415C2),2, //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  S3415C1  : S3415C2 {
  int s3415c1f0;
  virtual  ~S3415C1(); // _ZN7S3415C1D2Ev
  virtual void  v1(); // _ZN7S3415C12v1Ev
  virtual void  v2(); // _ZN7S3415C12v2Ev
  virtual void  v3(); // _ZN7S3415C12v3Ev
  virtual void  v4(); // _ZN7S3415C12v4Ev
  virtual void  v5(); // _ZN7S3415C12v5Ev
  virtual void  v6(); // _ZN7S3415C12v6Ev
  virtual void  v7(); // _ZN7S3415C12v7Ev
  S3415C1(); // tgen
};
//SIG(1 S3415C1) C1{ BC2{ BC3{ v8 v9 v10 v11 v12 Fi} VBC4{ v13 v14 v15 v16 v17 v18 v19 FD[3]} v20 v21 v22 v23 v24} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S3415C1 ::~S3415C1(){ note_dtor("S3415C1", this);}
void  S3415C1 ::v1(){vfunc_called(this, "_ZN7S3415C12v1Ev");}
void  S3415C1 ::v2(){vfunc_called(this, "_ZN7S3415C12v2Ev");}
void  S3415C1 ::v3(){vfunc_called(this, "_ZN7S3415C12v3Ev");}
void  S3415C1 ::v4(){vfunc_called(this, "_ZN7S3415C12v4Ev");}
void  S3415C1 ::v5(){vfunc_called(this, "_ZN7S3415C12v5Ev");}
void  S3415C1 ::v6(){vfunc_called(this, "_ZN7S3415C12v6Ev");}
void  S3415C1 ::v7(){vfunc_called(this, "_ZN7S3415C12v7Ev");}
S3415C1 ::S3415C1(){ note_ctor("S3415C1", this);} // tgen

static void Test_S3415C1()
{
  extern Class_Descriptor cd_S3415C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,14)];
    init_test(&cd_S3415C1, buf);
    S3415C1 *dp, &lv = *(dp=new (buf) S3415C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S3415C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3415C1)");
    check_base_class_offset(lv, (S3415C3*)(S3415C2*), 0, "S3415C1");
    check_base_class_offset(lv, (S3415C4*)(S3415C2*), ABISELECT(16,12), "S3415C1");
    check_base_class_offset(lv, (S3415C2*), 0, "S3415C1");
    check_field_offset(lv, s3415c1f0, ABISELECT(12,8), "S3415C1.s3415c1f0");
    test_class_info(&lv, &cd_S3415C1);
    dp->~S3415C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3415C1(Test_S3415C1, "S3415C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S3415C1C1Ev();
extern void _ZN7S3415C1D2Ev();
Name_Map name_map_S3415C1[] = {
  NSPAIR(_ZN7S3415C1C1Ev),
  NSPAIR(_ZN7S3415C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3415C3;
extern VTBL_ENTRY _ZTI7S3415C3[];
extern  VTBL_ENTRY _ZTV7S3415C3[];
extern Class_Descriptor cd_S3415C4;
extern VTBL_ENTRY _ZTI7S3415C4[];
extern  VTBL_ENTRY _ZTV7S3415C4[];
extern Class_Descriptor cd_S3415C2;
extern VTBL_ENTRY _ZTI7S3415C2[];
extern  VTBL_ENTRY _ZTV7S3415C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3415C2[];
static Base_Class bases_S3415C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3415C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3415C4,    ABISELECT(16,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3415C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3415C1[];
extern void _ZN7S3415C32v8Ev();
extern void _ZN7S3415C32v9Ev();
extern void _ZN7S3415C33v10Ev();
extern void _ZN7S3415C33v11Ev();
extern void _ZN7S3415C33v12Ev();
extern void _ZN7S3415C23v20Ev();
extern void _ZN7S3415C23v21Ev();
extern void _ZN7S3415C23v22Ev();
extern void _ZN7S3415C23v23Ev();
extern void _ZN7S3415C23v24Ev();
extern void _ZN7S3415C1D1Ev();
extern void _ZN7S3415C1D0Ev();
extern void _ZN7S3415C12v1Ev();
extern void _ZN7S3415C12v2Ev();
extern void _ZN7S3415C12v3Ev();
extern void _ZN7S3415C12v4Ev();
extern void _ZN7S3415C12v5Ev();
extern void _ZN7S3415C12v6Ev();
extern void _ZN7S3415C12v7Ev();
extern void _ZN7S3415C43v13Ev();
extern void _ZN7S3415C43v14Ev();
extern void _ZN7S3415C43v15Ev();
extern void _ZN7S3415C43v16Ev();
extern void _ZN7S3415C43v17Ev();
extern void _ZN7S3415C43v18Ev();
extern void _ZN7S3415C43v19Ev();
static  VTBL_ENTRY vtc_S3415C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3415C1[0]),
  (VTBL_ENTRY)&_ZN7S3415C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3415C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3415C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3415C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3415C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3415C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3415C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3415C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3415C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3415C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3415C12v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3415C1[0]),
  (VTBL_ENTRY)&_ZN7S3415C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v18Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v19Ev,
};
extern VTBL_ENTRY _ZTV7S3415C1[];
extern void _ZN7S3415C32v8Ev();
extern void _ZN7S3415C32v9Ev();
extern void _ZN7S3415C33v10Ev();
extern void _ZN7S3415C33v11Ev();
extern void _ZN7S3415C33v12Ev();
extern void _ZN7S3415C23v20Ev();
extern void _ZN7S3415C23v21Ev();
extern void _ZN7S3415C23v22Ev();
extern void _ZN7S3415C23v23Ev();
extern void _ZN7S3415C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S3415C2__7S3415C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3415C2[0]),
  (VTBL_ENTRY)&_ZN7S3415C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3415C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3415C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3415C23v24Ev,
};
extern void _ZN7S3415C43v13Ev();
extern void _ZN7S3415C43v14Ev();
extern void _ZN7S3415C43v15Ev();
extern void _ZN7S3415C43v16Ev();
extern void _ZN7S3415C43v17Ev();
extern void _ZN7S3415C43v18Ev();
extern void _ZN7S3415C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3415C4__7S3415C2__7S3415C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3415C2[0]),
  (VTBL_ENTRY)&_ZN7S3415C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v18Ev,
  (VTBL_ENTRY)&_ZN7S3415C43v19Ev,
};
static  VTT_ENTRY vtt_S3415C1[] = {
  {&(_ZTV7S3415C1[3]),  3,38},
  {&(_tg__ZTV7S3415C2__7S3415C1[3]),  3,13},
  {&(_tg__ZTV7S3415C4__7S3415C2__7S3415C1[9]),  9,16},
  {&(_ZTV7S3415C1[31]),  31,38},
};
extern VTBL_ENTRY _ZTI7S3415C1[];
extern  VTBL_ENTRY _ZTV7S3415C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3415C1[];
Class_Descriptor cd_S3415C1 = {  "S3415C1", // class name
  bases_S3415C1, 3,
  &(vtc_S3415C1[0]), // expected_vtbl_contents
  &(vtt_S3415C1[0]), // expected_vtt_contents
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S3415C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3415C1),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3415C1),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5138C3  {
  void *s5138c3f0;
  virtual  ~S5138C3(); // _ZN7S5138C3D1Ev
  virtual void  v4(); // _ZN7S5138C32v4Ev
  virtual void  v5(); // _ZN7S5138C32v5Ev
  virtual void  v6(); // _ZN7S5138C32v6Ev
  virtual void  v7(); // _ZN7S5138C32v7Ev
  S5138C3(); // tgen
};
//SIG(-1 S5138C3) C1{ vd v1 v2 v3 v4 Fp}


 S5138C3 ::~S5138C3(){ note_dtor("S5138C3", this);}
void  S5138C3 ::v4(){vfunc_called(this, "_ZN7S5138C32v4Ev");}
void  S5138C3 ::v5(){vfunc_called(this, "_ZN7S5138C32v5Ev");}
void  S5138C3 ::v6(){vfunc_called(this, "_ZN7S5138C32v6Ev");}
void  S5138C3 ::v7(){vfunc_called(this, "_ZN7S5138C32v7Ev");}
S5138C3 ::S5138C3(){ note_ctor("S5138C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5138C3C1Ev();
extern void _ZN7S5138C3D1Ev();
Name_Map name_map_S5138C3[] = {
  NSPAIR(_ZN7S5138C3C1Ev),
  NSPAIR(_ZN7S5138C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5138C3[];
extern void _ZN7S5138C3D1Ev();
extern void _ZN7S5138C3D0Ev();
extern void _ZN7S5138C32v4Ev();
extern void _ZN7S5138C32v5Ev();
extern void _ZN7S5138C32v6Ev();
extern void _ZN7S5138C32v7Ev();
static  VTBL_ENTRY vtc_S5138C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5138C3[0]),
  (VTBL_ENTRY)&_ZN7S5138C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5138C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5138C3[];
extern  VTBL_ENTRY _ZTV7S5138C3[];
Class_Descriptor cd_S5138C3 = {  "S5138C3", // class name
  0,0,//no base classes
  &(vtc_S5138C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S5138C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5138C3),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  S5138C4  {
  ::S2123C20_nt s5138c4f0;
  int s5138c4f1[2];
  char s5138c4f2;
  virtual  ~S5138C4(); // _ZN7S5138C4D1Ev
  virtual void  v8(); // _ZN7S5138C42v8Ev
  virtual void  v9(); // _ZN7S5138C42v9Ev
  virtual void  v10(); // _ZN7S5138C43v10Ev
  S5138C4(); // tgen
};
//SIG(-1 S5138C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5138C4 ::~S5138C4(){ note_dtor("S5138C4", this);}
void  S5138C4 ::v8(){vfunc_called(this, "_ZN7S5138C42v8Ev");}
void  S5138C4 ::v9(){vfunc_called(this, "_ZN7S5138C42v9Ev");}
void  S5138C4 ::v10(){vfunc_called(this, "_ZN7S5138C43v10Ev");}
S5138C4 ::S5138C4(){ note_ctor("S5138C4", this);} // tgen

static void Test_S5138C4()
{
  extern Class_Descriptor cd_S5138C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5138C4, buf);
    S5138C4 *dp, &lv = *(dp=new (buf) S5138C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5138C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5138C4)");
    check_field_offset(lv, s5138c4f0, ABISELECT(8,4), "S5138C4.s5138c4f0");
    check_field_offset(lv, s5138c4f1, ABISELECT(24,16), "S5138C4.s5138c4f1");
    check_field_offset(lv, s5138c4f2, ABISELECT(32,24), "S5138C4.s5138c4f2");
    test_class_info(&lv, &cd_S5138C4);
    dp->~S5138C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5138C4(Test_S5138C4, "S5138C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5138C4C1Ev();
extern void _ZN7S5138C4D1Ev();
Name_Map name_map_S5138C4[] = {
  NSPAIR(_ZN7S5138C4C1Ev),
  NSPAIR(_ZN7S5138C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5138C4[];
extern void _ZN7S5138C4D1Ev();
extern void _ZN7S5138C4D0Ev();
extern void _ZN7S5138C42v8Ev();
extern void _ZN7S5138C42v9Ev();
extern void _ZN7S5138C43v10Ev();
static  VTBL_ENTRY vtc_S5138C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5138C4[0]),
  (VTBL_ENTRY)&_ZN7S5138C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5138C4D0Ev,
  (VTBL_ENTRY)&_ZN7S5138C42v8Ev,
  (VTBL_ENTRY)&_ZN7S5138C42v9Ev,
  (VTBL_ENTRY)&_ZN7S5138C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S5138C4[];
extern  VTBL_ENTRY _ZTV7S5138C4[];
Class_Descriptor cd_S5138C4 = {  "S5138C4", // class name
  0,0,//no base classes
  &(vtc_S5138C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5138C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5138C4),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  S5138C2  : S5138C3 , S5138C4 {
  void *s5138c2f0;
  virtual  ~S5138C2(); // _ZN7S5138C2D1Ev
  virtual void  v11(); // _ZN7S5138C23v11Ev
  virtual void  v12(); // _ZN7S5138C23v12Ev
  virtual void  v13(); // _ZN7S5138C23v13Ev
  virtual void  v14(); // _ZN7S5138C23v14Ev
  S5138C2(); // tgen
};
//SIG(-1 S5138C2) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S5138C2 ::~S5138C2(){ note_dtor("S5138C2", this);}
void  S5138C2 ::v11(){vfunc_called(this, "_ZN7S5138C23v11Ev");}
void  S5138C2 ::v12(){vfunc_called(this, "_ZN7S5138C23v12Ev");}
void  S5138C2 ::v13(){vfunc_called(this, "_ZN7S5138C23v13Ev");}
void  S5138C2 ::v14(){vfunc_called(this, "_ZN7S5138C23v14Ev");}
S5138C2 ::S5138C2(){ note_ctor("S5138C2", this);} // tgen

static void Test_S5138C2()
{
  extern Class_Descriptor cd_S5138C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S5138C2, buf);
    S5138C2 *dp, &lv = *(dp=new (buf) S5138C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S5138C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5138C2)");
    check_base_class_offset(lv, (S5138C3*), 0, "S5138C2");
    check_base_class_offset(lv, (S5138C4*), ABISELECT(16,8), "S5138C2");
    check_field_offset(lv, s5138c2f0, ABISELECT(56,36), "S5138C2.s5138c2f0");
    test_class_info(&lv, &cd_S5138C2);
    dp->~S5138C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5138C2(Test_S5138C2, "S5138C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S5138C2C1Ev();
extern void _ZN7S5138C2D1Ev();
Name_Map name_map_S5138C2[] = {
  NSPAIR(_ZN7S5138C2C1Ev),
  NSPAIR(_ZN7S5138C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5138C3;
extern VTBL_ENTRY _ZTI7S5138C3[];
extern  VTBL_ENTRY _ZTV7S5138C3[];
extern Class_Descriptor cd_S5138C4;
extern VTBL_ENTRY _ZTI7S5138C4[];
extern  VTBL_ENTRY _ZTV7S5138C4[];
static Base_Class bases_S5138C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5138C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5138C4,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5138C2[];
extern void _ZN7S5138C2D1Ev();
extern void _ZN7S5138C2D0Ev();
extern void _ZN7S5138C32v4Ev();
extern void _ZN7S5138C32v5Ev();
extern void _ZN7S5138C32v6Ev();
extern void _ZN7S5138C32v7Ev();
extern void _ZN7S5138C23v11Ev();
extern void _ZN7S5138C23v12Ev();
extern void _ZN7S5138C23v13Ev();
extern void _ZN7S5138C23v14Ev();
extern void ABISELECT(_ZThn16_N7S5138C2D1Ev,_ZThn8_N7S5138C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S5138C2D0Ev,_ZThn8_N7S5138C2D0Ev)();
extern void _ZN7S5138C42v8Ev();
extern void _ZN7S5138C42v9Ev();
extern void _ZN7S5138C43v10Ev();
static  VTBL_ENTRY vtc_S5138C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5138C2[0]),
  (VTBL_ENTRY)&_ZN7S5138C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5138C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5138C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5138C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5138C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5138C23v14Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S5138C2D1Ev,_ZThn8_N7S5138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S5138C2D0Ev,_ZThn8_N7S5138C2D0Ev),
  (VTBL_ENTRY)&_ZN7S5138C42v8Ev,
  (VTBL_ENTRY)&_ZN7S5138C42v9Ev,
  (VTBL_ENTRY)&_ZN7S5138C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S5138C2[];
extern  VTBL_ENTRY _ZTV7S5138C2[];
Class_Descriptor cd_S5138C2 = {  "S5138C2", // class name
  bases_S5138C2, 2,
  &(vtc_S5138C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S5138C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5138C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5138C1  : S5138C2 {
  void *s5138c1f0;
  int s5138c1f1;
  virtual void  v1(); // _ZN7S5138C12v1Ev
  virtual void  v2(); // _ZN7S5138C12v2Ev
  virtual void  v3(); // _ZN7S5138C12v3Ev
  ~S5138C1(); // tgen
  S5138C1(); // tgen
};
//SIG(1 S5138C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 Fp} BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v11 v12 v13 v14 Fp} v1 v2 v3 Fp Fi}


void  S5138C1 ::v1(){vfunc_called(this, "_ZN7S5138C12v1Ev");}
void  S5138C1 ::v2(){vfunc_called(this, "_ZN7S5138C12v2Ev");}
void  S5138C1 ::v3(){vfunc_called(this, "_ZN7S5138C12v3Ev");}
S5138C1 ::~S5138C1(){ note_dtor("S5138C1", this);} // tgen
S5138C1 ::S5138C1(){ note_ctor("S5138C1", this);} // tgen

static void Test_S5138C1()
{
  extern Class_Descriptor cd_S5138C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S5138C1, buf);
    S5138C1 *dp, &lv = *(dp=new (buf) S5138C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S5138C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5138C1)");
    check_base_class_offset(lv, (S5138C3*)(S5138C2*), 0, "S5138C1");
    check_base_class_offset(lv, (S5138C4*)(S5138C2*), ABISELECT(16,8), "S5138C1");
    check_base_class_offset(lv, (S5138C2*), 0, "S5138C1");
    check_field_offset(lv, s5138c1f0, ABISELECT(64,40), "S5138C1.s5138c1f0");
    check_field_offset(lv, s5138c1f1, ABISELECT(72,44), "S5138C1.s5138c1f1");
    test_class_info(&lv, &cd_S5138C1);
    dp->~S5138C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5138C1(Test_S5138C1, "S5138C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S5138C1C1Ev();
extern void _ZN7S5138C1D1Ev();
Name_Map name_map_S5138C1[] = {
  NSPAIR(_ZN7S5138C1C1Ev),
  NSPAIR(_ZN7S5138C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5138C3;
extern VTBL_ENTRY _ZTI7S5138C3[];
extern  VTBL_ENTRY _ZTV7S5138C3[];
extern Class_Descriptor cd_S5138C4;
extern VTBL_ENTRY _ZTI7S5138C4[];
extern  VTBL_ENTRY _ZTV7S5138C4[];
extern Class_Descriptor cd_S5138C2;
extern VTBL_ENTRY _ZTI7S5138C2[];
extern  VTBL_ENTRY _ZTV7S5138C2[];
static Base_Class bases_S5138C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5138C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5138C4,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5138C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5138C1[];
extern void _ZN7S5138C1D1Ev();
extern void _ZN7S5138C1D0Ev();
extern void _ZN7S5138C32v4Ev();
extern void _ZN7S5138C32v5Ev();
extern void _ZN7S5138C32v6Ev();
extern void _ZN7S5138C32v7Ev();
extern void _ZN7S5138C23v11Ev();
extern void _ZN7S5138C23v12Ev();
extern void _ZN7S5138C23v13Ev();
extern void _ZN7S5138C23v14Ev();
extern void _ZN7S5138C12v1Ev();
extern void _ZN7S5138C12v2Ev();
extern void _ZN7S5138C12v3Ev();
extern void ABISELECT(_ZThn16_N7S5138C1D1Ev,_ZThn8_N7S5138C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S5138C1D0Ev,_ZThn8_N7S5138C1D0Ev)();
extern void _ZN7S5138C42v8Ev();
extern void _ZN7S5138C42v9Ev();
extern void _ZN7S5138C43v10Ev();
static  VTBL_ENTRY vtc_S5138C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5138C1[0]),
  (VTBL_ENTRY)&_ZN7S5138C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5138C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5138C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5138C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5138C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5138C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5138C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5138C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5138C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5138C12v3Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S5138C1D1Ev,_ZThn8_N7S5138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S5138C1D0Ev,_ZThn8_N7S5138C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5138C42v8Ev,
  (VTBL_ENTRY)&_ZN7S5138C42v9Ev,
  (VTBL_ENTRY)&_ZN7S5138C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S5138C1[];
extern  VTBL_ENTRY _ZTV7S5138C1[];
Class_Descriptor cd_S5138C1 = {  "S5138C1", // class name
  bases_S5138C1, 3,
  &(vtc_S5138C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S5138C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5138C1),22, //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  S2108C4  {
  void *s2108c4f0;
  virtual  ~S2108C4(); // _ZN7S2108C4D1Ev
  virtual void  v2(); // _ZN7S2108C42v2Ev
  virtual void  v3(); // _ZN7S2108C42v3Ev
  virtual void  v4(); // _ZN7S2108C42v4Ev
  virtual void  v5(); // _ZN7S2108C42v5Ev
  S2108C4(); // tgen
};
//SIG(-1 S2108C4) C1{ vd v1 v2 v3 v4 Fp}


 S2108C4 ::~S2108C4(){ note_dtor("S2108C4", this);}
void  S2108C4 ::v2(){vfunc_called(this, "_ZN7S2108C42v2Ev");}
void  S2108C4 ::v3(){vfunc_called(this, "_ZN7S2108C42v3Ev");}
void  S2108C4 ::v4(){vfunc_called(this, "_ZN7S2108C42v4Ev");}
void  S2108C4 ::v5(){vfunc_called(this, "_ZN7S2108C42v5Ev");}
S2108C4 ::S2108C4(){ note_ctor("S2108C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2108C4C1Ev();
extern void _ZN7S2108C4D1Ev();
Name_Map name_map_S2108C4[] = {
  NSPAIR(_ZN7S2108C4C1Ev),
  NSPAIR(_ZN7S2108C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2108C4[];
extern void _ZN7S2108C4D1Ev();
extern void _ZN7S2108C4D0Ev();
extern void _ZN7S2108C42v2Ev();
extern void _ZN7S2108C42v3Ev();
extern void _ZN7S2108C42v4Ev();
extern void _ZN7S2108C42v5Ev();
static  VTBL_ENTRY vtc_S2108C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2108C4[0]),
  (VTBL_ENTRY)&_ZN7S2108C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2108C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2108C4[];
extern  VTBL_ENTRY _ZTV7S2108C4[];
Class_Descriptor cd_S2108C4 = {  "S2108C4", // class name
  0,0,//no base classes
  &(vtc_S2108C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2108C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2108C4),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  S2108C5  {
  ::S2123C20_nt s2108c5f0;
  int s2108c5f1[2];
  char s2108c5f2;
  virtual  ~S2108C5(); // _ZN7S2108C5D1Ev
  virtual void  v6(); // _ZN7S2108C52v6Ev
  virtual void  v7(); // _ZN7S2108C52v7Ev
  virtual void  v8(); // _ZN7S2108C52v8Ev
  S2108C5(); // tgen
};
//SIG(-1 S2108C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2108C5 ::~S2108C5(){ note_dtor("S2108C5", this);}
void  S2108C5 ::v6(){vfunc_called(this, "_ZN7S2108C52v6Ev");}
void  S2108C5 ::v7(){vfunc_called(this, "_ZN7S2108C52v7Ev");}
void  S2108C5 ::v8(){vfunc_called(this, "_ZN7S2108C52v8Ev");}
S2108C5 ::S2108C5(){ note_ctor("S2108C5", this);} // tgen

static void Test_S2108C5()
{
  extern Class_Descriptor cd_S2108C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2108C5, buf);
    S2108C5 *dp, &lv = *(dp=new (buf) S2108C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2108C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2108C5)");
    check_field_offset(lv, s2108c5f0, ABISELECT(8,4), "S2108C5.s2108c5f0");
    check_field_offset(lv, s2108c5f1, ABISELECT(24,16), "S2108C5.s2108c5f1");
    check_field_offset(lv, s2108c5f2, ABISELECT(32,24), "S2108C5.s2108c5f2");
    test_class_info(&lv, &cd_S2108C5);
    dp->~S2108C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2108C5(Test_S2108C5, "S2108C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2108C5C1Ev();
extern void _ZN7S2108C5D1Ev();
Name_Map name_map_S2108C5[] = {
  NSPAIR(_ZN7S2108C5C1Ev),
  NSPAIR(_ZN7S2108C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2108C5[];
extern void _ZN7S2108C5D1Ev();
extern void _ZN7S2108C5D0Ev();
extern void _ZN7S2108C52v6Ev();
extern void _ZN7S2108C52v7Ev();
extern void _ZN7S2108C52v8Ev();
static  VTBL_ENTRY vtc_S2108C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2108C5[0]),
  (VTBL_ENTRY)&_ZN7S2108C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2108C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2108C5[];
extern  VTBL_ENTRY _ZTV7S2108C5[];
Class_Descriptor cd_S2108C5 = {  "S2108C5", // class name
  0,0,//no base classes
  &(vtc_S2108C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2108C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2108C5),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  S2108C3  : S2108C4 , S2108C5 {
  void *s2108c3f0;
  virtual  ~S2108C3(); // _ZN7S2108C3D1Ev
  virtual void  v9(); // _ZN7S2108C32v9Ev
  virtual void  v10(); // _ZN7S2108C33v10Ev
  virtual void  v11(); // _ZN7S2108C33v11Ev
  virtual void  v12(); // _ZN7S2108C33v12Ev
  S2108C3(); // tgen
};
//SIG(-1 S2108C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2108C3 ::~S2108C3(){ note_dtor("S2108C3", this);}
void  S2108C3 ::v9(){vfunc_called(this, "_ZN7S2108C32v9Ev");}
void  S2108C3 ::v10(){vfunc_called(this, "_ZN7S2108C33v10Ev");}
void  S2108C3 ::v11(){vfunc_called(this, "_ZN7S2108C33v11Ev");}
void  S2108C3 ::v12(){vfunc_called(this, "_ZN7S2108C33v12Ev");}
S2108C3 ::S2108C3(){ note_ctor("S2108C3", this);} // tgen

static void Test_S2108C3()
{
  extern Class_Descriptor cd_S2108C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2108C3, buf);
    S2108C3 *dp, &lv = *(dp=new (buf) S2108C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2108C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2108C3)");
    check_base_class_offset(lv, (S2108C4*), 0, "S2108C3");
    check_base_class_offset(lv, (S2108C5*), ABISELECT(16,8), "S2108C3");
    check_field_offset(lv, s2108c3f0, ABISELECT(56,36), "S2108C3.s2108c3f0");
    test_class_info(&lv, &cd_S2108C3);
    dp->~S2108C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2108C3(Test_S2108C3, "S2108C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2108C3C1Ev();
extern void _ZN7S2108C3D1Ev();
Name_Map name_map_S2108C3[] = {
  NSPAIR(_ZN7S2108C3C1Ev),
  NSPAIR(_ZN7S2108C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2108C4;
extern VTBL_ENTRY _ZTI7S2108C4[];
extern  VTBL_ENTRY _ZTV7S2108C4[];
extern Class_Descriptor cd_S2108C5;
extern VTBL_ENTRY _ZTI7S2108C5[];
extern  VTBL_ENTRY _ZTV7S2108C5[];
static Base_Class bases_S2108C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2108C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2108C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2108C3[];
extern void _ZN7S2108C3D1Ev();
extern void _ZN7S2108C3D0Ev();
extern void _ZN7S2108C42v2Ev();
extern void _ZN7S2108C42v3Ev();
extern void _ZN7S2108C42v4Ev();
extern void _ZN7S2108C42v5Ev();
extern void _ZN7S2108C32v9Ev();
extern void _ZN7S2108C33v10Ev();
extern void _ZN7S2108C33v11Ev();
extern void _ZN7S2108C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2108C3D1Ev,_ZThn8_N7S2108C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2108C3D0Ev,_ZThn8_N7S2108C3D0Ev)();
extern void _ZN7S2108C52v6Ev();
extern void _ZN7S2108C52v7Ev();
extern void _ZN7S2108C52v8Ev();
static  VTBL_ENTRY vtc_S2108C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2108C3[0]),
  (VTBL_ENTRY)&_ZN7S2108C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2108C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2108C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2108C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2108C3D1Ev,_ZThn8_N7S2108C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2108C3D0Ev,_ZThn8_N7S2108C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2108C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2108C3[];
extern  VTBL_ENTRY _ZTV7S2108C3[];
Class_Descriptor cd_S2108C3 = {  "S2108C3", // class name
  bases_S2108C3, 2,
  &(vtc_S2108C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2108C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2108C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2108C2  : S2108C3 {
  virtual  ~S2108C2(); // _ZN7S2108C2D1Ev
  S2108C2(); // tgen
};
//SIG(-1 S2108C2) C1{ BC2{ BC3{ vd v1 v2 v3 v4 Fp} BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v8 v9 v10 v11 Fp} vd}


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

static void Test_S2108C2()
{
  extern Class_Descriptor cd_S2108C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2108C2, buf);
    S2108C2 *dp, &lv = *(dp=new (buf) S2108C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2108C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2108C2)");
    check_base_class_offset(lv, (S2108C4*)(S2108C3*), 0, "S2108C2");
    check_base_class_offset(lv, (S2108C5*)(S2108C3*), ABISELECT(16,8), "S2108C2");
    check_base_class_offset(lv, (S2108C3*), 0, "S2108C2");
    test_class_info(&lv, &cd_S2108C2);
    dp->~S2108C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2108C2(Test_S2108C2, "S2108C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2108C2C1Ev();
extern void _ZN7S2108C2D1Ev();
Name_Map name_map_S2108C2[] = {
  NSPAIR(_ZN7S2108C2C1Ev),
  NSPAIR(_ZN7S2108C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2108C4;
extern VTBL_ENTRY _ZTI7S2108C4[];
extern  VTBL_ENTRY _ZTV7S2108C4[];
extern Class_Descriptor cd_S2108C5;
extern VTBL_ENTRY _ZTI7S2108C5[];
extern  VTBL_ENTRY _ZTV7S2108C5[];
extern Class_Descriptor cd_S2108C3;
extern VTBL_ENTRY _ZTI7S2108C3[];
extern  VTBL_ENTRY _ZTV7S2108C3[];
static Base_Class bases_S2108C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2108C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2108C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S2108C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2108C2[];
extern void _ZN7S2108C2D1Ev();
extern void _ZN7S2108C2D0Ev();
extern void _ZN7S2108C42v2Ev();
extern void _ZN7S2108C42v3Ev();
extern void _ZN7S2108C42v4Ev();
extern void _ZN7S2108C42v5Ev();
extern void _ZN7S2108C32v9Ev();
extern void _ZN7S2108C33v10Ev();
extern void _ZN7S2108C33v11Ev();
extern void _ZN7S2108C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2108C2D1Ev,_ZThn8_N7S2108C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2108C2D0Ev,_ZThn8_N7S2108C2D0Ev)();
extern void _ZN7S2108C52v6Ev();
extern void _ZN7S2108C52v7Ev();
extern void _ZN7S2108C52v8Ev();
static  VTBL_ENTRY vtc_S2108C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2108C2[0]),
  (VTBL_ENTRY)&_ZN7S2108C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2108C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2108C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2108C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2108C2D1Ev,_ZThn8_N7S2108C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2108C2D0Ev,_ZThn8_N7S2108C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2108C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2108C2[];
extern  VTBL_ENTRY _ZTV7S2108C2[];
Class_Descriptor cd_S2108C2 = {  "S2108C2", // class name
  bases_S2108C2, 3,
  &(vtc_S2108C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2108C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2108C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2108C1  : S2108C2 {
  void *s2108c1f0;
  virtual void  v1(); // _ZN7S2108C12v1Ev
  ~S2108C1(); // tgen
  S2108C1(); // tgen
};
//SIG(1 S2108C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 Fp} BC5{ vd v6 v7 v8 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v9 v10 v11 v12 Fp} vd} v1 Fp}


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

static void Test_S2108C1()
{
  extern Class_Descriptor cd_S2108C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S2108C1, buf);
    S2108C1 *dp, &lv = *(dp=new (buf) S2108C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S2108C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2108C1)");
    check_base_class_offset(lv, (S2108C4*)(S2108C3*)(S2108C2*), 0, "S2108C1");
    check_base_class_offset(lv, (S2108C5*)(S2108C3*)(S2108C2*), ABISELECT(16,8), "S2108C1");
    check_base_class_offset(lv, (S2108C3*)(S2108C2*), 0, "S2108C1");
    check_base_class_offset(lv, (S2108C2*), 0, "S2108C1");
    check_field_offset(lv, s2108c1f0, ABISELECT(64,40), "S2108C1.s2108c1f0");
    test_class_info(&lv, &cd_S2108C1);
    dp->~S2108C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2108C1(Test_S2108C1, "S2108C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S2108C1C1Ev();
extern void _ZN7S2108C1D1Ev();
Name_Map name_map_S2108C1[] = {
  NSPAIR(_ZN7S2108C1C1Ev),
  NSPAIR(_ZN7S2108C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2108C4;
extern VTBL_ENTRY _ZTI7S2108C4[];
extern  VTBL_ENTRY _ZTV7S2108C4[];
extern Class_Descriptor cd_S2108C5;
extern VTBL_ENTRY _ZTI7S2108C5[];
extern  VTBL_ENTRY _ZTV7S2108C5[];
extern Class_Descriptor cd_S2108C3;
extern VTBL_ENTRY _ZTI7S2108C3[];
extern  VTBL_ENTRY _ZTV7S2108C3[];
extern Class_Descriptor cd_S2108C2;
extern VTBL_ENTRY _ZTI7S2108C2[];
extern  VTBL_ENTRY _ZTV7S2108C2[];
static Base_Class bases_S2108C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2108C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2108C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2108C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2108C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2108C1[];
extern void _ZN7S2108C1D1Ev();
extern void _ZN7S2108C1D0Ev();
extern void _ZN7S2108C42v2Ev();
extern void _ZN7S2108C42v3Ev();
extern void _ZN7S2108C42v4Ev();
extern void _ZN7S2108C42v5Ev();
extern void _ZN7S2108C32v9Ev();
extern void _ZN7S2108C33v10Ev();
extern void _ZN7S2108C33v11Ev();
extern void _ZN7S2108C33v12Ev();
extern void _ZN7S2108C12v1Ev();
extern void ABISELECT(_ZThn16_N7S2108C1D1Ev,_ZThn8_N7S2108C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2108C1D0Ev,_ZThn8_N7S2108C1D0Ev)();
extern void _ZN7S2108C52v6Ev();
extern void _ZN7S2108C52v7Ev();
extern void _ZN7S2108C52v8Ev();
static  VTBL_ENTRY vtc_S2108C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2108C1[0]),
  (VTBL_ENTRY)&_ZN7S2108C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2108C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2108C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2108C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2108C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2108C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2108C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2108C1D1Ev,_ZThn8_N7S2108C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2108C1D0Ev,_ZThn8_N7S2108C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2108C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2108C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2108C1[];
extern  VTBL_ENTRY _ZTV7S2108C1[];
Class_Descriptor cd_S2108C1 = {  "S2108C1", // class name
  bases_S2108C1, 4,
  &(vtc_S2108C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S2108C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2108C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2107C4  {
  void *s2107c4f0;
  virtual  ~S2107C4(); // _ZN7S2107C4D1Ev
  virtual void  v2(); // _ZN7S2107C42v2Ev
  virtual void  v3(); // _ZN7S2107C42v3Ev
  virtual void  v4(); // _ZN7S2107C42v4Ev
  virtual void  v5(); // _ZN7S2107C42v5Ev
  S2107C4(); // tgen
};
//SIG(-1 S2107C4) C1{ vd v1 v2 v3 v4 Fp}


 S2107C4 ::~S2107C4(){ note_dtor("S2107C4", this);}
void  S2107C4 ::v2(){vfunc_called(this, "_ZN7S2107C42v2Ev");}
void  S2107C4 ::v3(){vfunc_called(this, "_ZN7S2107C42v3Ev");}
void  S2107C4 ::v4(){vfunc_called(this, "_ZN7S2107C42v4Ev");}
void  S2107C4 ::v5(){vfunc_called(this, "_ZN7S2107C42v5Ev");}
S2107C4 ::S2107C4(){ note_ctor("S2107C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2107C4C1Ev();
extern void _ZN7S2107C4D1Ev();
Name_Map name_map_S2107C4[] = {
  NSPAIR(_ZN7S2107C4C1Ev),
  NSPAIR(_ZN7S2107C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2107C4[];
extern void _ZN7S2107C4D1Ev();
extern void _ZN7S2107C4D0Ev();
extern void _ZN7S2107C42v2Ev();
extern void _ZN7S2107C42v3Ev();
extern void _ZN7S2107C42v4Ev();
extern void _ZN7S2107C42v5Ev();
static  VTBL_ENTRY vtc_S2107C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2107C4[0]),
  (VTBL_ENTRY)&_ZN7S2107C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2107C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2107C4[];
extern  VTBL_ENTRY _ZTV7S2107C4[];
Class_Descriptor cd_S2107C4 = {  "S2107C4", // class name
  0,0,//no base classes
  &(vtc_S2107C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2107C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2107C4),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  S2107C5  {
  ::S2123C20_nt s2107c5f0;
  int s2107c5f1[2];
  char s2107c5f2;
  virtual  ~S2107C5(); // _ZN7S2107C5D1Ev
  virtual void  v6(); // _ZN7S2107C52v6Ev
  virtual void  v7(); // _ZN7S2107C52v7Ev
  virtual void  v8(); // _ZN7S2107C52v8Ev
  S2107C5(); // tgen
};
//SIG(-1 S2107C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2107C5 ::~S2107C5(){ note_dtor("S2107C5", this);}
void  S2107C5 ::v6(){vfunc_called(this, "_ZN7S2107C52v6Ev");}
void  S2107C5 ::v7(){vfunc_called(this, "_ZN7S2107C52v7Ev");}
void  S2107C5 ::v8(){vfunc_called(this, "_ZN7S2107C52v8Ev");}
S2107C5 ::S2107C5(){ note_ctor("S2107C5", this);} // tgen

static void Test_S2107C5()
{
  extern Class_Descriptor cd_S2107C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2107C5, buf);
    S2107C5 *dp, &lv = *(dp=new (buf) S2107C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2107C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2107C5)");
    check_field_offset(lv, s2107c5f0, ABISELECT(8,4), "S2107C5.s2107c5f0");
    check_field_offset(lv, s2107c5f1, ABISELECT(24,16), "S2107C5.s2107c5f1");
    check_field_offset(lv, s2107c5f2, ABISELECT(32,24), "S2107C5.s2107c5f2");
    test_class_info(&lv, &cd_S2107C5);
    dp->~S2107C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2107C5(Test_S2107C5, "S2107C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2107C5C1Ev();
extern void _ZN7S2107C5D1Ev();
Name_Map name_map_S2107C5[] = {
  NSPAIR(_ZN7S2107C5C1Ev),
  NSPAIR(_ZN7S2107C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2107C5[];
extern void _ZN7S2107C5D1Ev();
extern void _ZN7S2107C5D0Ev();
extern void _ZN7S2107C52v6Ev();
extern void _ZN7S2107C52v7Ev();
extern void _ZN7S2107C52v8Ev();
static  VTBL_ENTRY vtc_S2107C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2107C5[0]),
  (VTBL_ENTRY)&_ZN7S2107C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2107C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2107C5[];
extern  VTBL_ENTRY _ZTV7S2107C5[];
Class_Descriptor cd_S2107C5 = {  "S2107C5", // class name
  0,0,//no base classes
  &(vtc_S2107C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2107C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2107C5),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  S2107C3  : S2107C4 , S2107C5 {
  void *s2107c3f0;
  virtual  ~S2107C3(); // _ZN7S2107C3D1Ev
  virtual void  v9(); // _ZN7S2107C32v9Ev
  virtual void  v10(); // _ZN7S2107C33v10Ev
  virtual void  v11(); // _ZN7S2107C33v11Ev
  virtual void  v12(); // _ZN7S2107C33v12Ev
  S2107C3(); // tgen
};
//SIG(-1 S2107C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2107C3 ::~S2107C3(){ note_dtor("S2107C3", this);}
void  S2107C3 ::v9(){vfunc_called(this, "_ZN7S2107C32v9Ev");}
void  S2107C3 ::v10(){vfunc_called(this, "_ZN7S2107C33v10Ev");}
void  S2107C3 ::v11(){vfunc_called(this, "_ZN7S2107C33v11Ev");}
void  S2107C3 ::v12(){vfunc_called(this, "_ZN7S2107C33v12Ev");}
S2107C3 ::S2107C3(){ note_ctor("S2107C3", this);} // tgen

static void Test_S2107C3()
{
  extern Class_Descriptor cd_S2107C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2107C3, buf);
    S2107C3 *dp, &lv = *(dp=new (buf) S2107C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2107C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2107C3)");
    check_base_class_offset(lv, (S2107C4*), 0, "S2107C3");
    check_base_class_offset(lv, (S2107C5*), ABISELECT(16,8), "S2107C3");
    check_field_offset(lv, s2107c3f0, ABISELECT(56,36), "S2107C3.s2107c3f0");
    test_class_info(&lv, &cd_S2107C3);
    dp->~S2107C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2107C3(Test_S2107C3, "S2107C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2107C3C1Ev();
extern void _ZN7S2107C3D1Ev();
Name_Map name_map_S2107C3[] = {
  NSPAIR(_ZN7S2107C3C1Ev),
  NSPAIR(_ZN7S2107C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2107C4;
extern VTBL_ENTRY _ZTI7S2107C4[];
extern  VTBL_ENTRY _ZTV7S2107C4[];
extern Class_Descriptor cd_S2107C5;
extern VTBL_ENTRY _ZTI7S2107C5[];
extern  VTBL_ENTRY _ZTV7S2107C5[];
static Base_Class bases_S2107C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2107C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2107C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2107C3[];
extern void _ZN7S2107C3D1Ev();
extern void _ZN7S2107C3D0Ev();
extern void _ZN7S2107C42v2Ev();
extern void _ZN7S2107C42v3Ev();
extern void _ZN7S2107C42v4Ev();
extern void _ZN7S2107C42v5Ev();
extern void _ZN7S2107C32v9Ev();
extern void _ZN7S2107C33v10Ev();
extern void _ZN7S2107C33v11Ev();
extern void _ZN7S2107C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2107C3D1Ev,_ZThn8_N7S2107C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2107C3D0Ev,_ZThn8_N7S2107C3D0Ev)();
extern void _ZN7S2107C52v6Ev();
extern void _ZN7S2107C52v7Ev();
extern void _ZN7S2107C52v8Ev();
static  VTBL_ENTRY vtc_S2107C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2107C3[0]),
  (VTBL_ENTRY)&_ZN7S2107C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2107C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2107C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2107C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2107C3D1Ev,_ZThn8_N7S2107C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2107C3D0Ev,_ZThn8_N7S2107C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2107C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2107C3[];
extern  VTBL_ENTRY _ZTV7S2107C3[];
Class_Descriptor cd_S2107C3 = {  "S2107C3", // class name
  bases_S2107C3, 2,
  &(vtc_S2107C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2107C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2107C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2107C2  : S2107C3 {
  virtual  ~S2107C2(); // _ZN7S2107C2D1Ev
  S2107C2(); // tgen
};
//SIG(-1 S2107C2) C1{ BC2{ BC3{ vd v1 v2 v3 v4 Fp} BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v8 v9 v10 v11 Fp} vd}


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

static void Test_S2107C2()
{
  extern Class_Descriptor cd_S2107C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2107C2, buf);
    S2107C2 *dp, &lv = *(dp=new (buf) S2107C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2107C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2107C2)");
    check_base_class_offset(lv, (S2107C4*)(S2107C3*), 0, "S2107C2");
    check_base_class_offset(lv, (S2107C5*)(S2107C3*), ABISELECT(16,8), "S2107C2");
    check_base_class_offset(lv, (S2107C3*), 0, "S2107C2");
    test_class_info(&lv, &cd_S2107C2);
    dp->~S2107C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2107C2(Test_S2107C2, "S2107C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2107C2C1Ev();
extern void _ZN7S2107C2D1Ev();
Name_Map name_map_S2107C2[] = {
  NSPAIR(_ZN7S2107C2C1Ev),
  NSPAIR(_ZN7S2107C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2107C4;
extern VTBL_ENTRY _ZTI7S2107C4[];
extern  VTBL_ENTRY _ZTV7S2107C4[];
extern Class_Descriptor cd_S2107C5;
extern VTBL_ENTRY _ZTI7S2107C5[];
extern  VTBL_ENTRY _ZTV7S2107C5[];
extern Class_Descriptor cd_S2107C3;
extern VTBL_ENTRY _ZTI7S2107C3[];
extern  VTBL_ENTRY _ZTV7S2107C3[];
static Base_Class bases_S2107C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2107C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2107C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S2107C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2107C2[];
extern void _ZN7S2107C2D1Ev();
extern void _ZN7S2107C2D0Ev();
extern void _ZN7S2107C42v2Ev();
extern void _ZN7S2107C42v3Ev();
extern void _ZN7S2107C42v4Ev();
extern void _ZN7S2107C42v5Ev();
extern void _ZN7S2107C32v9Ev();
extern void _ZN7S2107C33v10Ev();
extern void _ZN7S2107C33v11Ev();
extern void _ZN7S2107C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2107C2D1Ev,_ZThn8_N7S2107C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2107C2D0Ev,_ZThn8_N7S2107C2D0Ev)();
extern void _ZN7S2107C52v6Ev();
extern void _ZN7S2107C52v7Ev();
extern void _ZN7S2107C52v8Ev();
static  VTBL_ENTRY vtc_S2107C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2107C2[0]),
  (VTBL_ENTRY)&_ZN7S2107C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2107C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2107C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2107C2D1Ev,_ZThn8_N7S2107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2107C2D0Ev,_ZThn8_N7S2107C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2107C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2107C2[];
extern  VTBL_ENTRY _ZTV7S2107C2[];
Class_Descriptor cd_S2107C2 = {  "S2107C2", // class name
  bases_S2107C2, 3,
  &(vtc_S2107C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2107C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2107C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2107C1  : S2107C2 {
  int s2107c1f0;
  virtual void  v1(); // _ZN7S2107C12v1Ev
  ~S2107C1(); // tgen
  S2107C1(); // tgen
};
//SIG(1 S2107C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 Fp} BC5{ vd v6 v7 v8 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v9 v10 v11 v12 Fp} vd} v1 Fi}


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

static void Test_S2107C1()
{
  extern Class_Descriptor cd_S2107C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S2107C1, buf);
    S2107C1 *dp, &lv = *(dp=new (buf) S2107C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S2107C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2107C1)");
    check_base_class_offset(lv, (S2107C4*)(S2107C3*)(S2107C2*), 0, "S2107C1");
    check_base_class_offset(lv, (S2107C5*)(S2107C3*)(S2107C2*), ABISELECT(16,8), "S2107C1");
    check_base_class_offset(lv, (S2107C3*)(S2107C2*), 0, "S2107C1");
    check_base_class_offset(lv, (S2107C2*), 0, "S2107C1");
    check_field_offset(lv, s2107c1f0, ABISELECT(64,40), "S2107C1.s2107c1f0");
    test_class_info(&lv, &cd_S2107C1);
    dp->~S2107C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2107C1(Test_S2107C1, "S2107C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S2107C1C1Ev();
extern void _ZN7S2107C1D1Ev();
Name_Map name_map_S2107C1[] = {
  NSPAIR(_ZN7S2107C1C1Ev),
  NSPAIR(_ZN7S2107C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2107C4;
extern VTBL_ENTRY _ZTI7S2107C4[];
extern  VTBL_ENTRY _ZTV7S2107C4[];
extern Class_Descriptor cd_S2107C5;
extern VTBL_ENTRY _ZTI7S2107C5[];
extern  VTBL_ENTRY _ZTV7S2107C5[];
extern Class_Descriptor cd_S2107C3;
extern VTBL_ENTRY _ZTI7S2107C3[];
extern  VTBL_ENTRY _ZTV7S2107C3[];
extern Class_Descriptor cd_S2107C2;
extern VTBL_ENTRY _ZTI7S2107C2[];
extern  VTBL_ENTRY _ZTV7S2107C2[];
static Base_Class bases_S2107C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2107C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2107C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2107C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2107C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2107C1[];
extern void _ZN7S2107C1D1Ev();
extern void _ZN7S2107C1D0Ev();
extern void _ZN7S2107C42v2Ev();
extern void _ZN7S2107C42v3Ev();
extern void _ZN7S2107C42v4Ev();
extern void _ZN7S2107C42v5Ev();
extern void _ZN7S2107C32v9Ev();
extern void _ZN7S2107C33v10Ev();
extern void _ZN7S2107C33v11Ev();
extern void _ZN7S2107C33v12Ev();
extern void _ZN7S2107C12v1Ev();
extern void ABISELECT(_ZThn16_N7S2107C1D1Ev,_ZThn8_N7S2107C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2107C1D0Ev,_ZThn8_N7S2107C1D0Ev)();
extern void _ZN7S2107C52v6Ev();
extern void _ZN7S2107C52v7Ev();
extern void _ZN7S2107C52v8Ev();
static  VTBL_ENTRY vtc_S2107C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2107C1[0]),
  (VTBL_ENTRY)&_ZN7S2107C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2107C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2107C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2107C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2107C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2107C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2107C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2107C1D1Ev,_ZThn8_N7S2107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2107C1D0Ev,_ZThn8_N7S2107C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2107C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2107C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2107C1[];
extern  VTBL_ENTRY _ZTV7S2107C1[];
Class_Descriptor cd_S2107C1 = {  "S2107C1", // class name
  bases_S2107C1, 4,
  &(vtc_S2107C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S2107C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2107C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4910C3  {
  void *s4910c3f0;
  virtual  ~S4910C3(); // _ZN7S4910C3D1Ev
  virtual void  v3(); // _ZN7S4910C32v3Ev
  virtual void  v4(); // _ZN7S4910C32v4Ev
  virtual void  v5(); // _ZN7S4910C32v5Ev
  virtual void  v6(); // _ZN7S4910C32v6Ev
  S4910C3(); // tgen
};
//SIG(-1 S4910C3) C1{ vd v1 v2 v3 v4 Fp}


 S4910C3 ::~S4910C3(){ note_dtor("S4910C3", this);}
void  S4910C3 ::v3(){vfunc_called(this, "_ZN7S4910C32v3Ev");}
void  S4910C3 ::v4(){vfunc_called(this, "_ZN7S4910C32v4Ev");}
void  S4910C3 ::v5(){vfunc_called(this, "_ZN7S4910C32v5Ev");}
void  S4910C3 ::v6(){vfunc_called(this, "_ZN7S4910C32v6Ev");}
S4910C3 ::S4910C3(){ note_ctor("S4910C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4910C3C1Ev();
extern void _ZN7S4910C3D1Ev();
Name_Map name_map_S4910C3[] = {
  NSPAIR(_ZN7S4910C3C1Ev),
  NSPAIR(_ZN7S4910C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4910C3[];
extern void _ZN7S4910C3D1Ev();
extern void _ZN7S4910C3D0Ev();
extern void _ZN7S4910C32v3Ev();
extern void _ZN7S4910C32v4Ev();
extern void _ZN7S4910C32v5Ev();
extern void _ZN7S4910C32v6Ev();
static  VTBL_ENTRY vtc_S4910C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4910C3[0]),
  (VTBL_ENTRY)&_ZN7S4910C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4910C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S4910C3[];
extern  VTBL_ENTRY _ZTV7S4910C3[];
Class_Descriptor cd_S4910C3 = {  "S4910C3", // class name
  0,0,//no base classes
  &(vtc_S4910C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4910C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4910C3),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  S4910C4  {
  ::S2123C20_nt s4910c4f0;
  int s4910c4f1[2];
  char s4910c4f2;
  virtual  ~S4910C4(); // _ZN7S4910C4D1Ev
  virtual void  v7(); // _ZN7S4910C42v7Ev
  virtual void  v8(); // _ZN7S4910C42v8Ev
  virtual void  v9(); // _ZN7S4910C42v9Ev
  S4910C4(); // tgen
};
//SIG(-1 S4910C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4910C4 ::~S4910C4(){ note_dtor("S4910C4", this);}
void  S4910C4 ::v7(){vfunc_called(this, "_ZN7S4910C42v7Ev");}
void  S4910C4 ::v8(){vfunc_called(this, "_ZN7S4910C42v8Ev");}
void  S4910C4 ::v9(){vfunc_called(this, "_ZN7S4910C42v9Ev");}
S4910C4 ::S4910C4(){ note_ctor("S4910C4", this);} // tgen

static void Test_S4910C4()
{
  extern Class_Descriptor cd_S4910C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4910C4, buf);
    S4910C4 *dp, &lv = *(dp=new (buf) S4910C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4910C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4910C4)");
    check_field_offset(lv, s4910c4f0, ABISELECT(8,4), "S4910C4.s4910c4f0");
    check_field_offset(lv, s4910c4f1, ABISELECT(24,16), "S4910C4.s4910c4f1");
    check_field_offset(lv, s4910c4f2, ABISELECT(32,24), "S4910C4.s4910c4f2");
    test_class_info(&lv, &cd_S4910C4);
    dp->~S4910C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4910C4(Test_S4910C4, "S4910C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4910C4C1Ev();
extern void _ZN7S4910C4D1Ev();
Name_Map name_map_S4910C4[] = {
  NSPAIR(_ZN7S4910C4C1Ev),
  NSPAIR(_ZN7S4910C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4910C4[];
extern void _ZN7S4910C4D1Ev();
extern void _ZN7S4910C4D0Ev();
extern void _ZN7S4910C42v7Ev();
extern void _ZN7S4910C42v8Ev();
extern void _ZN7S4910C42v9Ev();
static  VTBL_ENTRY vtc_S4910C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4910C4[0]),
  (VTBL_ENTRY)&_ZN7S4910C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4910C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4910C42v7Ev,
  (VTBL_ENTRY)&_ZN7S4910C42v8Ev,
  (VTBL_ENTRY)&_ZN7S4910C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S4910C4[];
extern  VTBL_ENTRY _ZTV7S4910C4[];
Class_Descriptor cd_S4910C4 = {  "S4910C4", // class name
  0,0,//no base classes
  &(vtc_S4910C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4910C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4910C4),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  S4910C2  : S4910C3 , S4910C4 {
  void *s4910c2f0;
  virtual  ~S4910C2(); // _ZN7S4910C2D1Ev
  virtual void  v10(); // _ZN7S4910C23v10Ev
  virtual void  v11(); // _ZN7S4910C23v11Ev
  virtual void  v12(); // _ZN7S4910C23v12Ev
  virtual void  v13(); // _ZN7S4910C23v13Ev
  S4910C2(); // tgen
};
//SIG(-1 S4910C2) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S4910C2 ::~S4910C2(){ note_dtor("S4910C2", this);}
void  S4910C2 ::v10(){vfunc_called(this, "_ZN7S4910C23v10Ev");}
void  S4910C2 ::v11(){vfunc_called(this, "_ZN7S4910C23v11Ev");}
void  S4910C2 ::v12(){vfunc_called(this, "_ZN7S4910C23v12Ev");}
void  S4910C2 ::v13(){vfunc_called(this, "_ZN7S4910C23v13Ev");}
S4910C2 ::S4910C2(){ note_ctor("S4910C2", this);} // tgen

static void Test_S4910C2()
{
  extern Class_Descriptor cd_S4910C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4910C2, buf);
    S4910C2 *dp, &lv = *(dp=new (buf) S4910C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4910C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4910C2)");
    check_base_class_offset(lv, (S4910C3*), 0, "S4910C2");
    check_base_class_offset(lv, (S4910C4*), ABISELECT(16,8), "S4910C2");
    check_field_offset(lv, s4910c2f0, ABISELECT(56,36), "S4910C2.s4910c2f0");
    test_class_info(&lv, &cd_S4910C2);
    dp->~S4910C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4910C2(Test_S4910C2, "S4910C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4910C2C1Ev();
extern void _ZN7S4910C2D1Ev();
Name_Map name_map_S4910C2[] = {
  NSPAIR(_ZN7S4910C2C1Ev),
  NSPAIR(_ZN7S4910C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4910C3;
extern VTBL_ENTRY _ZTI7S4910C3[];
extern  VTBL_ENTRY _ZTV7S4910C3[];
extern Class_Descriptor cd_S4910C4;
extern VTBL_ENTRY _ZTI7S4910C4[];
extern  VTBL_ENTRY _ZTV7S4910C4[];
static Base_Class bases_S4910C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4910C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4910C4,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4910C2[];
extern void _ZN7S4910C2D1Ev();
extern void _ZN7S4910C2D0Ev();
extern void _ZN7S4910C32v3Ev();
extern void _ZN7S4910C32v4Ev();
extern void _ZN7S4910C32v5Ev();
extern void _ZN7S4910C32v6Ev();
extern void _ZN7S4910C23v10Ev();
extern void _ZN7S4910C23v11Ev();
extern void _ZN7S4910C23v12Ev();
extern void _ZN7S4910C23v13Ev();
extern void ABISELECT(_ZThn16_N7S4910C2D1Ev,_ZThn8_N7S4910C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S4910C2D0Ev,_ZThn8_N7S4910C2D0Ev)();
extern void _ZN7S4910C42v7Ev();
extern void _ZN7S4910C42v8Ev();
extern void _ZN7S4910C42v9Ev();
static  VTBL_ENTRY vtc_S4910C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4910C2[0]),
  (VTBL_ENTRY)&_ZN7S4910C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4910C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4910C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4910C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4910C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4910C23v13Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4910C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4910C2D1Ev,_ZThn8_N7S4910C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4910C2D0Ev,_ZThn8_N7S4910C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4910C42v7Ev,
  (VTBL_ENTRY)&_ZN7S4910C42v8Ev,
  (VTBL_ENTRY)&_ZN7S4910C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S4910C2[];
extern  VTBL_ENTRY _ZTV7S4910C2[];
Class_Descriptor cd_S4910C2 = {  "S4910C2", // class name
  bases_S4910C2, 2,
  &(vtc_S4910C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4910C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4910C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4910C1  : S4910C2 {
  int s4910c1f0;
  virtual void  v1(); // _ZN7S4910C12v1Ev
  virtual void  v2(); // _ZN7S4910C12v2Ev
  ~S4910C1(); // tgen
  S4910C1(); // tgen
};
//SIG(1 S4910C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 Fp} BC4{ vd v7 v8 v9 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v10 v11 v12 v13 Fp} v1 v2 Fi}


void  S4910C1 ::v1(){vfunc_called(this, "_ZN7S4910C12v1Ev");}
void  S4910C1 ::v2(){vfunc_called(this, "_ZN7S4910C12v2Ev");}
S4910C1 ::~S4910C1(){ note_dtor("S4910C1", this);} // tgen
S4910C1 ::S4910C1(){ note_ctor("S4910C1", this);} // tgen

static void Test_S4910C1()
{
  extern Class_Descriptor cd_S4910C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S4910C1, buf);
    S4910C1 *dp, &lv = *(dp=new (buf) S4910C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S4910C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4910C1)");
    check_base_class_offset(lv, (S4910C3*)(S4910C2*), 0, "S4910C1");
    check_base_class_offset(lv, (S4910C4*)(S4910C2*), ABISELECT(16,8), "S4910C1");
    check_base_class_offset(lv, (S4910C2*), 0, "S4910C1");
    check_field_offset(lv, s4910c1f0, ABISELECT(64,40), "S4910C1.s4910c1f0");
    test_class_info(&lv, &cd_S4910C1);
    dp->~S4910C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4910C1(Test_S4910C1, "S4910C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S4910C1C1Ev();
extern void _ZN7S4910C1D1Ev();
Name_Map name_map_S4910C1[] = {
  NSPAIR(_ZN7S4910C1C1Ev),
  NSPAIR(_ZN7S4910C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4910C3;
extern VTBL_ENTRY _ZTI7S4910C3[];
extern  VTBL_ENTRY _ZTV7S4910C3[];
extern Class_Descriptor cd_S4910C4;
extern VTBL_ENTRY _ZTI7S4910C4[];
extern  VTBL_ENTRY _ZTV7S4910C4[];
extern Class_Descriptor cd_S4910C2;
extern VTBL_ENTRY _ZTI7S4910C2[];
extern  VTBL_ENTRY _ZTV7S4910C2[];
static Base_Class bases_S4910C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4910C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4910C4,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4910C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4910C1[];
extern void _ZN7S4910C1D1Ev();
extern void _ZN7S4910C1D0Ev();
extern void _ZN7S4910C32v3Ev();
extern void _ZN7S4910C32v4Ev();
extern void _ZN7S4910C32v5Ev();
extern void _ZN7S4910C32v6Ev();
extern void _ZN7S4910C23v10Ev();
extern void _ZN7S4910C23v11Ev();
extern void _ZN7S4910C23v12Ev();
extern void _ZN7S4910C23v13Ev();
extern void _ZN7S4910C12v1Ev();
extern void _ZN7S4910C12v2Ev();
extern void ABISELECT(_ZThn16_N7S4910C1D1Ev,_ZThn8_N7S4910C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4910C1D0Ev,_ZThn8_N7S4910C1D0Ev)();
extern void _ZN7S4910C42v7Ev();
extern void _ZN7S4910C42v8Ev();
extern void _ZN7S4910C42v9Ev();
static  VTBL_ENTRY vtc_S4910C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4910C1[0]),
  (VTBL_ENTRY)&_ZN7S4910C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4910C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4910C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4910C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4910C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4910C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4910C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4910C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4910C12v2Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4910C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4910C1D1Ev,_ZThn8_N7S4910C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4910C1D0Ev,_ZThn8_N7S4910C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4910C42v7Ev,
  (VTBL_ENTRY)&_ZN7S4910C42v8Ev,
  (VTBL_ENTRY)&_ZN7S4910C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S4910C1[];
extern  VTBL_ENTRY _ZTV7S4910C1[];
Class_Descriptor cd_S4910C1 = {  "S4910C1", // class name
  bases_S4910C1, 3,
  &(vtc_S4910C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S4910C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4910C1),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  S2109C4  {
  void *s2109c4f0;
  virtual  ~S2109C4(); // _ZN7S2109C4D1Ev
  virtual void  v2(); // _ZN7S2109C42v2Ev
  virtual void  v3(); // _ZN7S2109C42v3Ev
  virtual void  v4(); // _ZN7S2109C42v4Ev
  virtual void  v5(); // _ZN7S2109C42v5Ev
  S2109C4(); // tgen
};
//SIG(-1 S2109C4) C1{ vd v1 v2 v3 v4 Fp}


 S2109C4 ::~S2109C4(){ note_dtor("S2109C4", this);}
void  S2109C4 ::v2(){vfunc_called(this, "_ZN7S2109C42v2Ev");}
void  S2109C4 ::v3(){vfunc_called(this, "_ZN7S2109C42v3Ev");}
void  S2109C4 ::v4(){vfunc_called(this, "_ZN7S2109C42v4Ev");}
void  S2109C4 ::v5(){vfunc_called(this, "_ZN7S2109C42v5Ev");}
S2109C4 ::S2109C4(){ note_ctor("S2109C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2109C4C1Ev();
extern void _ZN7S2109C4D1Ev();
Name_Map name_map_S2109C4[] = {
  NSPAIR(_ZN7S2109C4C1Ev),
  NSPAIR(_ZN7S2109C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2109C4[];
extern void _ZN7S2109C4D1Ev();
extern void _ZN7S2109C4D0Ev();
extern void _ZN7S2109C42v2Ev();
extern void _ZN7S2109C42v3Ev();
extern void _ZN7S2109C42v4Ev();
extern void _ZN7S2109C42v5Ev();
static  VTBL_ENTRY vtc_S2109C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2109C4[0]),
  (VTBL_ENTRY)&_ZN7S2109C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2109C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2109C4[];
extern  VTBL_ENTRY _ZTV7S2109C4[];
Class_Descriptor cd_S2109C4 = {  "S2109C4", // class name
  0,0,//no base classes
  &(vtc_S2109C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2109C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2109C4),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  S2109C5  {
  ::S2123C20_nt s2109c5f0;
  int s2109c5f1[2];
  char s2109c5f2;
  virtual  ~S2109C5(); // _ZN7S2109C5D1Ev
  virtual void  v6(); // _ZN7S2109C52v6Ev
  virtual void  v7(); // _ZN7S2109C52v7Ev
  virtual void  v8(); // _ZN7S2109C52v8Ev
  S2109C5(); // tgen
};
//SIG(-1 S2109C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2109C5 ::~S2109C5(){ note_dtor("S2109C5", this);}
void  S2109C5 ::v6(){vfunc_called(this, "_ZN7S2109C52v6Ev");}
void  S2109C5 ::v7(){vfunc_called(this, "_ZN7S2109C52v7Ev");}
void  S2109C5 ::v8(){vfunc_called(this, "_ZN7S2109C52v8Ev");}
S2109C5 ::S2109C5(){ note_ctor("S2109C5", this);} // tgen

static void Test_S2109C5()
{
  extern Class_Descriptor cd_S2109C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2109C5, buf);
    S2109C5 *dp, &lv = *(dp=new (buf) S2109C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2109C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2109C5)");
    check_field_offset(lv, s2109c5f0, ABISELECT(8,4), "S2109C5.s2109c5f0");
    check_field_offset(lv, s2109c5f1, ABISELECT(24,16), "S2109C5.s2109c5f1");
    check_field_offset(lv, s2109c5f2, ABISELECT(32,24), "S2109C5.s2109c5f2");
    test_class_info(&lv, &cd_S2109C5);
    dp->~S2109C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2109C5(Test_S2109C5, "S2109C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2109C5C1Ev();
extern void _ZN7S2109C5D1Ev();
Name_Map name_map_S2109C5[] = {
  NSPAIR(_ZN7S2109C5C1Ev),
  NSPAIR(_ZN7S2109C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2109C5[];
extern void _ZN7S2109C5D1Ev();
extern void _ZN7S2109C5D0Ev();
extern void _ZN7S2109C52v6Ev();
extern void _ZN7S2109C52v7Ev();
extern void _ZN7S2109C52v8Ev();
static  VTBL_ENTRY vtc_S2109C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2109C5[0]),
  (VTBL_ENTRY)&_ZN7S2109C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2109C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2109C5[];
extern  VTBL_ENTRY _ZTV7S2109C5[];
Class_Descriptor cd_S2109C5 = {  "S2109C5", // class name
  0,0,//no base classes
  &(vtc_S2109C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2109C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2109C5),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  S2109C3  : S2109C4 , S2109C5 {
  void *s2109c3f0;
  virtual  ~S2109C3(); // _ZN7S2109C3D1Ev
  virtual void  v9(); // _ZN7S2109C32v9Ev
  virtual void  v10(); // _ZN7S2109C33v10Ev
  virtual void  v11(); // _ZN7S2109C33v11Ev
  virtual void  v12(); // _ZN7S2109C33v12Ev
  S2109C3(); // tgen
};
//SIG(-1 S2109C3) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S2109C3 ::~S2109C3(){ note_dtor("S2109C3", this);}
void  S2109C3 ::v9(){vfunc_called(this, "_ZN7S2109C32v9Ev");}
void  S2109C3 ::v10(){vfunc_called(this, "_ZN7S2109C33v10Ev");}
void  S2109C3 ::v11(){vfunc_called(this, "_ZN7S2109C33v11Ev");}
void  S2109C3 ::v12(){vfunc_called(this, "_ZN7S2109C33v12Ev");}
S2109C3 ::S2109C3(){ note_ctor("S2109C3", this);} // tgen

static void Test_S2109C3()
{
  extern Class_Descriptor cd_S2109C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2109C3, buf);
    S2109C3 *dp, &lv = *(dp=new (buf) S2109C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2109C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2109C3)");
    check_base_class_offset(lv, (S2109C4*), 0, "S2109C3");
    check_base_class_offset(lv, (S2109C5*), ABISELECT(16,8), "S2109C3");
    check_field_offset(lv, s2109c3f0, ABISELECT(56,36), "S2109C3.s2109c3f0");
    test_class_info(&lv, &cd_S2109C3);
    dp->~S2109C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2109C3(Test_S2109C3, "S2109C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2109C3C1Ev();
extern void _ZN7S2109C3D1Ev();
Name_Map name_map_S2109C3[] = {
  NSPAIR(_ZN7S2109C3C1Ev),
  NSPAIR(_ZN7S2109C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2109C4;
extern VTBL_ENTRY _ZTI7S2109C4[];
extern  VTBL_ENTRY _ZTV7S2109C4[];
extern Class_Descriptor cd_S2109C5;
extern VTBL_ENTRY _ZTI7S2109C5[];
extern  VTBL_ENTRY _ZTV7S2109C5[];
static Base_Class bases_S2109C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2109C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2109C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2109C3[];
extern void _ZN7S2109C3D1Ev();
extern void _ZN7S2109C3D0Ev();
extern void _ZN7S2109C42v2Ev();
extern void _ZN7S2109C42v3Ev();
extern void _ZN7S2109C42v4Ev();
extern void _ZN7S2109C42v5Ev();
extern void _ZN7S2109C32v9Ev();
extern void _ZN7S2109C33v10Ev();
extern void _ZN7S2109C33v11Ev();
extern void _ZN7S2109C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2109C3D1Ev,_ZThn8_N7S2109C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S2109C3D0Ev,_ZThn8_N7S2109C3D0Ev)();
extern void _ZN7S2109C52v6Ev();
extern void _ZN7S2109C52v7Ev();
extern void _ZN7S2109C52v8Ev();
static  VTBL_ENTRY vtc_S2109C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2109C3[0]),
  (VTBL_ENTRY)&_ZN7S2109C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2109C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2109C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2109C3D1Ev,_ZThn8_N7S2109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2109C3D0Ev,_ZThn8_N7S2109C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2109C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2109C3[];
extern  VTBL_ENTRY _ZTV7S2109C3[];
Class_Descriptor cd_S2109C3 = {  "S2109C3", // class name
  bases_S2109C3, 2,
  &(vtc_S2109C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2109C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2109C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2109C2  : S2109C3 {
  virtual  ~S2109C2(); // _ZN7S2109C2D1Ev
  S2109C2(); // tgen
};
//SIG(-1 S2109C2) C1{ BC2{ BC3{ vd v1 v2 v3 v4 Fp} BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v8 v9 v10 v11 Fp} vd}


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

static void Test_S2109C2()
{
  extern Class_Descriptor cd_S2109C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2109C2, buf);
    S2109C2 *dp, &lv = *(dp=new (buf) S2109C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2109C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2109C2)");
    check_base_class_offset(lv, (S2109C4*)(S2109C3*), 0, "S2109C2");
    check_base_class_offset(lv, (S2109C5*)(S2109C3*), ABISELECT(16,8), "S2109C2");
    check_base_class_offset(lv, (S2109C3*), 0, "S2109C2");
    test_class_info(&lv, &cd_S2109C2);
    dp->~S2109C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2109C2(Test_S2109C2, "S2109C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2109C2C1Ev();
extern void _ZN7S2109C2D1Ev();
Name_Map name_map_S2109C2[] = {
  NSPAIR(_ZN7S2109C2C1Ev),
  NSPAIR(_ZN7S2109C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2109C4;
extern VTBL_ENTRY _ZTI7S2109C4[];
extern  VTBL_ENTRY _ZTV7S2109C4[];
extern Class_Descriptor cd_S2109C5;
extern VTBL_ENTRY _ZTI7S2109C5[];
extern  VTBL_ENTRY _ZTV7S2109C5[];
extern Class_Descriptor cd_S2109C3;
extern VTBL_ENTRY _ZTI7S2109C3[];
extern  VTBL_ENTRY _ZTV7S2109C3[];
static Base_Class bases_S2109C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2109C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2109C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_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_S2109C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2109C2[];
extern void _ZN7S2109C2D1Ev();
extern void _ZN7S2109C2D0Ev();
extern void _ZN7S2109C42v2Ev();
extern void _ZN7S2109C42v3Ev();
extern void _ZN7S2109C42v4Ev();
extern void _ZN7S2109C42v5Ev();
extern void _ZN7S2109C32v9Ev();
extern void _ZN7S2109C33v10Ev();
extern void _ZN7S2109C33v11Ev();
extern void _ZN7S2109C33v12Ev();
extern void ABISELECT(_ZThn16_N7S2109C2D1Ev,_ZThn8_N7S2109C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S2109C2D0Ev,_ZThn8_N7S2109C2D0Ev)();
extern void _ZN7S2109C52v6Ev();
extern void _ZN7S2109C52v7Ev();
extern void _ZN7S2109C52v8Ev();
static  VTBL_ENTRY vtc_S2109C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2109C2[0]),
  (VTBL_ENTRY)&_ZN7S2109C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2109C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2109C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2109C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2109C2D1Ev,_ZThn8_N7S2109C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2109C2D0Ev,_ZThn8_N7S2109C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2109C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2109C2[];
extern  VTBL_ENTRY _ZTV7S2109C2[];
Class_Descriptor cd_S2109C2 = {  "S2109C2", // class name
  bases_S2109C2, 3,
  &(vtc_S2109C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2109C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2109C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2109C1  : S2109C2 {
  virtual void  v1(); // _ZN7S2109C12v1Ev
  ~S2109C1(); // tgen
  S2109C1(); // tgen
};
//SIG(1 S2109C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 Fp} BC5{ vd v6 v7 v8 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} vd v9 v10 v11 v12 Fp} vd} v1}


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

static void Test_S2109C1()
{
  extern Class_Descriptor cd_S2109C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2109C1, buf);
    S2109C1 *dp, &lv = *(dp=new (buf) S2109C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2109C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2109C1)");
    check_base_class_offset(lv, (S2109C4*)(S2109C3*)(S2109C2*), 0, "S2109C1");
    check_base_class_offset(lv, (S2109C5*)(S2109C3*)(S2109C2*), ABISELECT(16,8), "S2109C1");
    check_base_class_offset(lv, (S2109C3*)(S2109C2*), 0, "S2109C1");
    check_base_class_offset(lv, (S2109C2*), 0, "S2109C1");
    test_class_info(&lv, &cd_S2109C1);
    dp->~S2109C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2109C1(Test_S2109C1, "S2109C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2109C1C1Ev();
extern void _ZN7S2109C1D1Ev();
Name_Map name_map_S2109C1[] = {
  NSPAIR(_ZN7S2109C1C1Ev),
  NSPAIR(_ZN7S2109C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2109C4;
extern VTBL_ENTRY _ZTI7S2109C4[];
extern  VTBL_ENTRY _ZTV7S2109C4[];
extern Class_Descriptor cd_S2109C5;
extern VTBL_ENTRY _ZTI7S2109C5[];
extern  VTBL_ENTRY _ZTV7S2109C5[];
extern Class_Descriptor cd_S2109C3;
extern VTBL_ENTRY _ZTI7S2109C3[];
extern  VTBL_ENTRY _ZTV7S2109C3[];
extern Class_Descriptor cd_S2109C2;
extern VTBL_ENTRY _ZTI7S2109C2[];
extern  VTBL_ENTRY _ZTV7S2109C2[];
static Base_Class bases_S2109C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2109C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2109C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2109C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2109C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2109C1[];
extern void _ZN7S2109C1D1Ev();
extern void _ZN7S2109C1D0Ev();
extern void _ZN7S2109C42v2Ev();
extern void _ZN7S2109C42v3Ev();
extern void _ZN7S2109C42v4Ev();
extern void _ZN7S2109C42v5Ev();
extern void _ZN7S2109C32v9Ev();
extern void _ZN7S2109C33v10Ev();
extern void _ZN7S2109C33v11Ev();
extern void _ZN7S2109C33v12Ev();
extern void _ZN7S2109C12v1Ev();
extern void ABISELECT(_ZThn16_N7S2109C1D1Ev,_ZThn8_N7S2109C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2109C1D0Ev,_ZThn8_N7S2109C1D0Ev)();
extern void _ZN7S2109C52v6Ev();
extern void _ZN7S2109C52v7Ev();
extern void _ZN7S2109C52v8Ev();
static  VTBL_ENTRY vtc_S2109C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2109C1[0]),
  (VTBL_ENTRY)&_ZN7S2109C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2109C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2109C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2109C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2109C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2109C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2109C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2109C1D1Ev,_ZThn8_N7S2109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S2109C1D0Ev,_ZThn8_N7S2109C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2109C52v6Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v7Ev,
  (VTBL_ENTRY)&_ZN7S2109C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S2109C1[];
extern  VTBL_ENTRY _ZTV7S2109C1[];
Class_Descriptor cd_S2109C1 = {  "S2109C1", // class name
  bases_S2109C1, 4,
  &(vtc_S2109C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2109C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2109C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7800C4  {
  int s7800c4f0;
  virtual void  v4(); // _ZN7S7800C42v4Ev
  virtual void  v5(); // _ZN7S7800C42v5Ev
  virtual void  v6(); // _ZN7S7800C42v6Ev
  virtual void  v7(); // _ZN7S7800C42v7Ev
  virtual void  v8(); // _ZN7S7800C42v8Ev
  ~S7800C4(); // tgen
  S7800C4(); // tgen
};
//SIG(-1 S7800C4) C1{ v1 v2 v3 v4 v5 Fi}


void  S7800C4 ::v4(){vfunc_called(this, "_ZN7S7800C42v4Ev");}
void  S7800C4 ::v5(){vfunc_called(this, "_ZN7S7800C42v5Ev");}
void  S7800C4 ::v6(){vfunc_called(this, "_ZN7S7800C42v6Ev");}
void  S7800C4 ::v7(){vfunc_called(this, "_ZN7S7800C42v7Ev");}
void  S7800C4 ::v8(){vfunc_called(this, "_ZN7S7800C42v8Ev");}
S7800C4 ::~S7800C4(){ note_dtor("S7800C4", this);} // tgen
S7800C4 ::S7800C4(){ note_ctor("S7800C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7800C4C1Ev();
extern void _ZN7S7800C4D1Ev();
Name_Map name_map_S7800C4[] = {
  NSPAIR(_ZN7S7800C4C1Ev),
  NSPAIR(_ZN7S7800C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7800C4[];
extern void _ZN7S7800C42v4Ev();
extern void _ZN7S7800C42v5Ev();
extern void _ZN7S7800C42v6Ev();
extern void _ZN7S7800C42v7Ev();
extern void _ZN7S7800C42v8Ev();
static  VTBL_ENTRY vtc_S7800C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7800C4[0]),
  (VTBL_ENTRY)&_ZN7S7800C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S7800C4[];
extern  VTBL_ENTRY _ZTV7S7800C4[];
Class_Descriptor cd_S7800C4 = {  "S7800C4", // class name
  0,0,//no base classes
  &(vtc_S7800C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7800C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7800C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7800C3  : virtual S7800C4 {
  void *s7800c3f0;
  virtual void  v9(); // _ZN7S7800C32v9Ev
  virtual void  v10(); // _ZN7S7800C33v10Ev
  virtual void  v11(); // _ZN7S7800C33v11Ev
  virtual void  v12(); // _ZN7S7800C33v12Ev
  virtual void  v13(); // _ZN7S7800C33v13Ev
  virtual void  v14(); // _ZN7S7800C33v14Ev
  virtual void  v15(); // _ZN7S7800C33v15Ev
  ~S7800C3(); // tgen
  S7800C3(); // tgen
};
//SIG(-1 S7800C3) C1{ VBC2{ v8 v9 v10 v11 v12 Fi} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S7800C3 ::v9(){vfunc_called(this, "_ZN7S7800C32v9Ev");}
void  S7800C3 ::v10(){vfunc_called(this, "_ZN7S7800C33v10Ev");}
void  S7800C3 ::v11(){vfunc_called(this, "_ZN7S7800C33v11Ev");}
void  S7800C3 ::v12(){vfunc_called(this, "_ZN7S7800C33v12Ev");}
void  S7800C3 ::v13(){vfunc_called(this, "_ZN7S7800C33v13Ev");}
void  S7800C3 ::v14(){vfunc_called(this, "_ZN7S7800C33v14Ev");}
void  S7800C3 ::v15(){vfunc_called(this, "_ZN7S7800C33v15Ev");}
S7800C3 ::~S7800C3(){ note_dtor("S7800C3", this);} // tgen
S7800C3 ::S7800C3(){ note_ctor("S7800C3", this);} // tgen

static void Test_S7800C3()
{
  extern Class_Descriptor cd_S7800C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7800C3, buf);
    S7800C3 *dp, &lv = *(dp=new (buf) S7800C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7800C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7800C3)");
    check_base_class_offset(lv, (S7800C4*), ABISELECT(16,8), "S7800C3");
    check_field_offset(lv, s7800c3f0, ABISELECT(8,4), "S7800C3.s7800c3f0");
    test_class_info(&lv, &cd_S7800C3);
    dp->~S7800C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7800C3(Test_S7800C3, "S7800C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7800C3C1Ev();
extern void _ZN7S7800C3D1Ev();
Name_Map name_map_S7800C3[] = {
  NSPAIR(_ZN7S7800C3C1Ev),
  NSPAIR(_ZN7S7800C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7800C4;
extern VTBL_ENTRY _ZTI7S7800C4[];
extern  VTBL_ENTRY _ZTV7S7800C4[];
static Base_Class bases_S7800C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7800C4,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7800C3[];
extern void _ZN7S7800C32v9Ev();
extern void _ZN7S7800C33v10Ev();
extern void _ZN7S7800C33v11Ev();
extern void _ZN7S7800C33v12Ev();
extern void _ZN7S7800C33v13Ev();
extern void _ZN7S7800C33v14Ev();
extern void _ZN7S7800C33v15Ev();
extern void _ZN7S7800C42v4Ev();
extern void _ZN7S7800C42v5Ev();
extern void _ZN7S7800C42v6Ev();
extern void _ZN7S7800C42v7Ev();
extern void _ZN7S7800C42v8Ev();
static  VTBL_ENTRY vtc_S7800C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7800C3[0]),
  (VTBL_ENTRY)&_ZN7S7800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7800C3[0]),
  (VTBL_ENTRY)&_ZN7S7800C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v8Ev,
};
extern VTBL_ENTRY _ZTV7S7800C3[];
static  VTT_ENTRY vtt_S7800C3[] = {
  {&(_ZTV7S7800C3[3]),  3,22},
  {&(_ZTV7S7800C3[17]),  17,22},
};
extern VTBL_ENTRY _ZTI7S7800C3[];
extern  VTBL_ENTRY _ZTV7S7800C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7800C3[];
Class_Descriptor cd_S7800C3 = {  "S7800C3", // class name
  bases_S7800C3, 1,
  &(vtc_S7800C3[0]), // expected_vtbl_contents
  &(vtt_S7800C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7800C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7800C3),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7800C3),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  S7800C2  : virtual S7800C3 {
  virtual void  v16(); // _ZN7S7800C23v16Ev
  virtual void  v17(); // _ZN7S7800C23v17Ev
  virtual void  v18(); // _ZN7S7800C23v18Ev
  virtual void  v19(); // _ZN7S7800C23v19Ev
  virtual void  v20(); // _ZN7S7800C23v20Ev
  ~S7800C2(); // tgen
  S7800C2(); // tgen
};
//SIG(-1 S7800C2) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 Fi} v11 v12 v13 v14 v15 v16 v17 Fp} v1 v2 v3 v4 v5}


void  S7800C2 ::v16(){vfunc_called(this, "_ZN7S7800C23v16Ev");}
void  S7800C2 ::v17(){vfunc_called(this, "_ZN7S7800C23v17Ev");}
void  S7800C2 ::v18(){vfunc_called(this, "_ZN7S7800C23v18Ev");}
void  S7800C2 ::v19(){vfunc_called(this, "_ZN7S7800C23v19Ev");}
void  S7800C2 ::v20(){vfunc_called(this, "_ZN7S7800C23v20Ev");}
S7800C2 ::~S7800C2(){ note_dtor("S7800C2", this);} // tgen
S7800C2 ::S7800C2(){ note_ctor("S7800C2", this);} // tgen

static void Test_S7800C2()
{
  extern Class_Descriptor cd_S7800C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7800C2, buf);
    S7800C2 *dp, &lv = *(dp=new (buf) S7800C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7800C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7800C2)");
    check_base_class_offset(lv, (S7800C4*)(S7800C3*), ABISELECT(24,12), "S7800C2");
    check_base_class_offset(lv, (S7800C3*), ABISELECT(8,4), "S7800C2");
    test_class_info(&lv, &cd_S7800C2);
    dp->~S7800C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7800C2(Test_S7800C2, "S7800C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7800C2C1Ev();
extern void _ZN7S7800C2D1Ev();
Name_Map name_map_S7800C2[] = {
  NSPAIR(_ZN7S7800C2C1Ev),
  NSPAIR(_ZN7S7800C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7800C4;
extern VTBL_ENTRY _ZTI7S7800C4[];
extern  VTBL_ENTRY _ZTV7S7800C4[];
extern Class_Descriptor cd_S7800C3;
extern VTBL_ENTRY _ZTI7S7800C3[];
extern  VTBL_ENTRY _ZTV7S7800C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7800C3[];
static Base_Class bases_S7800C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7800C4,    ABISELECT(24,12), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //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_S7800C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7800C2[];
extern void _ZN7S7800C23v16Ev();
extern void _ZN7S7800C23v17Ev();
extern void _ZN7S7800C23v18Ev();
extern void _ZN7S7800C23v19Ev();
extern void _ZN7S7800C23v20Ev();
extern void _ZN7S7800C32v9Ev();
extern void _ZN7S7800C33v10Ev();
extern void _ZN7S7800C33v11Ev();
extern void _ZN7S7800C33v12Ev();
extern void _ZN7S7800C33v13Ev();
extern void _ZN7S7800C33v14Ev();
extern void _ZN7S7800C33v15Ev();
extern void _ZN7S7800C42v4Ev();
extern void _ZN7S7800C42v5Ev();
extern void _ZN7S7800C42v6Ev();
extern void _ZN7S7800C42v7Ev();
extern void _ZN7S7800C42v8Ev();
static  VTBL_ENTRY vtc_S7800C2[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7800C2[0]),
  (VTBL_ENTRY)&_ZN7S7800C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7800C2[0]),
  (VTBL_ENTRY)&_ZN7S7800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7800C2[0]),
  (VTBL_ENTRY)&_ZN7S7800C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v8Ev,
};
extern VTBL_ENTRY _ZTV7S7800C2[];
extern void _ZN7S7800C32v9Ev();
extern void _ZN7S7800C33v10Ev();
extern void _ZN7S7800C33v11Ev();
extern void _ZN7S7800C33v12Ev();
extern void _ZN7S7800C33v13Ev();
extern void _ZN7S7800C33v14Ev();
extern void _ZN7S7800C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7800C3__7S7800C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7800C3[0]),
  (VTBL_ENTRY)&_ZN7S7800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v15Ev,
};
extern void _ZN7S7800C42v4Ev();
extern void _ZN7S7800C42v5Ev();
extern void _ZN7S7800C42v6Ev();
extern void _ZN7S7800C42v7Ev();
extern void _ZN7S7800C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7800C4__7S7800C3__7S7800C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7800C3[0]),
  (VTBL_ENTRY)&_ZN7S7800C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v8Ev,
};
static  VTT_ENTRY vtt_S7800C2[] = {
  {&(_ZTV7S7800C2[4]),  4,38},
  {&(_ZTV7S7800C2[19]),  19,38},
  {&(_ZTV7S7800C2[33]),  33,38},
  {&(_tg__ZTV7S7800C3__7S7800C2[3]),  3,10},
  {&(_tg__ZTV7S7800C4__7S7800C3__7S7800C2[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7800C2[];
extern  VTBL_ENTRY _ZTV7S7800C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7800C2[];
Class_Descriptor cd_S7800C2 = {  "S7800C2", // class name
  bases_S7800C2, 2,
  &(vtc_S7800C2[0]), // expected_vtbl_contents
  &(vtt_S7800C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7800C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7800C2),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7800C2),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  S7800C1  : S7800C2 {
  virtual  ~S7800C1(); // _ZN7S7800C1D2Ev
  virtual void  v1(); // _ZN7S7800C12v1Ev
  virtual void  v2(); // _ZN7S7800C12v2Ev
  virtual void  v3(); // _ZN7S7800C12v3Ev
  S7800C1(); // tgen
};
//SIG(1 S7800C1) C1{ BC2{ VBC3{ VBC4{ v4 v5 v6 v7 v8 Fi} v9 v10 v11 v12 v13 v14 v15 Fp} v16 v17 v18 v19 v20} vd v1 v2 v3}


 S7800C1 ::~S7800C1(){ note_dtor("S7800C1", this);}
void  S7800C1 ::v1(){vfunc_called(this, "_ZN7S7800C12v1Ev");}
void  S7800C1 ::v2(){vfunc_called(this, "_ZN7S7800C12v2Ev");}
void  S7800C1 ::v3(){vfunc_called(this, "_ZN7S7800C12v3Ev");}
S7800C1 ::S7800C1(){ note_ctor("S7800C1", this);} // tgen

static void Test_S7800C1()
{
  extern Class_Descriptor cd_S7800C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7800C1, buf);
    S7800C1 *dp, &lv = *(dp=new (buf) S7800C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7800C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7800C1)");
    check_base_class_offset(lv, (S7800C4*)(S7800C3*), ABISELECT(24,12), "S7800C1");
    check_base_class_offset(lv, (S7800C3*)(S7800C2*), ABISELECT(8,4), "S7800C1");
    check_base_class_offset(lv, (S7800C2*), 0, "S7800C1");
    test_class_info(&lv, &cd_S7800C1);
    dp->~S7800C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7800C1(Test_S7800C1, "S7800C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7800C1C1Ev();
extern void _ZN7S7800C1D2Ev();
Name_Map name_map_S7800C1[] = {
  NSPAIR(_ZN7S7800C1C1Ev),
  NSPAIR(_ZN7S7800C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7800C4;
extern VTBL_ENTRY _ZTI7S7800C4[];
extern  VTBL_ENTRY _ZTV7S7800C4[];
extern Class_Descriptor cd_S7800C3;
extern VTBL_ENTRY _ZTI7S7800C3[];
extern  VTBL_ENTRY _ZTV7S7800C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7800C3[];
extern Class_Descriptor cd_S7800C2;
extern VTBL_ENTRY _ZTI7S7800C2[];
extern  VTBL_ENTRY _ZTV7S7800C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7800C2[];
static Base_Class bases_S7800C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7800C4,    ABISELECT(24,12), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //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_S7800C3,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7800C2,    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 _ZTI7S7800C1[];
extern void _ZN7S7800C23v16Ev();
extern void _ZN7S7800C23v17Ev();
extern void _ZN7S7800C23v18Ev();
extern void _ZN7S7800C23v19Ev();
extern void _ZN7S7800C23v20Ev();
extern void _ZN7S7800C1D1Ev();
extern void _ZN7S7800C1D0Ev();
extern void _ZN7S7800C12v1Ev();
extern void _ZN7S7800C12v2Ev();
extern void _ZN7S7800C12v3Ev();
extern void _ZN7S7800C32v9Ev();
extern void _ZN7S7800C33v10Ev();
extern void _ZN7S7800C33v11Ev();
extern void _ZN7S7800C33v12Ev();
extern void _ZN7S7800C33v13Ev();
extern void _ZN7S7800C33v14Ev();
extern void _ZN7S7800C33v15Ev();
extern void _ZN7S7800C42v4Ev();
extern void _ZN7S7800C42v5Ev();
extern void _ZN7S7800C42v6Ev();
extern void _ZN7S7800C42v7Ev();
extern void _ZN7S7800C42v8Ev();
static  VTBL_ENTRY vtc_S7800C1[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7800C1[0]),
  (VTBL_ENTRY)&_ZN7S7800C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7800C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7800C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7800C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7800C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7800C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7800C1[0]),
  (VTBL_ENTRY)&_ZN7S7800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7800C1[0]),
  (VTBL_ENTRY)&_ZN7S7800C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v8Ev,
};
extern VTBL_ENTRY _ZTV7S7800C1[];
extern void _ZN7S7800C23v16Ev();
extern void _ZN7S7800C23v17Ev();
extern void _ZN7S7800C23v18Ev();
extern void _ZN7S7800C23v19Ev();
extern void _ZN7S7800C23v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7800C2__7S7800C1[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7800C2[0]),
  (VTBL_ENTRY)&_ZN7S7800C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7800C23v20Ev,
};
extern void _ZN7S7800C32v9Ev();
extern void _ZN7S7800C33v10Ev();
extern void _ZN7S7800C33v11Ev();
extern void _ZN7S7800C33v12Ev();
extern void _ZN7S7800C33v13Ev();
extern void _ZN7S7800C33v14Ev();
extern void _ZN7S7800C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7800C3__7S7800C2__7S7800C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7800C2[0]),
  (VTBL_ENTRY)&_ZN7S7800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v15Ev,
};
extern void _ZN7S7800C42v4Ev();
extern void _ZN7S7800C42v5Ev();
extern void _ZN7S7800C42v6Ev();
extern void _ZN7S7800C42v7Ev();
extern void _ZN7S7800C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7800C4__7S7800C2__7S7800C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7800C2[0]),
  (VTBL_ENTRY)&_ZN7S7800C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v8Ev,
};
extern void _ZN7S7800C32v9Ev();
extern void _ZN7S7800C33v10Ev();
extern void _ZN7S7800C33v11Ev();
extern void _ZN7S7800C33v12Ev();
extern void _ZN7S7800C33v13Ev();
extern void _ZN7S7800C33v14Ev();
extern void _ZN7S7800C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7800C3__7S7800C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7800C3[0]),
  (VTBL_ENTRY)&_ZN7S7800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7800C33v15Ev,
};
extern void _ZN7S7800C42v4Ev();
extern void _ZN7S7800C42v5Ev();
extern void _ZN7S7800C42v6Ev();
extern void _ZN7S7800C42v7Ev();
extern void _ZN7S7800C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7800C4__7S7800C3__7S7800C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7800C3[0]),
  (VTBL_ENTRY)&_ZN7S7800C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7800C42v8Ev,
};
static  VTT_ENTRY vtt_S7800C1[] = {
  {&(_ZTV7S7800C1[4]),  4,43},
  {&(_tg__ZTV7S7800C2__7S7800C1[4]),  4,9},
  {&(_tg__ZTV7S7800C3__7S7800C2__7S7800C1[10]),  10,17},
  {&(_tg__ZTV7S7800C4__7S7800C2__7S7800C1[7]),  7,12},
  {&(_ZTV7S7800C1[24]),  24,43},
  {&(_ZTV7S7800C1[38]),  38,43},
  {&(_tg__ZTV7S7800C3__7S7800C1[3]),  3,10},
  {&(_tg__ZTV7S7800C4__7S7800C3__7S7800C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7800C1[];
extern  VTBL_ENTRY _ZTV7S7800C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7800C1[];
Class_Descriptor cd_S7800C1 = {  "S7800C1", // class name
  bases_S7800C1, 3,
  &(vtc_S7800C1[0]), // expected_vtbl_contents
  &(vtt_S7800C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7800C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7800C1),43, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7800C1),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4509C3  {
  void *s4509c3f0;
  virtual  ~S4509C3(); // _ZN7S4509C3D1Ev
  virtual void  v2(); // _ZN7S4509C32v2Ev
  virtual void  v3(); // _ZN7S4509C32v3Ev
  virtual void  v4(); // _ZN7S4509C32v4Ev
  virtual void  v5(); // _ZN7S4509C32v5Ev
  S4509C3(); // tgen
};
//SIG(-1 S4509C3) C1{ vd v1 v2 v3 v4 Fp}


 S4509C3 ::~S4509C3(){ note_dtor("S4509C3", this);}
void  S4509C3 ::v2(){vfunc_called(this, "_ZN7S4509C32v2Ev");}
void  S4509C3 ::v3(){vfunc_called(this, "_ZN7S4509C32v3Ev");}
void  S4509C3 ::v4(){vfunc_called(this, "_ZN7S4509C32v4Ev");}
void  S4509C3 ::v5(){vfunc_called(this, "_ZN7S4509C32v5Ev");}
S4509C3 ::S4509C3(){ note_ctor("S4509C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4509C3C1Ev();
extern void _ZN7S4509C3D1Ev();
Name_Map name_map_S4509C3[] = {
  NSPAIR(_ZN7S4509C3C1Ev),
  NSPAIR(_ZN7S4509C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4509C3[];
extern void _ZN7S4509C3D1Ev();
extern void _ZN7S4509C3D0Ev();
extern void _ZN7S4509C32v2Ev();
extern void _ZN7S4509C32v3Ev();
extern void _ZN7S4509C32v4Ev();
extern void _ZN7S4509C32v5Ev();
static  VTBL_ENTRY vtc_S4509C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4509C3[0]),
  (VTBL_ENTRY)&_ZN7S4509C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4509C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4509C3[];
extern  VTBL_ENTRY _ZTV7S4509C3[];
Class_Descriptor cd_S4509C3 = {  "S4509C3", // class name
  0,0,//no base classes
  &(vtc_S4509C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4509C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4509C3),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  S4509C4  {
  ::S2123C20_nt s4509c4f0;
  int s4509c4f1[2];
  char s4509c4f2;
  virtual  ~S4509C4(); // _ZN7S4509C4D1Ev
  virtual void  v6(); // _ZN7S4509C42v6Ev
  virtual void  v7(); // _ZN7S4509C42v7Ev
  virtual void  v8(); // _ZN7S4509C42v8Ev
  S4509C4(); // tgen
};
//SIG(-1 S4509C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4509C4 ::~S4509C4(){ note_dtor("S4509C4", this);}
void  S4509C4 ::v6(){vfunc_called(this, "_ZN7S4509C42v6Ev");}
void  S4509C4 ::v7(){vfunc_called(this, "_ZN7S4509C42v7Ev");}
void  S4509C4 ::v8(){vfunc_called(this, "_ZN7S4509C42v8Ev");}
S4509C4 ::S4509C4(){ note_ctor("S4509C4", this);} // tgen

static void Test_S4509C4()
{
  extern Class_Descriptor cd_S4509C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4509C4, buf);
    S4509C4 *dp, &lv = *(dp=new (buf) S4509C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4509C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4509C4)");
    check_field_offset(lv, s4509c4f0, ABISELECT(8,4), "S4509C4.s4509c4f0");
    check_field_offset(lv, s4509c4f1, ABISELECT(24,16), "S4509C4.s4509c4f1");
    check_field_offset(lv, s4509c4f2, ABISELECT(32,24), "S4509C4.s4509c4f2");
    test_class_info(&lv, &cd_S4509C4);
    dp->~S4509C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4509C4(Test_S4509C4, "S4509C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4509C4C1Ev();
extern void _ZN7S4509C4D1Ev();
Name_Map name_map_S4509C4[] = {
  NSPAIR(_ZN7S4509C4C1Ev),
  NSPAIR(_ZN7S4509C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4509C4[];
extern void _ZN7S4509C4D1Ev();
extern void _ZN7S4509C4D0Ev();
extern void _ZN7S4509C42v6Ev();
extern void _ZN7S4509C42v7Ev();
extern void _ZN7S4509C42v8Ev();
static  VTBL_ENTRY vtc_S4509C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4509C4[0]),
  (VTBL_ENTRY)&_ZN7S4509C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4509C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4509C42v6Ev,
  (VTBL_ENTRY)&_ZN7S4509C42v7Ev,
  (VTBL_ENTRY)&_ZN7S4509C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S4509C4[];
extern  VTBL_ENTRY _ZTV7S4509C4[];
Class_Descriptor cd_S4509C4 = {  "S4509C4", // class name
  0,0,//no base classes
  &(vtc_S4509C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4509C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4509C4),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  S4509C2  : S4509C3 , S4509C4 {
  void *s4509c2f0;
  virtual  ~S4509C2(); // _ZN7S4509C2D1Ev
  virtual void  v9(); // _ZN7S4509C22v9Ev
  virtual void  v10(); // _ZN7S4509C23v10Ev
  virtual void  v11(); // _ZN7S4509C23v11Ev
  virtual void  v12(); // _ZN7S4509C23v12Ev
  S4509C2(); // tgen
};
//SIG(-1 S4509C2) C1{ BC2{ vd v5 v6 v7 v8 Fp} BC3{ vd v9 v10 v11 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp}


 S4509C2 ::~S4509C2(){ note_dtor("S4509C2", this);}
void  S4509C2 ::v9(){vfunc_called(this, "_ZN7S4509C22v9Ev");}
void  S4509C2 ::v10(){vfunc_called(this, "_ZN7S4509C23v10Ev");}
void  S4509C2 ::v11(){vfunc_called(this, "_ZN7S4509C23v11Ev");}
void  S4509C2 ::v12(){vfunc_called(this, "_ZN7S4509C23v12Ev");}
S4509C2 ::S4509C2(){ note_ctor("S4509C2", this);} // tgen

static void Test_S4509C2()
{
  extern Class_Descriptor cd_S4509C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4509C2, buf);
    S4509C2 *dp, &lv = *(dp=new (buf) S4509C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4509C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4509C2)");
    check_base_class_offset(lv, (S4509C3*), 0, "S4509C2");
    check_base_class_offset(lv, (S4509C4*), ABISELECT(16,8), "S4509C2");
    check_field_offset(lv, s4509c2f0, ABISELECT(56,36), "S4509C2.s4509c2f0");
    test_class_info(&lv, &cd_S4509C2);
    dp->~S4509C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4509C2(Test_S4509C2, "S4509C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4509C2C1Ev();
extern void _ZN7S4509C2D1Ev();
Name_Map name_map_S4509C2[] = {
  NSPAIR(_ZN7S4509C2C1Ev),
  NSPAIR(_ZN7S4509C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4509C3;
extern VTBL_ENTRY _ZTI7S4509C3[];
extern  VTBL_ENTRY _ZTV7S4509C3[];
extern Class_Descriptor cd_S4509C4;
extern VTBL_ENTRY _ZTI7S4509C4[];
extern  VTBL_ENTRY _ZTV7S4509C4[];
static Base_Class bases_S4509C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4509C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4509C4,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4509C2[];
extern void _ZN7S4509C2D1Ev();
extern void _ZN7S4509C2D0Ev();
extern void _ZN7S4509C32v2Ev();
extern void _ZN7S4509C32v3Ev();
extern void _ZN7S4509C32v4Ev();
extern void _ZN7S4509C32v5Ev();
extern void _ZN7S4509C22v9Ev();
extern void _ZN7S4509C23v10Ev();
extern void _ZN7S4509C23v11Ev();
extern void _ZN7S4509C23v12Ev();
extern void ABISELECT(_ZThn16_N7S4509C2D1Ev,_ZThn8_N7S4509C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S4509C2D0Ev,_ZThn8_N7S4509C2D0Ev)();
extern void _ZN7S4509C42v6Ev();
extern void _ZN7S4509C42v7Ev();
extern void _ZN7S4509C42v8Ev();
static  VTBL_ENTRY vtc_S4509C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4509C2[0]),
  (VTBL_ENTRY)&_ZN7S4509C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4509C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4509C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4509C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4509C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4509C23v12Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4509C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4509C2D1Ev,_ZThn8_N7S4509C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4509C2D0Ev,_ZThn8_N7S4509C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4509C42v6Ev,
  (VTBL_ENTRY)&_ZN7S4509C42v7Ev,
  (VTBL_ENTRY)&_ZN7S4509C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S4509C2[];
extern  VTBL_ENTRY _ZTV7S4509C2[];
Class_Descriptor cd_S4509C2 = {  "S4509C2", // class name
  bases_S4509C2, 2,
  &(vtc_S4509C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4509C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4509C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4509C1  : S4509C2 {
  virtual void  v1(); // _ZN7S4509C12v1Ev
  ~S4509C1(); // tgen
  S4509C1(); // tgen
};
//SIG(1 S4509C1) C1{ BC2{ BC3{ vd v2 v3 v4 v5 Fp} BC4{ vd v6 v7 v8 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v9 v10 v11 v12 Fp} v1}


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

static void Test_S4509C1()
{
  extern Class_Descriptor cd_S4509C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4509C1, buf);
    S4509C1 *dp, &lv = *(dp=new (buf) S4509C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4509C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4509C1)");
    check_base_class_offset(lv, (S4509C3*)(S4509C2*), 0, "S4509C1");
    check_base_class_offset(lv, (S4509C4*)(S4509C2*), ABISELECT(16,8), "S4509C1");
    check_base_class_offset(lv, (S4509C2*), 0, "S4509C1");
    test_class_info(&lv, &cd_S4509C1);
    dp->~S4509C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4509C1(Test_S4509C1, "S4509C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4509C1C1Ev();
extern void _ZN7S4509C1D1Ev();
Name_Map name_map_S4509C1[] = {
  NSPAIR(_ZN7S4509C1C1Ev),
  NSPAIR(_ZN7S4509C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4509C3;
extern VTBL_ENTRY _ZTI7S4509C3[];
extern  VTBL_ENTRY _ZTV7S4509C3[];
extern Class_Descriptor cd_S4509C4;
extern VTBL_ENTRY _ZTI7S4509C4[];
extern  VTBL_ENTRY _ZTV7S4509C4[];
extern Class_Descriptor cd_S4509C2;
extern VTBL_ENTRY _ZTI7S4509C2[];
extern  VTBL_ENTRY _ZTV7S4509C2[];
static Base_Class bases_S4509C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4509C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4509C4,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4509C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4509C1[];
extern void _ZN7S4509C1D1Ev();
extern void _ZN7S4509C1D0Ev();
extern void _ZN7S4509C32v2Ev();
extern void _ZN7S4509C32v3Ev();
extern void _ZN7S4509C32v4Ev();
extern void _ZN7S4509C32v5Ev();
extern void _ZN7S4509C22v9Ev();
extern void _ZN7S4509C23v10Ev();
extern void _ZN7S4509C23v11Ev();
extern void _ZN7S4509C23v12Ev();
extern void _ZN7S4509C12v1Ev();
extern void ABISELECT(_ZThn16_N7S4509C1D1Ev,_ZThn8_N7S4509C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4509C1D0Ev,_ZThn8_N7S4509C1D0Ev)();
extern void _ZN7S4509C42v6Ev();
extern void _ZN7S4509C42v7Ev();
extern void _ZN7S4509C42v8Ev();
static  VTBL_ENTRY vtc_S4509C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4509C1[0]),
  (VTBL_ENTRY)&_ZN7S4509C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4509C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4509C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4509C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4509C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4509C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4509C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4509C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4509C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4509C1D1Ev,_ZThn8_N7S4509C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4509C1D0Ev,_ZThn8_N7S4509C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4509C42v6Ev,
  (VTBL_ENTRY)&_ZN7S4509C42v7Ev,
  (VTBL_ENTRY)&_ZN7S4509C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S4509C1[];
extern  VTBL_ENTRY _ZTV7S4509C1[];
Class_Descriptor cd_S4509C1 = {  "S4509C1", // class name
  bases_S4509C1, 3,
  &(vtc_S4509C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4509C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4509C1),20, //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  S15951C2  {
  int s15951c2f0;
  void *s15951c2f1[3];
  int s15951c2f2;
  void *s15951c2f3[10];
  int s15951c2f4;
  void *s15951c2f5[8];
  void  mf15951c2(); // _ZN8S15951C29mf15951c2Ev
};
//SIG(-1 S15951C2) C1{ m Fi Fp[3] Fi Fp[10] Fi Fp[8]}


void  S15951C2 ::mf15951c2(){}

static void Test_S15951C2()
{
  {
    init_simple_test("S15951C2");
    S15951C2 lv;
    check2(sizeof(lv), ABISELECT(192,96), "sizeof(S15951C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15951C2)");
    check_field_offset(lv, s15951c2f0, 0, "S15951C2.s15951c2f0");
    check_field_offset(lv, s15951c2f1, ABISELECT(8,4), "S15951C2.s15951c2f1");
    check_field_offset(lv, s15951c2f2, ABISELECT(32,16), "S15951C2.s15951c2f2");
    check_field_offset(lv, s15951c2f3, ABISELECT(40,20), "S15951C2.s15951c2f3");
    check_field_offset(lv, s15951c2f4, ABISELECT(120,60), "S15951C2.s15951c2f4");
    check_field_offset(lv, s15951c2f5, ABISELECT(128,64), "S15951C2.s15951c2f5");
  }
}
static Arrange_To_Call_Me vS15951C2(Test_S15951C2, "S15951C2", ABISELECT(192,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15951C3  {
  int s15951c3f0[3];
  void *s15951c3f1[7];
  int s15951c3f2[3];
  void  mf15951c3(); // _ZN8S15951C39mf15951c3Ev
};
//SIG(-1 S15951C3) C1{ m Fi[3] Fp[7] Fi[3]}


void  S15951C3 ::mf15951c3(){}

static void Test_S15951C3()
{
  {
    init_simple_test("S15951C3");
    S15951C3 lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S15951C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15951C3)");
    check_field_offset(lv, s15951c3f0, 0, "S15951C3.s15951c3f0");
    check_field_offset(lv, s15951c3f1, ABISELECT(16,12), "S15951C3.s15951c3f1");
    check_field_offset(lv, s15951c3f2, ABISELECT(72,40), "S15951C3.s15951c3f2");
  }
}
static Arrange_To_Call_Me vS15951C3(Test_S15951C3, "S15951C3", ABISELECT(88,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15951C4  {
  void *s15951c4f0[2];
  int s15951c4f1[37];
  void  mf15951c4(); // _ZN8S15951C49mf15951c4Ev
};
//SIG(-1 S15951C4) C1{ m Fp[2] Fi[37]}


void  S15951C4 ::mf15951c4(){}

static void Test_S15951C4()
{
  {
    init_simple_test("S15951C4");
    S15951C4 lv;
    check2(sizeof(lv), ABISELECT(168,156), "sizeof(S15951C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15951C4)");
    check_field_offset(lv, s15951c4f0, 0, "S15951C4.s15951c4f0");
    check_field_offset(lv, s15951c4f1, ABISELECT(16,8), "S15951C4.s15951c4f1");
  }
}
static Arrange_To_Call_Me vS15951C4(Test_S15951C4, "S15951C4", ABISELECT(168,156));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15951C1  {
  ::S15951C2 s15951c1f0;
  ::S15951C2 s15951c1f1;
  int s15951c1f2;
  void *s15951c1f3;
  ::S15951C3 s15951c1f4;
  ::S15951C4 s15951c1f5;
  void  mf15951c1(); // _ZN8S15951C19mf15951c1Ev
};
//SIG(1 S15951C1) C1{ m FC2{ m Fi Fp[3] Fi Fp[10] Fi Fp[8]} FC2 Fi Fp FC3{ m Fi[3] Fp[7] Fi[3]} FC4{ m Fp[2] Fi[37]}}


void  S15951C1 ::mf15951c1(){}

static void Test_S15951C1()
{
  {
    init_simple_test("S15951C1");
    S15951C1 lv;
    check2(sizeof(lv), ABISELECT(656,408), "sizeof(S15951C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15951C1)");
    check_field_offset(lv, s15951c1f0, 0, "S15951C1.s15951c1f0");
    check_field_offset(lv, s15951c1f1, ABISELECT(192,96), "S15951C1.s15951c1f1");
    check_field_offset(lv, s15951c1f2, ABISELECT(384,192), "S15951C1.s15951c1f2");
    check_field_offset(lv, s15951c1f3, ABISELECT(392,196), "S15951C1.s15951c1f3");
    check_field_offset(lv, s15951c1f4, ABISELECT(400,200), "S15951C1.s15951c1f4");
    check_field_offset(lv, s15951c1f5, ABISELECT(488,252), "S15951C1.s15951c1f5");
  }
}
static Arrange_To_Call_Me vS15951C1(Test_S15951C1, "S15951C1", ABISELECT(656,408));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2977C3  {
  int s2977c3f0;
  virtual void  v1(); // _ZN7S2977C32v1Ev
  virtual void  v2(); // _ZN7S2977C32v2Ev
  virtual void  v3(); // _ZN7S2977C32v3Ev
  virtual void  v4(); // _ZN7S2977C32v4Ev
  virtual void  v5(); // _ZN7S2977C32v5Ev
  ~S2977C3(); // tgen
  S2977C3(); // tgen
};
//SIG(-1 S2977C3) C1{ v1 v2 v3 v4 v5 Fi}


void  S2977C3 ::v1(){vfunc_called(this, "_ZN7S2977C32v1Ev");}
void  S2977C3 ::v2(){vfunc_called(this, "_ZN7S2977C32v2Ev");}
void  S2977C3 ::v3(){vfunc_called(this, "_ZN7S2977C32v3Ev");}
void  S2977C3 ::v4(){vfunc_called(this, "_ZN7S2977C32v4Ev");}
void  S2977C3 ::v5(){vfunc_called(this, "_ZN7S2977C32v5Ev");}
S2977C3 ::~S2977C3(){ note_dtor("S2977C3", this);} // tgen
S2977C3 ::S2977C3(){ note_ctor("S2977C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2977C3C1Ev();
extern void _ZN7S2977C3D1Ev();
Name_Map name_map_S2977C3[] = {
  NSPAIR(_ZN7S2977C3C1Ev),
  NSPAIR(_ZN7S2977C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2977C3[];
extern void _ZN7S2977C32v1Ev();
extern void _ZN7S2977C32v2Ev();
extern void _ZN7S2977C32v3Ev();
extern void _ZN7S2977C32v4Ev();
extern void _ZN7S2977C32v5Ev();
static  VTBL_ENTRY vtc_S2977C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2977C3[0]),
  (VTBL_ENTRY)&_ZN7S2977C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S2977C3[];
extern  VTBL_ENTRY _ZTV7S2977C3[];
Class_Descriptor cd_S2977C3 = {  "S2977C3", // class name
  0,0,//no base classes
  &(vtc_S2977C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2977C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2977C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2977C4  {
  long double s2977c4f0[3];
  virtual void  v6(); // _ZN7S2977C42v6Ev
  virtual void  v7(); // _ZN7S2977C42v7Ev
  virtual void  v8(); // _ZN7S2977C42v8Ev
  virtual void  v9(); // _ZN7S2977C42v9Ev
  virtual void  v10(); // _ZN7S2977C43v10Ev
  virtual void  v11(); // _ZN7S2977C43v11Ev
  virtual void  v12(); // _ZN7S2977C43v12Ev
  ~S2977C4(); // tgen
  S2977C4(); // tgen
};
//SIG(-1 S2977C4) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S2977C4 ::v6(){vfunc_called(this, "_ZN7S2977C42v6Ev");}
void  S2977C4 ::v7(){vfunc_called(this, "_ZN7S2977C42v7Ev");}
void  S2977C4 ::v8(){vfunc_called(this, "_ZN7S2977C42v8Ev");}
void  S2977C4 ::v9(){vfunc_called(this, "_ZN7S2977C42v9Ev");}
void  S2977C4 ::v10(){vfunc_called(this, "_ZN7S2977C43v10Ev");}
void  S2977C4 ::v11(){vfunc_called(this, "_ZN7S2977C43v11Ev");}
void  S2977C4 ::v12(){vfunc_called(this, "_ZN7S2977C43v12Ev");}
S2977C4 ::~S2977C4(){ note_dtor("S2977C4", this);} // tgen
S2977C4 ::S2977C4(){ note_ctor("S2977C4", this);} // tgen

static void Test_S2977C4()
{
  extern Class_Descriptor cd_S2977C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S2977C4, buf);
    S2977C4 *dp, &lv = *(dp=new (buf) S2977C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2977C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2977C4)");
    check_field_offset(lv, s2977c4f0, ABISELECT(16,4), "S2977C4.s2977c4f0");
    test_class_info(&lv, &cd_S2977C4);
    dp->~S2977C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2977C4(Test_S2977C4, "S2977C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2977C4C1Ev();
extern void _ZN7S2977C4D1Ev();
Name_Map name_map_S2977C4[] = {
  NSPAIR(_ZN7S2977C4C1Ev),
  NSPAIR(_ZN7S2977C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2977C4[];
extern void _ZN7S2977C42v6Ev();
extern void _ZN7S2977C42v7Ev();
extern void _ZN7S2977C42v8Ev();
extern void _ZN7S2977C42v9Ev();
extern void _ZN7S2977C43v10Ev();
extern void _ZN7S2977C43v11Ev();
extern void _ZN7S2977C43v12Ev();
static  VTBL_ENTRY vtc_S2977C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2977C4[0]),
  (VTBL_ENTRY)&_ZN7S2977C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v12Ev,
};
extern VTBL_ENTRY _ZTI7S2977C4[];
extern  VTBL_ENTRY _ZTV7S2977C4[];
Class_Descriptor cd_S2977C4 = {  "S2977C4", // class name
  0,0,//no base classes
  &(vtc_S2977C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2977C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2977C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2977C2  : S2977C3 , virtual S2977C4 {
  virtual void  v13(); // _ZN7S2977C23v13Ev
  virtual void  v14(); // _ZN7S2977C23v14Ev
  virtual void  v15(); // _ZN7S2977C23v15Ev
  virtual void  v16(); // _ZN7S2977C23v16Ev
  virtual void  v17(); // _ZN7S2977C23v17Ev
  ~S2977C2(); // tgen
  S2977C2(); // tgen
};
//SIG(-1 S2977C2) C1{ BC2{ v6 v7 v8 v9 v10 Fi} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD[3]} v1 v2 v3 v4 v5}


void  S2977C2 ::v13(){vfunc_called(this, "_ZN7S2977C23v13Ev");}
void  S2977C2 ::v14(){vfunc_called(this, "_ZN7S2977C23v14Ev");}
void  S2977C2 ::v15(){vfunc_called(this, "_ZN7S2977C23v15Ev");}
void  S2977C2 ::v16(){vfunc_called(this, "_ZN7S2977C23v16Ev");}
void  S2977C2 ::v17(){vfunc_called(this, "_ZN7S2977C23v17Ev");}
S2977C2 ::~S2977C2(){ note_dtor("S2977C2", this);} // tgen
S2977C2 ::S2977C2(){ note_ctor("S2977C2", this);} // tgen

static void Test_S2977C2()
{
  extern Class_Descriptor cd_S2977C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S2977C2, buf);
    S2977C2 *dp, &lv = *(dp=new (buf) S2977C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S2977C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2977C2)");
    check_base_class_offset(lv, (S2977C3*), 0, "S2977C2");
    check_base_class_offset(lv, (S2977C4*), ABISELECT(16,8), "S2977C2");
    test_class_info(&lv, &cd_S2977C2);
    dp->~S2977C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2977C2(Test_S2977C2, "S2977C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S2977C2C1Ev();
extern void _ZN7S2977C2D1Ev();
Name_Map name_map_S2977C2[] = {
  NSPAIR(_ZN7S2977C2C1Ev),
  NSPAIR(_ZN7S2977C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2977C3;
extern VTBL_ENTRY _ZTI7S2977C3[];
extern  VTBL_ENTRY _ZTV7S2977C3[];
extern Class_Descriptor cd_S2977C4;
extern VTBL_ENTRY _ZTI7S2977C4[];
extern  VTBL_ENTRY _ZTV7S2977C4[];
static Base_Class bases_S2977C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2977C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2977C4,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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 _ZTI7S2977C2[];
extern void _ZN7S2977C32v1Ev();
extern void _ZN7S2977C32v2Ev();
extern void _ZN7S2977C32v3Ev();
extern void _ZN7S2977C32v4Ev();
extern void _ZN7S2977C32v5Ev();
extern void _ZN7S2977C23v13Ev();
extern void _ZN7S2977C23v14Ev();
extern void _ZN7S2977C23v15Ev();
extern void _ZN7S2977C23v16Ev();
extern void _ZN7S2977C23v17Ev();
extern void _ZN7S2977C42v6Ev();
extern void _ZN7S2977C42v7Ev();
extern void _ZN7S2977C42v8Ev();
extern void _ZN7S2977C42v9Ev();
extern void _ZN7S2977C43v10Ev();
extern void _ZN7S2977C43v11Ev();
extern void _ZN7S2977C43v12Ev();
static  VTBL_ENTRY vtc_S2977C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2977C2[0]),
  (VTBL_ENTRY)&_ZN7S2977C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2977C2[0]),
  (VTBL_ENTRY)&_ZN7S2977C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S2977C2[];
static  VTT_ENTRY vtt_S2977C2[] = {
  {&(_ZTV7S2977C2[3]),  3,29},
  {&(_ZTV7S2977C2[22]),  22,29},
};
extern VTBL_ENTRY _ZTI7S2977C2[];
extern  VTBL_ENTRY _ZTV7S2977C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2977C2[];
Class_Descriptor cd_S2977C2 = {  "S2977C2", // class name
  bases_S2977C2, 2,
  &(vtc_S2977C2[0]), // expected_vtbl_contents
  &(vtt_S2977C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S2977C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2977C2),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2977C2),2, //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  S2977C1  : S2977C2 , virtual S2977C3 {
  int s2977c1f0;
  ~S2977C1(); // tgen
  S2977C1(); // tgen
};
//SIG(1 S2977C1) C1{ BC2{ BC3{ v1 v2 v3 v4 v5 Fi} VBC4{ v6 v7 v8 v9 v10 v11 v12 FD[3]} v13 v14 v15 v16 v17} VBC3 Fi}


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

static void Test_S2977C1()
{
  extern Class_Descriptor cd_S2977C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,16)];
    init_test(&cd_S2977C1, buf);
    S2977C1 *dp, &lv = *(dp=new (buf) S2977C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2977C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2977C1)");
    check_base_class_offset(lv, (S2977C3*)(S2977C2*), 0, "S2977C1");
    check_base_class_offset(lv, (S2977C4*)(S2977C2*), ABISELECT(16,12), "S2977C1");
    check_base_class_offset(lv, (S2977C2*), 0, "S2977C1");
    /*is_ambiguous_... S2977C1::S2977C3 */ AMB_check_base_class_offset(lv, (S2977C3*), ABISELECT(80,52), "S2977C1");
    check_field_offset(lv, s2977c1f0, ABISELECT(12,8), "S2977C1.s2977c1f0");
    test_class_info(&lv, &cd_S2977C1);
    dp->~S2977C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2977C1(Test_S2977C1, "S2977C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2977C1C1Ev();
extern void _ZN7S2977C1D1Ev();
Name_Map name_map_S2977C1[] = {
  NSPAIR(_ZN7S2977C1C1Ev),
  NSPAIR(_ZN7S2977C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2977C3;
extern VTBL_ENTRY _ZTI7S2977C3[];
extern  VTBL_ENTRY _ZTV7S2977C3[];
extern Class_Descriptor cd_S2977C4;
extern VTBL_ENTRY _ZTI7S2977C4[];
extern  VTBL_ENTRY _ZTV7S2977C4[];
extern Class_Descriptor cd_S2977C2;
extern VTBL_ENTRY _ZTI7S2977C2[];
extern  VTBL_ENTRY _ZTV7S2977C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2977C2[];
extern Class_Descriptor cd_S2977C3;
extern VTBL_ENTRY _ZTI7S2977C3[];
extern  VTBL_ENTRY _ZTV7S2977C3[];
static Base_Class bases_S2977C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2977C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2977C4,    ABISELECT(16,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S2977C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2977C3,    ABISELECT(80,52), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2977C1[];
extern void _ZN7S2977C32v1Ev();
extern void _ZN7S2977C32v2Ev();
extern void _ZN7S2977C32v3Ev();
extern void _ZN7S2977C32v4Ev();
extern void _ZN7S2977C32v5Ev();
extern void _ZN7S2977C23v13Ev();
extern void _ZN7S2977C23v14Ev();
extern void _ZN7S2977C23v15Ev();
extern void _ZN7S2977C23v16Ev();
extern void _ZN7S2977C23v17Ev();
extern void _ZN7S2977C42v6Ev();
extern void _ZN7S2977C42v7Ev();
extern void _ZN7S2977C42v8Ev();
extern void _ZN7S2977C42v9Ev();
extern void _ZN7S2977C43v10Ev();
extern void _ZN7S2977C43v11Ev();
extern void _ZN7S2977C43v12Ev();
extern void _ZN7S2977C32v1Ev();
extern void _ZN7S2977C32v2Ev();
extern void _ZN7S2977C32v3Ev();
extern void _ZN7S2977C32v4Ev();
extern void _ZN7S2977C32v5Ev();
static  VTBL_ENTRY vtc_S2977C1[] = {
  ABISELECT(80,52),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2977C1[0]),
  (VTBL_ENTRY)&_ZN7S2977C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S2977C1[0]),
  (VTBL_ENTRY)&_ZN7S2977C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S2977C1[0]),
  (VTBL_ENTRY)&_ZN7S2977C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v5Ev,
};
extern VTBL_ENTRY _ZTV7S2977C1[];
extern void _ZN7S2977C32v1Ev();
extern void _ZN7S2977C32v2Ev();
extern void _ZN7S2977C32v3Ev();
extern void _ZN7S2977C32v4Ev();
extern void _ZN7S2977C32v5Ev();
extern void _ZN7S2977C23v13Ev();
extern void _ZN7S2977C23v14Ev();
extern void _ZN7S2977C23v15Ev();
extern void _ZN7S2977C23v16Ev();
extern void _ZN7S2977C23v17Ev();
static  VTBL_ENTRY _tg__ZTV7S2977C2__7S2977C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2977C2[0]),
  (VTBL_ENTRY)&_ZN7S2977C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2977C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2977C23v17Ev,
};
extern void _ZN7S2977C42v6Ev();
extern void _ZN7S2977C42v7Ev();
extern void _ZN7S2977C42v8Ev();
extern void _ZN7S2977C42v9Ev();
extern void _ZN7S2977C43v10Ev();
extern void _ZN7S2977C43v11Ev();
extern void _ZN7S2977C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S2977C4__7S2977C2__7S2977C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S2977C2[0]),
  (VTBL_ENTRY)&_ZN7S2977C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2977C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2977C43v12Ev,
};
static  VTT_ENTRY vtt_S2977C1[] = {
  {&(_ZTV7S2977C1[4]),  4,42},
  {&(_tg__ZTV7S2977C2__7S2977C1[3]),  3,13},
  {&(_tg__ZTV7S2977C4__7S2977C2__7S2977C1[9]),  9,16},
  {&(_ZTV7S2977C1[23]),  23,42},
  {&(_ZTV7S2977C1[37]),  37,42},
};
extern VTBL_ENTRY _ZTI7S2977C1[];
extern  VTBL_ENTRY _ZTV7S2977C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2977C1[];
Class_Descriptor cd_S2977C1 = {  "S2977C1", // class name
  bases_S2977C1, 4,
  &(vtc_S2977C1[0]), // expected_vtbl_contents
  &(vtt_S2977C1[0]), // expected_vtt_contents
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2977C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2977C1),42, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2977C1),5, //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  S21092C4  {
  long double s21092c4f0[3];
  virtual void  v7(); // _ZN8S21092C42v7Ev
  virtual void  v8(); // _ZN8S21092C42v8Ev
  virtual void  v9(); // _ZN8S21092C42v9Ev
  virtual void  v10(); // _ZN8S21092C43v10Ev
  virtual void  v11(); // _ZN8S21092C43v11Ev
  virtual void  v12(); // _ZN8S21092C43v12Ev
  virtual void  v13(); // _ZN8S21092C43v13Ev
  ~S21092C4(); // tgen
  S21092C4(); // tgen
};
//SIG(-1 S21092C4) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S21092C4 ::v7(){vfunc_called(this, "_ZN8S21092C42v7Ev");}
void  S21092C4 ::v8(){vfunc_called(this, "_ZN8S21092C42v8Ev");}
void  S21092C4 ::v9(){vfunc_called(this, "_ZN8S21092C42v9Ev");}
void  S21092C4 ::v10(){vfunc_called(this, "_ZN8S21092C43v10Ev");}
void  S21092C4 ::v11(){vfunc_called(this, "_ZN8S21092C43v11Ev");}
void  S21092C4 ::v12(){vfunc_called(this, "_ZN8S21092C43v12Ev");}
void  S21092C4 ::v13(){vfunc_called(this, "_ZN8S21092C43v13Ev");}
S21092C4 ::~S21092C4(){ note_dtor("S21092C4", this);} // tgen
S21092C4 ::S21092C4(){ note_ctor("S21092C4", this);} // tgen

static void Test_S21092C4()
{
  extern Class_Descriptor cd_S21092C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S21092C4, buf);
    S21092C4 *dp, &lv = *(dp=new (buf) S21092C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S21092C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21092C4)");
    check_field_offset(lv, s21092c4f0, ABISELECT(16,4), "S21092C4.s21092c4f0");
    test_class_info(&lv, &cd_S21092C4);
    dp->~S21092C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21092C4(Test_S21092C4, "S21092C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S21092C4C1Ev();
extern void _ZN8S21092C4D1Ev();
Name_Map name_map_S21092C4[] = {
  NSPAIR(_ZN8S21092C4C1Ev),
  NSPAIR(_ZN8S21092C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21092C4[];
extern void _ZN8S21092C42v7Ev();
extern void _ZN8S21092C42v8Ev();
extern void _ZN8S21092C42v9Ev();
extern void _ZN8S21092C43v10Ev();
extern void _ZN8S21092C43v11Ev();
extern void _ZN8S21092C43v12Ev();
extern void _ZN8S21092C43v13Ev();
static  VTBL_ENTRY vtc_S21092C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21092C4[0]),
  (VTBL_ENTRY)&_ZN8S21092C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v13Ev,
};
extern VTBL_ENTRY _ZTI8S21092C4[];
extern  VTBL_ENTRY _ZTV8S21092C4[];
Class_Descriptor cd_S21092C4 = {  "S21092C4", // class name
  0,0,//no base classes
  &(vtc_S21092C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S21092C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21092C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21092C3  : virtual S21092C4 {
  virtual void  v14(); // _ZN8S21092C33v14Ev
  virtual void  v15(); // _ZN8S21092C33v15Ev
  virtual void  v16(); // _ZN8S21092C33v16Ev
  ~S21092C3(); // tgen
  S21092C3(); // tgen
};
//SIG(-1 S21092C3) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 FD[3]} v1 v2 v3}


void  S21092C3 ::v14(){vfunc_called(this, "_ZN8S21092C33v14Ev");}
void  S21092C3 ::v15(){vfunc_called(this, "_ZN8S21092C33v15Ev");}
void  S21092C3 ::v16(){vfunc_called(this, "_ZN8S21092C33v16Ev");}
S21092C3 ::~S21092C3(){ note_dtor("S21092C3", this);} // tgen
S21092C3 ::S21092C3(){ note_ctor("S21092C3", this);} // tgen

static void Test_S21092C3()
{
  extern Class_Descriptor cd_S21092C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S21092C3, buf);
    S21092C3 *dp, &lv = *(dp=new (buf) S21092C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S21092C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21092C3)");
    check_base_class_offset(lv, (S21092C4*), ABISELECT(16,4), "S21092C3");
    test_class_info(&lv, &cd_S21092C3);
    dp->~S21092C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21092C3(Test_S21092C3, "S21092C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S21092C3C1Ev();
extern void _ZN8S21092C3D1Ev();
Name_Map name_map_S21092C3[] = {
  NSPAIR(_ZN8S21092C3C1Ev),
  NSPAIR(_ZN8S21092C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21092C4;
extern VTBL_ENTRY _ZTI8S21092C4[];
extern  VTBL_ENTRY _ZTV8S21092C4[];
static Base_Class bases_S21092C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21092C4,    ABISELECT(16,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S21092C3[];
extern void _ZN8S21092C33v14Ev();
extern void _ZN8S21092C33v15Ev();
extern void _ZN8S21092C33v16Ev();
extern void _ZN8S21092C42v7Ev();
extern void _ZN8S21092C42v8Ev();
extern void _ZN8S21092C42v9Ev();
extern void _ZN8S21092C43v10Ev();
extern void _ZN8S21092C43v11Ev();
extern void _ZN8S21092C43v12Ev();
extern void _ZN8S21092C43v13Ev();
static  VTBL_ENTRY vtc_S21092C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21092C3[0]),
  (VTBL_ENTRY)&_ZN8S21092C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21092C3[0]),
  (VTBL_ENTRY)&_ZN8S21092C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S21092C3[];
static  VTT_ENTRY vtt_S21092C3[] = {
  {&(_ZTV8S21092C3[3]),  3,22},
  {&(_ZTV8S21092C3[15]),  15,22},
};
extern VTBL_ENTRY _ZTI8S21092C3[];
extern  VTBL_ENTRY _ZTV8S21092C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21092C3[];
Class_Descriptor cd_S21092C3 = {  "S21092C3", // class name
  bases_S21092C3, 1,
  &(vtc_S21092C3[0]), // expected_vtbl_contents
  &(vtt_S21092C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S21092C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21092C3),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21092C3),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  S21092C2  : virtual S21092C3 {
  virtual void  v17(); // _ZN8S21092C23v17Ev
  virtual void  v18(); // _ZN8S21092C23v18Ev
  ~S21092C2(); // tgen
  S21092C2(); // tgen
};
//SIG(-1 S21092C2) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 FD[3]} v10 v11 v12} v1 v2}


void  S21092C2 ::v17(){vfunc_called(this, "_ZN8S21092C23v17Ev");}
void  S21092C2 ::v18(){vfunc_called(this, "_ZN8S21092C23v18Ev");}
S21092C2 ::~S21092C2(){ note_dtor("S21092C2", this);} // tgen
S21092C2 ::S21092C2(){ note_ctor("S21092C2", this);} // tgen

static void Test_S21092C2()
{
  extern Class_Descriptor cd_S21092C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S21092C2, buf);
    S21092C2 *dp, &lv = *(dp=new (buf) S21092C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S21092C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21092C2)");
    check_base_class_offset(lv, (S21092C4*)(S21092C3*), ABISELECT(16,4), "S21092C2");
    check_base_class_offset(lv, (S21092C3*), 0, "S21092C2");
    test_class_info(&lv, &cd_S21092C2);
    dp->~S21092C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21092C2(Test_S21092C2, "S21092C2", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S21092C2C1Ev();
extern void _ZN8S21092C2D1Ev();
Name_Map name_map_S21092C2[] = {
  NSPAIR(_ZN8S21092C2C1Ev),
  NSPAIR(_ZN8S21092C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21092C4;
extern VTBL_ENTRY _ZTI8S21092C4[];
extern  VTBL_ENTRY _ZTV8S21092C4[];
extern Class_Descriptor cd_S21092C3;
extern VTBL_ENTRY _ZTI8S21092C3[];
extern  VTBL_ENTRY _ZTV8S21092C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21092C3[];
static Base_Class bases_S21092C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21092C4,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //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_S21092C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21092C2[];
extern void _ZN8S21092C33v14Ev();
extern void _ZN8S21092C33v15Ev();
extern void _ZN8S21092C33v16Ev();
extern void _ZN8S21092C23v17Ev();
extern void _ZN8S21092C23v18Ev();
extern void _ZN8S21092C42v7Ev();
extern void _ZN8S21092C42v8Ev();
extern void _ZN8S21092C42v9Ev();
extern void _ZN8S21092C43v10Ev();
extern void _ZN8S21092C43v11Ev();
extern void _ZN8S21092C43v12Ev();
extern void _ZN8S21092C43v13Ev();
static  VTBL_ENTRY vtc_S21092C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21092C2[0]),
  (VTBL_ENTRY)&_ZN8S21092C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v16Ev,
  (VTBL_ENTRY)&_ZN8S21092C23v17Ev,
  (VTBL_ENTRY)&_ZN8S21092C23v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21092C2[0]),
  (VTBL_ENTRY)&_ZN8S21092C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S21092C2[];
extern void _ZN8S21092C33v14Ev();
extern void _ZN8S21092C33v15Ev();
extern void _ZN8S21092C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21092C3__8S21092C2[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21092C3[0]),
  (VTBL_ENTRY)&_ZN8S21092C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v16Ev,
};
extern void _ZN8S21092C42v7Ev();
extern void _ZN8S21092C42v8Ev();
extern void _ZN8S21092C42v9Ev();
extern void _ZN8S21092C43v10Ev();
extern void _ZN8S21092C43v11Ev();
extern void _ZN8S21092C43v12Ev();
extern void _ZN8S21092C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S21092C4__8S21092C3__8S21092C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21092C3[0]),
  (VTBL_ENTRY)&_ZN8S21092C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v13Ev,
};
static  VTT_ENTRY vtt_S21092C2[] = {
  {&(_ZTV8S21092C2[7]),  7,28},
  {&(_ZTV8S21092C2[7]),  7,28},
  {&(_ZTV8S21092C2[21]),  21,28},
  {&(_tg__ZTV8S21092C3__8S21092C2[3]),  3,6},
  {&(_tg__ZTV8S21092C4__8S21092C3__8S21092C2[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S21092C2[];
extern  VTBL_ENTRY _ZTV8S21092C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21092C2[];
Class_Descriptor cd_S21092C2 = {  "S21092C2", // class name
  bases_S21092C2, 2,
  &(vtc_S21092C2[0]), // expected_vtbl_contents
  &(vtt_S21092C2[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S21092C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21092C2),28, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21092C2),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  S21092C1  : virtual S21092C2 {
  char s21092c1f0;
  virtual void  v1(); // _ZN8S21092C12v1Ev
  virtual void  v2(); // _ZN8S21092C12v2Ev
  virtual void  v3(); // _ZN8S21092C12v3Ev
  virtual void  v4(); // _ZN8S21092C12v4Ev
  virtual void  v5(); // _ZN8S21092C12v5Ev
  virtual void  v6(); // _ZN8S21092C12v6Ev
  ~S21092C1(); // tgen
  S21092C1(); // tgen
};
//SIG(1 S21092C1) C1{ VBC2{ VBC3{ VBC4{ v7 v8 v9 v10 v11 v12 v13 FD[3]} v14 v15 v16} v17 v18} v1 v2 v3 v4 v5 v6 Fc}


void  S21092C1 ::v1(){vfunc_called(this, "_ZN8S21092C12v1Ev");}
void  S21092C1 ::v2(){vfunc_called(this, "_ZN8S21092C12v2Ev");}
void  S21092C1 ::v3(){vfunc_called(this, "_ZN8S21092C12v3Ev");}
void  S21092C1 ::v4(){vfunc_called(this, "_ZN8S21092C12v4Ev");}
void  S21092C1 ::v5(){vfunc_called(this, "_ZN8S21092C12v5Ev");}
void  S21092C1 ::v6(){vfunc_called(this, "_ZN8S21092C12v6Ev");}
S21092C1 ::~S21092C1(){ note_dtor("S21092C1", this);} // tgen
S21092C1 ::S21092C1(){ note_ctor("S21092C1", this);} // tgen

static void Test_S21092C1()
{
  extern Class_Descriptor cd_S21092C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S21092C1, buf);
    S21092C1 *dp, &lv = *(dp=new (buf) S21092C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S21092C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21092C1)");
    check_base_class_offset(lv, (S21092C4*)(S21092C3*), ABISELECT(16,8), "S21092C1");
    check_base_class_offset(lv, (S21092C3*)(S21092C2*), 0, "S21092C1");
    check_base_class_offset(lv, (S21092C2*), 0, "S21092C1");
    check_field_offset(lv, s21092c1f0, ABISELECT(8,4), "S21092C1.s21092c1f0");
    test_class_info(&lv, &cd_S21092C1);
    dp->~S21092C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21092C1(Test_S21092C1, "S21092C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S21092C1C1Ev();
extern void _ZN8S21092C1D1Ev();
Name_Map name_map_S21092C1[] = {
  NSPAIR(_ZN8S21092C1C1Ev),
  NSPAIR(_ZN8S21092C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21092C4;
extern VTBL_ENTRY _ZTI8S21092C4[];
extern  VTBL_ENTRY _ZTV8S21092C4[];
extern Class_Descriptor cd_S21092C3;
extern VTBL_ENTRY _ZTI8S21092C3[];
extern  VTBL_ENTRY _ZTV8S21092C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21092C3[];
extern Class_Descriptor cd_S21092C2;
extern VTBL_ENTRY _ZTI8S21092C2[];
extern  VTBL_ENTRY _ZTV8S21092C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21092C2[];
static Base_Class bases_S21092C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21092C4,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    9, //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_S21092C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21092C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21092C1[];
extern void _ZN8S21092C33v14Ev();
extern void _ZN8S21092C33v15Ev();
extern void _ZN8S21092C33v16Ev();
extern void _ZN8S21092C23v17Ev();
extern void _ZN8S21092C23v18Ev();
extern void _ZN8S21092C12v1Ev();
extern void _ZN8S21092C12v2Ev();
extern void _ZN8S21092C12v3Ev();
extern void _ZN8S21092C12v4Ev();
extern void _ZN8S21092C12v5Ev();
extern void _ZN8S21092C12v6Ev();
extern void _ZN8S21092C42v7Ev();
extern void _ZN8S21092C42v8Ev();
extern void _ZN8S21092C42v9Ev();
extern void _ZN8S21092C43v10Ev();
extern void _ZN8S21092C43v11Ev();
extern void _ZN8S21092C43v12Ev();
extern void _ZN8S21092C43v13Ev();
static  VTBL_ENTRY vtc_S21092C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21092C1[0]),
  (VTBL_ENTRY)&_ZN8S21092C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v16Ev,
  (VTBL_ENTRY)&_ZN8S21092C23v17Ev,
  (VTBL_ENTRY)&_ZN8S21092C23v18Ev,
  (VTBL_ENTRY)&_ZN8S21092C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21092C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21092C12v3Ev,
  (VTBL_ENTRY)&_ZN8S21092C12v4Ev,
  (VTBL_ENTRY)&_ZN8S21092C12v5Ev,
  (VTBL_ENTRY)&_ZN8S21092C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21092C1[0]),
  (VTBL_ENTRY)&_ZN8S21092C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S21092C1[];
extern void _ZN8S21092C33v14Ev();
extern void _ZN8S21092C33v15Ev();
extern void _ZN8S21092C33v16Ev();
extern void _ZN8S21092C23v17Ev();
extern void _ZN8S21092C23v18Ev();
static  VTBL_ENTRY _tg__ZTV8S21092C2__8S21092C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21092C2[0]),
  (VTBL_ENTRY)&_ZN8S21092C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v16Ev,
  (VTBL_ENTRY)&_ZN8S21092C23v17Ev,
  (VTBL_ENTRY)&_ZN8S21092C23v18Ev,
};
extern void _ZN8S21092C42v7Ev();
extern void _ZN8S21092C42v8Ev();
extern void _ZN8S21092C42v9Ev();
extern void _ZN8S21092C43v10Ev();
extern void _ZN8S21092C43v11Ev();
extern void _ZN8S21092C43v12Ev();
extern void _ZN8S21092C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S21092C4__8S21092C2__8S21092C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21092C2[0]),
  (VTBL_ENTRY)&_ZN8S21092C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v13Ev,
};
extern void _ZN8S21092C33v14Ev();
extern void _ZN8S21092C33v15Ev();
extern void _ZN8S21092C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21092C3__8S21092C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21092C3[0]),
  (VTBL_ENTRY)&_ZN8S21092C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21092C33v16Ev,
};
extern void _ZN8S21092C42v7Ev();
extern void _ZN8S21092C42v8Ev();
extern void _ZN8S21092C42v9Ev();
extern void _ZN8S21092C43v10Ev();
extern void _ZN8S21092C43v11Ev();
extern void _ZN8S21092C43v12Ev();
extern void _ZN8S21092C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S21092C4__8S21092C3__8S21092C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21092C3[0]),
  (VTBL_ENTRY)&_ZN8S21092C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21092C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21092C43v13Ev,
};
static  VTT_ENTRY vtt_S21092C1[] = {
  {&(_ZTV8S21092C1[10]),  10,37},
  {&(_ZTV8S21092C1[10]),  10,37},
  {&(_ZTV8S21092C1[10]),  10,37},
  {&(_ZTV8S21092C1[30]),  30,37},
  {&(_tg__ZTV8S21092C2__8S21092C1[7]),  7,12},
  {&(_tg__ZTV8S21092C2__8S21092C1[7]),  7,12},
  {&(_tg__ZTV8S21092C4__8S21092C2__8S21092C1[9]),  9,16},
  {&(_tg__ZTV8S21092C3__8S21092C1[3]),  3,6},
  {&(_tg__ZTV8S21092C4__8S21092C3__8S21092C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S21092C1[];
extern  VTBL_ENTRY _ZTV8S21092C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21092C1[];
Class_Descriptor cd_S21092C1 = {  "S21092C1", // class name
  bases_S21092C1, 3,
  &(vtc_S21092C1[0]), // expected_vtbl_contents
  &(vtt_S21092C1[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S21092C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21092C1),37, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21092C1),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2587C2  : S6611C8_nt {
  void *s2587c2f0;
  int s2587c2f1[4];
  ::S21777C11_nt s2587c2f2[8];
  int s2587c2f3[8];
  char s2587c2f4;
  int s2587c2f5[2];
  char s2587c2f6;
  virtual  ~S2587C2(); // _ZN7S2587C2D1Ev
  virtual void  v2(); // _ZN7S2587C22v2Ev
  virtual void  v3(); // _ZN7S2587C22v3Ev
  S2587C2(); // tgen
};
//SIG(-1 S2587C2) C1{ BC2{ m Fi} vd v1 v2 Fp Fi[4] FC3{ m Fp}[8] Fi[8] Fc Fi[2] Fc}


 S2587C2 ::~S2587C2(){ note_dtor("S2587C2", this);}
void  S2587C2 ::v2(){vfunc_called(this, "_ZN7S2587C22v2Ev");}
void  S2587C2 ::v3(){vfunc_called(this, "_ZN7S2587C22v3Ev");}
S2587C2 ::S2587C2(){ note_ctor("S2587C2", this);} // tgen

static void Test_S2587C2()
{
  extern Class_Descriptor cd_S2587C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,28)];
    init_test(&cd_S2587C2, buf);
    S2587C2 *dp, &lv = *(dp=new (buf) S2587C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,108), "sizeof(S2587C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2587C2)");
    check_base_class_offset(lv, (S6611C8_nt*), ABISELECT(8,4), "S2587C2");
    check_field_offset(lv, s2587c2f0, ABISELECT(16,8), "S2587C2.s2587c2f0");
    check_field_offset(lv, s2587c2f1, ABISELECT(24,12), "S2587C2.s2587c2f1");
    check_field_offset(lv, s2587c2f2, ABISELECT(40,28), "S2587C2.s2587c2f2");
    check_field_offset(lv, s2587c2f3, ABISELECT(104,60), "S2587C2.s2587c2f3");
    check_field_offset(lv, s2587c2f4, ABISELECT(136,92), "S2587C2.s2587c2f4");
    check_field_offset(lv, s2587c2f5, ABISELECT(140,96), "S2587C2.s2587c2f5");
    check_field_offset(lv, s2587c2f6, ABISELECT(148,104), "S2587C2.s2587c2f6");
    test_class_info(&lv, &cd_S2587C2);
    dp->~S2587C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2587C2(Test_S2587C2, "S2587C2", ABISELECT(152,108));

#else // __cplusplus

extern void _ZN7S2587C2C1Ev();
extern void _ZN7S2587C2D1Ev();
Name_Map name_map_S2587C2[] = {
  NSPAIR(_ZN7S2587C2C1Ev),
  NSPAIR(_ZN7S2587C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6611C8_nt;
extern VTBL_ENTRY _ZTI10S6611C8_nt[];
static Base_Class bases_S2587C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6611C8_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},
  {0}};
extern VTBL_ENTRY _ZTI7S2587C2[];
extern void _ZN7S2587C2D1Ev();
extern void _ZN7S2587C2D0Ev();
extern void _ZN7S2587C22v2Ev();
extern void _ZN7S2587C22v3Ev();
static  VTBL_ENTRY vtc_S2587C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2587C2[0]),
  (VTBL_ENTRY)&_ZN7S2587C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2587C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2587C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2587C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S2587C2[];
extern  VTBL_ENTRY _ZTV7S2587C2[];
Class_Descriptor cd_S2587C2 = {  "S2587C2", // class name
  bases_S2587C2, 1,
  &(vtc_S2587C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,108), // object size
  NSPAIRA(_ZTI7S2587C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2587C2),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  S2587C1  : S2587C2 {
  ::S15944C14_nt s2587c1f0[8];
  ::S15944C14_nt s2587c1f1;
  virtual  ~S2587C1(); // _ZN7S2587C1D1Ev
  virtual void  v1(); // _ZN7S2587C12v1Ev
  S2587C1(); // tgen
};
//SIG(1 S2587C1) C1{ BC2{ BC3{ m Fi} vd v2 v3 Fp Fi[4] FC4{ m Fp}[8] Fi[8] Fc Fi[2] Fc} vd v1 FC5{ m Fp}[8] FC5}


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

static void Test_S2587C1()
{
  extern Class_Descriptor cd_S2587C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,37)];
    init_test(&cd_S2587C1, buf);
    S2587C1 *dp, &lv = *(dp=new (buf) S2587C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S2587C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2587C1)");
    check_base_class_offset(lv, (S6611C8_nt*)(S2587C2*), ABISELECT(8,4), "S2587C1");
    check_base_class_offset(lv, (S2587C2*), 0, "S2587C1");
    check_field_offset(lv, s2587c1f0, ABISELECT(152,108), "S2587C1.s2587c1f0");
    check_field_offset(lv, s2587c1f1, ABISELECT(216,140), "S2587C1.s2587c1f1");
    test_class_info(&lv, &cd_S2587C1);
    dp->~S2587C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2587C1(Test_S2587C1, "S2587C1", ABISELECT(224,144));

#else // __cplusplus

extern void _ZN7S2587C1C1Ev();
extern void _ZN7S2587C1D1Ev();
Name_Map name_map_S2587C1[] = {
  NSPAIR(_ZN7S2587C1C1Ev),
  NSPAIR(_ZN7S2587C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6611C8_nt;
extern VTBL_ENTRY _ZTI10S6611C8_nt[];
extern Class_Descriptor cd_S2587C2;
extern VTBL_ENTRY _ZTI7S2587C2[];
extern  VTBL_ENTRY _ZTV7S2587C2[];
static Base_Class bases_S2587C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6611C8_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
  0, 0},
  {&cd_S2587C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2587C1[];
extern void _ZN7S2587C1D1Ev();
extern void _ZN7S2587C1D0Ev();
extern void _ZN7S2587C22v2Ev();
extern void _ZN7S2587C22v3Ev();
extern void _ZN7S2587C12v1Ev();
static  VTBL_ENTRY vtc_S2587C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2587C1[0]),
  (VTBL_ENTRY)&_ZN7S2587C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2587C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2587C22v2Ev,
  (VTBL_ENTRY)&_ZN7S2587C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2587C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2587C1[];
extern  VTBL_ENTRY _ZTV7S2587C1[];
Class_Descriptor cd_S2587C1 = {  "S2587C1", // class name
  bases_S2587C1, 2,
  &(vtc_S2587C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,144), // object size
  NSPAIRA(_ZTI7S2587C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2587C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19333C3_nt  {
  virtual void  v3(); // _ZN11S19333C3_nt2v3Ev
  virtual void  v4(); // _ZN11S19333C3_nt2v4Ev
  virtual void  v5(); // _ZN11S19333C3_nt2v5Ev
  virtual void  v6(); // _ZN11S19333C3_nt2v6Ev
  ~S19333C3_nt(); // tgen
  S19333C3_nt(); // tgen
};
//SIG(-1 S19333C3_nt) C1{ v1 v2 v3 v4}


void  S19333C3_nt ::v3(){vfunc_called(this, "_ZN11S19333C3_nt2v3Ev");}
void  S19333C3_nt ::v4(){vfunc_called(this, "_ZN11S19333C3_nt2v4Ev");}
void  S19333C3_nt ::v5(){vfunc_called(this, "_ZN11S19333C3_nt2v5Ev");}
void  S19333C3_nt ::v6(){vfunc_called(this, "_ZN11S19333C3_nt2v6Ev");}
S19333C3_nt ::~S19333C3_nt(){ note_dtor("S19333C3_nt", this);} // tgen
S19333C3_nt ::S19333C3_nt(){ note_ctor("S19333C3_nt", this);} // tgen

//skip512 S19333C3_nt

#else // __cplusplus

extern void _ZN11S19333C3_ntC1Ev();
extern void _ZN11S19333C3_ntD1Ev();
Name_Map name_map_S19333C3_nt[] = {
  NSPAIR(_ZN11S19333C3_ntC1Ev),
  NSPAIR(_ZN11S19333C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19333C3_nt[];
extern void _ZN11S19333C3_nt2v3Ev();
extern void _ZN11S19333C3_nt2v4Ev();
extern void _ZN11S19333C3_nt2v5Ev();
extern void _ZN11S19333C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S19333C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19333C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI11S19333C3_nt[];
VTBL_ENTRY *P__ZTI11S19333C3_nt = _ZTI11S19333C3_nt; 
extern  VTBL_ENTRY _ZTV11S19333C3_nt[];
Class_Descriptor cd_S19333C3_nt = {  "S19333C3_nt", // class name
  0,0,//no base classes
  &(vtc_S19333C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19333C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19333C3_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  S19333C2  : S19333C3_nt {
  ::S19333C3_nt s19333c2f0;
  __tsi64 s19333c2f1;
  ::S20940C6_nt s19333c2f2;
  int s19333c2f3;
  virtual void  v7(); // _ZN8S19333C22v7Ev
  virtual void  v8(); // _ZN8S19333C22v8Ev
  virtual void  v9(); // _ZN8S19333C22v9Ev
  virtual void  v10(); // _ZN8S19333C23v10Ev
  virtual void  v11(); // _ZN8S19333C23v11Ev
  ~S19333C2(); // tgen
  S19333C2(); // tgen
};
//SIG(-1 S19333C2) C1{ BC2{ v6 v7 v8 v9} v1 v2 v3 v4 v5 FC2 FL FC3{ v10 v11 v12 v13 v14 Fi} Fi}


void  S19333C2 ::v7(){vfunc_called(this, "_ZN8S19333C22v7Ev");}
void  S19333C2 ::v8(){vfunc_called(this, "_ZN8S19333C22v8Ev");}
void  S19333C2 ::v9(){vfunc_called(this, "_ZN8S19333C22v9Ev");}
void  S19333C2 ::v10(){vfunc_called(this, "_ZN8S19333C23v10Ev");}
void  S19333C2 ::v11(){vfunc_called(this, "_ZN8S19333C23v11Ev");}
S19333C2 ::~S19333C2(){ note_dtor("S19333C2", this);} // tgen
S19333C2 ::S19333C2(){ note_ctor("S19333C2", this);} // tgen

static void Test_S19333C2()
{
  extern Class_Descriptor cd_S19333C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S19333C2, buf);
    S19333C2 *dp, &lv = *(dp=new (buf) S19333C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19333C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19333C2)");
    check_base_class_offset(lv, (S19333C3_nt*), 0, "S19333C2");
    check_field_offset(lv, s19333c2f0, ABISELECT(8,4), "S19333C2.s19333c2f0");
    check_field_offset(lv, s19333c2f1, ABISELECT(16,8), "S19333C2.s19333c2f1");
    check_field_offset(lv, s19333c2f2, ABISELECT(24,16), "S19333C2.s19333c2f2");
    check_field_offset(lv, s19333c2f3, ABISELECT(40,24), "S19333C2.s19333c2f3");
    test_class_info(&lv, &cd_S19333C2);
    dp->~S19333C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19333C2(Test_S19333C2, "S19333C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19333C2C1Ev();
extern void _ZN8S19333C2D1Ev();
Name_Map name_map_S19333C2[] = {
  NSPAIR(_ZN8S19333C2C1Ev),
  NSPAIR(_ZN8S19333C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19333C3_nt;
extern VTBL_ENTRY _ZTI11S19333C3_nt[];
extern  VTBL_ENTRY _ZTV11S19333C3_nt[];
static Base_Class bases_S19333C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19333C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19333C2[];
extern void _ZN11S19333C3_nt2v3Ev();
extern void _ZN11S19333C3_nt2v4Ev();
extern void _ZN11S19333C3_nt2v5Ev();
extern void _ZN11S19333C3_nt2v6Ev();
extern void _ZN8S19333C22v7Ev();
extern void _ZN8S19333C22v8Ev();
extern void _ZN8S19333C22v9Ev();
extern void _ZN8S19333C23v10Ev();
extern void _ZN8S19333C23v11Ev();
static  VTBL_ENTRY vtc_S19333C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19333C2[0]),
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S19333C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19333C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19333C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19333C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19333C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S19333C2[];
extern  VTBL_ENTRY _ZTV8S19333C2[];
Class_Descriptor cd_S19333C2 = {  "S19333C2", // class name
  bases_S19333C2, 1,
  &(vtc_S19333C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19333C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19333C2),11, //virtual function table var
  2, // 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  S19333C1  : virtual S19333C2 {
  int s19333c1f0;
  virtual void  v1(); // _ZN8S19333C12v1Ev
  virtual void  v2(); // _ZN8S19333C12v2Ev
  ~S19333C1(); // tgen
  S19333C1(); // tgen
};
//SIG(1 S19333C1) C1{ VBC2{ BC3{ v3 v4 v5 v6} v7 v8 v9 v10 v11 FC3 FL FC4{ v12 v13 v14 v15 v16 Fi} Fi} v1 v2 Fi}


void  S19333C1 ::v1(){vfunc_called(this, "_ZN8S19333C12v1Ev");}
void  S19333C1 ::v2(){vfunc_called(this, "_ZN8S19333C12v2Ev");}
S19333C1 ::~S19333C1(){ note_dtor("S19333C1", this);} // tgen
S19333C1 ::S19333C1(){ note_ctor("S19333C1", this);} // tgen

static void Test_S19333C1()
{
  extern Class_Descriptor cd_S19333C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19333C1, buf);
    S19333C1 *dp, &lv = *(dp=new (buf) S19333C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19333C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19333C1)");
    check_base_class_offset(lv, (S19333C3_nt*)(S19333C2*), ABISELECT(16,8), "S19333C1");
    check_base_class_offset(lv, (S19333C2*), ABISELECT(16,8), "S19333C1");
    check_field_offset(lv, s19333c1f0, ABISELECT(8,4), "S19333C1.s19333c1f0");
    test_class_info(&lv, &cd_S19333C1);
    dp->~S19333C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19333C1(Test_S19333C1, "S19333C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19333C1C1Ev();
extern void _ZN8S19333C1D1Ev();
Name_Map name_map_S19333C1[] = {
  NSPAIR(_ZN8S19333C1C1Ev),
  NSPAIR(_ZN8S19333C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19333C3_nt;
extern VTBL_ENTRY _ZTI11S19333C3_nt[];
extern  VTBL_ENTRY _ZTV11S19333C3_nt[];
extern Class_Descriptor cd_S19333C2;
extern VTBL_ENTRY _ZTI8S19333C2[];
extern  VTBL_ENTRY _ZTV8S19333C2[];
static Base_Class bases_S19333C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19333C3_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
  0, 0},
  {&cd_S19333C2,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19333C1[];
extern void _ZN8S19333C12v1Ev();
extern void _ZN8S19333C12v2Ev();
extern void _ZN11S19333C3_nt2v3Ev();
extern void _ZN11S19333C3_nt2v4Ev();
extern void _ZN11S19333C3_nt2v5Ev();
extern void _ZN11S19333C3_nt2v6Ev();
extern void _ZN8S19333C22v7Ev();
extern void _ZN8S19333C22v8Ev();
extern void _ZN8S19333C22v9Ev();
extern void _ZN8S19333C23v10Ev();
extern void _ZN8S19333C23v11Ev();
static  VTBL_ENTRY vtc_S19333C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19333C1[0]),
  (VTBL_ENTRY)&_ZN8S19333C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19333C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19333C1[0]),
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19333C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S19333C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19333C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19333C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19333C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19333C23v11Ev,
};
extern VTBL_ENTRY _ZTV8S19333C1[];
static  VTT_ENTRY vtt_S19333C1[] = {
  {&(_ZTV8S19333C1[3]),  3,25},
  {&(_ZTV8S19333C1[16]),  16,25},
};
extern VTBL_ENTRY _ZTI8S19333C1[];
extern  VTBL_ENTRY _ZTV8S19333C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19333C1[];
Class_Descriptor cd_S19333C1 = {  "S19333C1", // class name
  bases_S19333C1, 2,
  &(vtc_S19333C1[0]), // expected_vtbl_contents
  &(vtt_S19333C1[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19333C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19333C1),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19333C1),2, //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  S6653C3  {
  long s6653c3f0;
  void *s6653c3f1;
  virtual  ~S6653C3(); // _ZN7S6653C3D1Ev
  virtual void  v4(); // _ZN7S6653C32v4Ev
  S6653C3(); // tgen
};
//SIG(-1 S6653C3) C1{ vd v1 Fl Fp}


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

static void Test_S6653C3()
{
  extern Class_Descriptor cd_S6653C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6653C3, buf);
    S6653C3 *dp, &lv = *(dp=new (buf) S6653C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6653C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6653C3)");
    check_field_offset(lv, s6653c3f0, ABISELECT(8,4), "S6653C3.s6653c3f0");
    check_field_offset(lv, s6653c3f1, ABISELECT(16,8), "S6653C3.s6653c3f1");
    test_class_info(&lv, &cd_S6653C3);
    dp->~S6653C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6653C3(Test_S6653C3, "S6653C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6653C3C1Ev();
extern void _ZN7S6653C3D1Ev();
Name_Map name_map_S6653C3[] = {
  NSPAIR(_ZN7S6653C3C1Ev),
  NSPAIR(_ZN7S6653C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6653C3[];
extern void _ZN7S6653C3D1Ev();
extern void _ZN7S6653C3D0Ev();
extern void _ZN7S6653C32v4Ev();
static  VTBL_ENTRY vtc_S6653C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6653C3[0]),
  (VTBL_ENTRY)&_ZN7S6653C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6653C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S6653C3[];
extern  VTBL_ENTRY _ZTV7S6653C3[];
Class_Descriptor cd_S6653C3 = {  "S6653C3", // class name
  0,0,//no base classes
  &(vtc_S6653C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6653C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6653C3),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  S6653C2  {
  ::S6653C3 s6653c2f0[9];
  virtual void  v3(); // _ZN7S6653C22v3Ev
  ~S6653C2(); // tgen
  S6653C2(); // tgen
};
//SIG(-1 S6653C2) C1{ v1 FC2{ vd v2 Fl Fp}[9]}


void  S6653C2 ::v3(){vfunc_called(this, "_ZN7S6653C22v3Ev");}
S6653C2 ::~S6653C2(){ note_dtor("S6653C2", this);} // tgen
S6653C2 ::S6653C2(){ note_ctor("S6653C2", this);} // tgen

static void Test_S6653C2()
{
  extern Class_Descriptor cd_S6653C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S6653C2, buf);
    S6653C2 *dp, &lv = *(dp=new (buf) S6653C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S6653C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6653C2)");
    check_field_offset(lv, s6653c2f0, ABISELECT(8,4), "S6653C2.s6653c2f0");
    test_class_info(&lv, &cd_S6653C2);
    dp->~S6653C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6653C2(Test_S6653C2, "S6653C2", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN7S6653C2C1Ev();
extern void _ZN7S6653C2D1Ev();
Name_Map name_map_S6653C2[] = {
  NSPAIR(_ZN7S6653C2C1Ev),
  NSPAIR(_ZN7S6653C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6653C2[];
extern void _ZN7S6653C22v3Ev();
static  VTBL_ENTRY vtc_S6653C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6653C2[0]),
  (VTBL_ENTRY)&_ZN7S6653C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6653C2[];
extern  VTBL_ENTRY _ZTV7S6653C2[];
Class_Descriptor cd_S6653C2 = {  "S6653C2", // class name
  0,0,//no base classes
  &(vtc_S6653C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI7S6653C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6653C2),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  S6653C4  : S6653C3 {
  void *s6653c4f0;
  short s6653c4f1:2;
  virtual  ~S6653C4(); // _ZN7S6653C4D1Ev
  S6653C4(); // tgen
};
//SIG(-1 S6653C4) C1{ BC2{ vd v1 Fl Fp} vd Fp Fs:2}


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

static void Test_S6653C4()
{
  extern Class_Descriptor cd_S6653C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6653C4, buf);
    S6653C4 *dp, &lv = *(dp=new (buf) S6653C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6653C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6653C4)");
    check_base_class_offset(lv, (S6653C3*), 0, "S6653C4");
    check_field_offset(lv, s6653c4f0, ABISELECT(24,12), "S6653C4.s6653c4f0");
    set_bf_and_test(lv, s6653c4f1, ABISELECT(32,16), 0, 2, 1, "S6653C4");
    set_bf_and_test(lv, s6653c4f1, ABISELECT(32,16), 0, 2, hide_sll(1LL<<1), "S6653C4");
    test_class_info(&lv, &cd_S6653C4);
    dp->~S6653C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6653C4(Test_S6653C4, "S6653C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6653C4C1Ev();
extern void _ZN7S6653C4D1Ev();
Name_Map name_map_S6653C4[] = {
  NSPAIR(_ZN7S6653C4C1Ev),
  NSPAIR(_ZN7S6653C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6653C3;
extern VTBL_ENTRY _ZTI7S6653C3[];
extern  VTBL_ENTRY _ZTV7S6653C3[];
static Base_Class bases_S6653C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6653C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6653C4[];
extern void _ZN7S6653C4D1Ev();
extern void _ZN7S6653C4D0Ev();
extern void _ZN7S6653C32v4Ev();
static  VTBL_ENTRY vtc_S6653C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6653C4[0]),
  (VTBL_ENTRY)&_ZN7S6653C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6653C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S6653C4[];
extern  VTBL_ENTRY _ZTV7S6653C4[];
Class_Descriptor cd_S6653C4 = {  "S6653C4", // class name
  bases_S6653C4, 1,
  &(vtc_S6653C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6653C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6653C4),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  S6653C5  : S6653C3 , virtual S6653C4 {
  long double s6653c5f0;
  void *s6653c5f1;
  virtual  ~S6653C5(); // _ZN7S6653C5D2Ev
  S6653C5(); // tgen
};
//SIG(-1 S6653C5) C1{ BC2{ vd v1 Fl Fp} VBC3{ BC2 vd Fp Fs:2} vd FD Fp}


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

static void Test_S6653C5()
{
  extern Class_Descriptor cd_S6653C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S6653C5, buf);
    S6653C5 *dp, &lv = *(dp=new (buf) S6653C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S6653C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6653C5)");
    /*is_ambiguous_... S6653C5::S6653C3 */ AMB_check_base_class_offset(lv, (S6653C3*), 0, "S6653C5");
    check_base_class_offset(lv, (S6653C3*)(S6653C4*), ABISELECT(56,28), "S6653C5");
    check_base_class_offset(lv, (S6653C4*), ABISELECT(56,28), "S6653C5");
    check_field_offset(lv, s6653c5f0, ABISELECT(32,12), "S6653C5.s6653c5f0");
    check_field_offset(lv, s6653c5f1, ABISELECT(48,24), "S6653C5.s6653c5f1");
    test_class_info(&lv, &cd_S6653C5);
    dp->~S6653C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6653C5(Test_S6653C5, "S6653C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S6653C5C1Ev();
extern void _ZN7S6653C5D2Ev();
Name_Map name_map_S6653C5[] = {
  NSPAIR(_ZN7S6653C5C1Ev),
  NSPAIR(_ZN7S6653C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6653C3;
extern VTBL_ENTRY _ZTI7S6653C3[];
extern  VTBL_ENTRY _ZTV7S6653C3[];
extern Class_Descriptor cd_S6653C3;
extern VTBL_ENTRY _ZTI7S6653C3[];
extern  VTBL_ENTRY _ZTV7S6653C3[];
extern Class_Descriptor cd_S6653C4;
extern VTBL_ENTRY _ZTI7S6653C4[];
extern  VTBL_ENTRY _ZTV7S6653C4[];
static Base_Class bases_S6653C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6653C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6653C3,    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_S6653C4,    ABISELECT(56,28), //bcp->offset
    6, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6653C5[];
extern void _ZN7S6653C5D1Ev();
extern void _ZN7S6653C5D0Ev();
extern void _ZN7S6653C32v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S6653C5D1Ev,_ZTv0_n12_N7S6653C5D1Ev)();
extern void ABISELECT(_ZThn56_N7S6653C5D1Ev,_ZThn28_N7S6653C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6653C5D0Ev,_ZTv0_n12_N7S6653C5D0Ev)();
extern void ABISELECT(_ZThn56_N7S6653C5D0Ev,_ZThn28_N7S6653C5D0Ev)() __attribute__((weak));
extern void _ZN7S6653C32v4Ev();
static  VTBL_ENTRY vtc_S6653C5[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6653C5[0]),
  (VTBL_ENTRY)&_ZN7S6653C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6653C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S6653C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6653C5D1Ev,_ZTv0_n12_N7S6653C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6653C5D0Ev,_ZTv0_n12_N7S6653C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
};
extern VTBL_ENTRY _ZTV7S6653C5[];
static  VTT_ENTRY vtt_S6653C5[] = {
  {&(_ZTV7S6653C5[3]),  3,13},
  {&(_ZTV7S6653C5[10]),  10,13},
};
extern VTBL_ENTRY _ZTI7S6653C5[];
extern  VTBL_ENTRY _ZTV7S6653C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6653C5[];
static VTBL_ENTRY alt_thunk_names146[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6653C5D0Ev,_ZTv0_n12_N7S6653C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6653C5D0Ev,_ZThn28_N7S6653C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6653C5D1Ev,_ZTv0_n12_N7S6653C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6653C5D1Ev,_ZThn28_N7S6653C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6653C5 = {  "S6653C5", // class name
  bases_S6653C5, 3,
  &(vtc_S6653C5[0]), // expected_vtbl_contents
  &(vtt_S6653C5[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S6653C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6653C5),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6653C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names146,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6653C1  : S6653C2 , virtual S6653C4 , S6653C3 , virtual S6653C5 {
  int s6653c1f0;
  virtual void  v1(); // _ZN7S6653C12v1Ev
  virtual void  v2(); // _ZN7S6653C12v2Ev
  ~S6653C1(); // tgen
  S6653C1(); // tgen
};
//SIG(1 S6653C1) C1{ BC2{ v3 FC3{ vd v4 Fl Fp}[9]} VBC4{ BC3 vd Fp Fs:2} BC3 VBC5{ BC3 VBC4 vd FD Fp} v1 v2 Fi}


void  S6653C1 ::v1(){vfunc_called(this, "_ZN7S6653C12v1Ev");}
void  S6653C1 ::v2(){vfunc_called(this, "_ZN7S6653C12v2Ev");}
S6653C1 ::~S6653C1(){ note_dtor("S6653C1", this);} // tgen
S6653C1 ::S6653C1(){ note_ctor("S6653C1", this);} // tgen

static void Test_S6653C1()
{
  extern Class_Descriptor cd_S6653C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,45)];
    init_test(&cd_S6653C1, buf);
    S6653C1 *dp, &lv = *(dp=new (buf) S6653C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,176), "sizeof(S6653C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6653C1)");
    check_base_class_offset(lv, (S6653C2*), 0, "S6653C1");
    check_base_class_offset(lv, (S6653C3*)(S6653C4*), ABISELECT(256,128), "S6653C1");
    check_base_class_offset(lv, (S6653C4*), ABISELECT(256,128), "S6653C1");
    check_base_class_offset(lv, (S6653C4*)(S6653C5*), ABISELECT(256,128), "S6653C1");
    /*is_ambiguous_... S6653C1::S6653C3 */ AMB_check_base_class_offset(lv, (S6653C3*), ABISELECT(224,112), "S6653C1");
    /*is_ambiguous_... S6653C5::S6653C3 */ AMB_check_base_class_offset(lv, (S6653C3*)(S6653C5*), ABISELECT(304,148), "S6653C1");
    check_base_class_offset(lv, (S6653C5*), ABISELECT(304,148), "S6653C1");
    check_field_offset(lv, s6653c1f0, ABISELECT(248,124), "S6653C1.s6653c1f0");
    test_class_info(&lv, &cd_S6653C1);
    dp->~S6653C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6653C1(Test_S6653C1, "S6653C1", ABISELECT(368,176));

#else // __cplusplus

extern void _ZN7S6653C1C1Ev();
extern void _ZN7S6653C1D1Ev();
Name_Map name_map_S6653C1[] = {
  NSPAIR(_ZN7S6653C1C1Ev),
  NSPAIR(_ZN7S6653C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6653C2;
extern VTBL_ENTRY _ZTI7S6653C2[];
extern  VTBL_ENTRY _ZTV7S6653C2[];
extern Class_Descriptor cd_S6653C3;
extern VTBL_ENTRY _ZTI7S6653C3[];
extern  VTBL_ENTRY _ZTV7S6653C3[];
extern Class_Descriptor cd_S6653C4;
extern VTBL_ENTRY _ZTI7S6653C4[];
extern  VTBL_ENTRY _ZTV7S6653C4[];
extern Class_Descriptor cd_S6653C3;
extern VTBL_ENTRY _ZTI7S6653C3[];
extern  VTBL_ENTRY _ZTV7S6653C3[];
extern Class_Descriptor cd_S6653C3;
extern VTBL_ENTRY _ZTI7S6653C3[];
extern  VTBL_ENTRY _ZTV7S6653C3[];
extern Class_Descriptor cd_S6653C5;
extern VTBL_ENTRY _ZTI7S6653C5[];
extern  VTBL_ENTRY _ZTV7S6653C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6653C5[];
static Base_Class bases_S6653C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6653C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6653C3,    ABISELECT(256,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_S6653C4,    ABISELECT(256,128), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6653C3,    ABISELECT(224,112), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6653C3,    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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6653C5,    ABISELECT(304,148), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6653C1[];
extern void _ZN7S6653C22v3Ev();
extern void _ZN7S6653C12v1Ev();
extern void _ZN7S6653C12v2Ev();
extern void _ZN7S6653C1D1Ev();
extern void _ZN7S6653C1D0Ev();
extern void ABISELECT(_ZThn224_N7S6653C1D1Ev,_ZThn112_N7S6653C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S6653C1D0Ev,_ZThn112_N7S6653C1D0Ev)();
extern void _ZN7S6653C32v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S6653C1D1Ev,_ZTv0_n12_N7S6653C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S6653C1D1Ev,_ZThn128_N7S6653C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6653C1D0Ev,_ZTv0_n12_N7S6653C1D0Ev)();
extern void ABISELECT(_ZThn256_N7S6653C1D0Ev,_ZThn128_N7S6653C1D0Ev)() __attribute__((weak));
extern void _ZN7S6653C32v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S6653C1D1Ev,_ZTv0_n16_N7S6653C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S6653C1D1Ev,_ZThn148_N7S6653C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6653C1D0Ev,_ZTv0_n16_N7S6653C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S6653C1D0Ev,_ZThn148_N7S6653C1D0Ev)() __attribute__((weak));
extern void _ZN7S6653C32v4Ev();
static  VTBL_ENTRY vtc_S6653C1[] = {
  ABISELECT(304,148),
  ABISELECT(256,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6653C1[0]),
  (VTBL_ENTRY)&_ZN7S6653C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6653C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6653C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6653C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6653C1D0Ev,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S6653C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S6653C1D1Ev,_ZThn112_N7S6653C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S6653C1D0Ev,_ZThn112_N7S6653C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
  0,
  ABISELECT(-256,-128),
  ABISELECT(-256,-128),
  (VTBL_ENTRY)&(_ZTI7S6653C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6653C1D1Ev,_ZTv0_n12_N7S6653C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6653C1D0Ev,_ZTv0_n12_N7S6653C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
  0,
  ABISELECT(-304,-148),
  ABISELECT(-48,-20),
  ABISELECT(-304,-148),
  (VTBL_ENTRY)&(_ZTI7S6653C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6653C1D1Ev,_ZTv0_n16_N7S6653C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6653C1D0Ev,_ZTv0_n16_N7S6653C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
};
extern VTBL_ENTRY _ZTV7S6653C1[];
extern void _ZN7S6653C5D1Ev();
extern void _ZN7S6653C5D0Ev();
extern void _ZN7S6653C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6653C5__7S6653C1[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6653C5[0]),
  (VTBL_ENTRY)&_ZN7S6653C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6653C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6653C5D1Ev,_ZTv0_n12_N7S6653C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S6653C5D0Ev,_ZTv0_n12_N7S6653C5D0Ev)();
extern void _ZN7S6653C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6653C4__7S6653C5__7S6653C1[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI7S6653C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6653C5D1Ev,_ZTv0_n12_N7S6653C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6653C5D0Ev,_ZTv0_n12_N7S6653C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6653C32v4Ev,
};
static  VTT_ENTRY vtt_S6653C1[] = {
  {&(_ZTV7S6653C1[4]),  4,29},
  {&(_ZTV7S6653C1[18]),  18,29},
  {&(_ZTV7S6653C1[26]),  26,29},
  {&(_tg__ZTV7S6653C5__7S6653C1[3]),  3,6},
  {&(_tg__ZTV7S6653C4__7S6653C5__7S6653C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S6653C1[];
extern  VTBL_ENTRY _ZTV7S6653C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6653C1[];
static VTBL_ENTRY alt_thunk_names147[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6653C1D0Ev,_ZTv0_n16_N7S6653C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6653C1D0Ev,_ZThn148_N7S6653C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6653C1D1Ev,_ZTv0_n16_N7S6653C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6653C1D1Ev,_ZThn148_N7S6653C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6653C1D0Ev,_ZTv0_n12_N7S6653C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S6653C1D0Ev,_ZThn128_N7S6653C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6653C1D1Ev,_ZTv0_n12_N7S6653C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S6653C1D1Ev,_ZThn128_N7S6653C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6653C1 = {  "S6653C1", // class name
  bases_S6653C1, 6,
  &(vtc_S6653C1[0]), // expected_vtbl_contents
  &(vtt_S6653C1[0]), // expected_vtt_contents
  ABISELECT(368,176), // object size
  NSPAIRA(_ZTI7S6653C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6653C1),29, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6653C1),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names147,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20926C3  {
  int s20926c3f0;
  virtual void  v8(); // _ZN8S20926C32v8Ev
  virtual void  v9(); // _ZN8S20926C32v9Ev
  virtual void  v10(); // _ZN8S20926C33v10Ev
  virtual void  v11(); // _ZN8S20926C33v11Ev
  virtual void  v12(); // _ZN8S20926C33v12Ev
  ~S20926C3(); // tgen
  S20926C3(); // tgen
};
//SIG(-1 S20926C3) C1{ v1 v2 v3 v4 v5 Fi}


void  S20926C3 ::v8(){vfunc_called(this, "_ZN8S20926C32v8Ev");}
void  S20926C3 ::v9(){vfunc_called(this, "_ZN8S20926C32v9Ev");}
void  S20926C3 ::v10(){vfunc_called(this, "_ZN8S20926C33v10Ev");}
void  S20926C3 ::v11(){vfunc_called(this, "_ZN8S20926C33v11Ev");}
void  S20926C3 ::v12(){vfunc_called(this, "_ZN8S20926C33v12Ev");}
S20926C3 ::~S20926C3(){ note_dtor("S20926C3", this);} // tgen
S20926C3 ::S20926C3(){ note_ctor("S20926C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20926C3C1Ev();
extern void _ZN8S20926C3D1Ev();
Name_Map name_map_S20926C3[] = {
  NSPAIR(_ZN8S20926C3C1Ev),
  NSPAIR(_ZN8S20926C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20926C3[];
extern void _ZN8S20926C32v8Ev();
extern void _ZN8S20926C32v9Ev();
extern void _ZN8S20926C33v10Ev();
extern void _ZN8S20926C33v11Ev();
extern void _ZN8S20926C33v12Ev();
static  VTBL_ENTRY vtc_S20926C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20926C3[0]),
  (VTBL_ENTRY)&_ZN8S20926C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20926C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S20926C3[];
extern  VTBL_ENTRY _ZTV8S20926C3[];
Class_Descriptor cd_S20926C3 = {  "S20926C3", // class name
  0,0,//no base classes
  &(vtc_S20926C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20926C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20926C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20926C2  : virtual S20926C3 {
  void *s20926c2f0;
  virtual void  v13(); // _ZN8S20926C23v13Ev
  virtual void  v14(); // _ZN8S20926C23v14Ev
  virtual void  v15(); // _ZN8S20926C23v15Ev
  virtual void  v16(); // _ZN8S20926C23v16Ev
  virtual void  v17(); // _ZN8S20926C23v17Ev
  virtual void  v18(); // _ZN8S20926C23v18Ev
  virtual void  v19(); // _ZN8S20926C23v19Ev
  ~S20926C2(); // tgen
  S20926C2(); // tgen
};
//SIG(-1 S20926C2) C1{ VBC2{ v8 v9 v10 v11 v12 Fi} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S20926C2 ::v13(){vfunc_called(this, "_ZN8S20926C23v13Ev");}
void  S20926C2 ::v14(){vfunc_called(this, "_ZN8S20926C23v14Ev");}
void  S20926C2 ::v15(){vfunc_called(this, "_ZN8S20926C23v15Ev");}
void  S20926C2 ::v16(){vfunc_called(this, "_ZN8S20926C23v16Ev");}
void  S20926C2 ::v17(){vfunc_called(this, "_ZN8S20926C23v17Ev");}
void  S20926C2 ::v18(){vfunc_called(this, "_ZN8S20926C23v18Ev");}
void  S20926C2 ::v19(){vfunc_called(this, "_ZN8S20926C23v19Ev");}
S20926C2 ::~S20926C2(){ note_dtor("S20926C2", this);} // tgen
S20926C2 ::S20926C2(){ note_ctor("S20926C2", this);} // tgen

static void Test_S20926C2()
{
  extern Class_Descriptor cd_S20926C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20926C2, buf);
    S20926C2 *dp, &lv = *(dp=new (buf) S20926C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20926C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20926C2)");
    check_base_class_offset(lv, (S20926C3*), ABISELECT(16,8), "S20926C2");
    check_field_offset(lv, s20926c2f0, ABISELECT(8,4), "S20926C2.s20926c2f0");
    test_class_info(&lv, &cd_S20926C2);
    dp->~S20926C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20926C2(Test_S20926C2, "S20926C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20926C2C1Ev();
extern void _ZN8S20926C2D1Ev();
Name_Map name_map_S20926C2[] = {
  NSPAIR(_ZN8S20926C2C1Ev),
  NSPAIR(_ZN8S20926C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20926C3;
extern VTBL_ENTRY _ZTI8S20926C3[];
extern  VTBL_ENTRY _ZTV8S20926C3[];
static Base_Class bases_S20926C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20926C3,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20926C2[];
extern void _ZN8S20926C23v13Ev();
extern void _ZN8S20926C23v14Ev();
extern void _ZN8S20926C23v15Ev();
extern void _ZN8S20926C23v16Ev();
extern void _ZN8S20926C23v17Ev();
extern void _ZN8S20926C23v18Ev();
extern void _ZN8S20926C23v19Ev();
extern void _ZN8S20926C32v8Ev();
extern void _ZN8S20926C32v9Ev();
extern void _ZN8S20926C33v10Ev();
extern void _ZN8S20926C33v11Ev();
extern void _ZN8S20926C33v12Ev();
static  VTBL_ENTRY vtc_S20926C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20926C2[0]),
  (VTBL_ENTRY)&_ZN8S20926C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20926C2[0]),
  (VTBL_ENTRY)&_ZN8S20926C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20926C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v12Ev,
};
extern VTBL_ENTRY _ZTV8S20926C2[];
static  VTT_ENTRY vtt_S20926C2[] = {
  {&(_ZTV8S20926C2[3]),  3,22},
  {&(_ZTV8S20926C2[17]),  17,22},
};
extern VTBL_ENTRY _ZTI8S20926C2[];
extern  VTBL_ENTRY _ZTV8S20926C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20926C2[];
Class_Descriptor cd_S20926C2 = {  "S20926C2", // class name
  bases_S20926C2, 1,
  &(vtc_S20926C2[0]), // expected_vtbl_contents
  &(vtt_S20926C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20926C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20926C2),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20926C2),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  S20926C1  : virtual S20926C2 {
  virtual void  v1(); // _ZN8S20926C12v1Ev
  virtual void  v2(); // _ZN8S20926C12v2Ev
  virtual void  v3(); // _ZN8S20926C12v3Ev
  virtual void  v4(); // _ZN8S20926C12v4Ev
  virtual void  v5(); // _ZN8S20926C12v5Ev
  virtual void  v6(); // _ZN8S20926C12v6Ev
  virtual void  v7(); // _ZN8S20926C12v7Ev
  ~S20926C1(); // tgen
  S20926C1(); // tgen
};
//SIG(1 S20926C1) C1{ VBC2{ VBC3{ v8 v9 v10 v11 v12 Fi} v13 v14 v15 v16 v17 v18 v19 Fp} v1 v2 v3 v4 v5 v6 v7}


void  S20926C1 ::v1(){vfunc_called(this, "_ZN8S20926C12v1Ev");}
void  S20926C1 ::v2(){vfunc_called(this, "_ZN8S20926C12v2Ev");}
void  S20926C1 ::v3(){vfunc_called(this, "_ZN8S20926C12v3Ev");}
void  S20926C1 ::v4(){vfunc_called(this, "_ZN8S20926C12v4Ev");}
void  S20926C1 ::v5(){vfunc_called(this, "_ZN8S20926C12v5Ev");}
void  S20926C1 ::v6(){vfunc_called(this, "_ZN8S20926C12v6Ev");}
void  S20926C1 ::v7(){vfunc_called(this, "_ZN8S20926C12v7Ev");}
S20926C1 ::~S20926C1(){ note_dtor("S20926C1", this);} // tgen
S20926C1 ::S20926C1(){ note_ctor("S20926C1", this);} // tgen

static void Test_S20926C1()
{
  extern Class_Descriptor cd_S20926C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20926C1, buf);
    S20926C1 *dp, &lv = *(dp=new (buf) S20926C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20926C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20926C1)");
    check_base_class_offset(lv, (S20926C3*)(S20926C2*), ABISELECT(24,12), "S20926C1");
    check_base_class_offset(lv, (S20926C2*), ABISELECT(8,4), "S20926C1");
    test_class_info(&lv, &cd_S20926C1);
    dp->~S20926C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20926C1(Test_S20926C1, "S20926C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20926C1C1Ev();
extern void _ZN8S20926C1D1Ev();
Name_Map name_map_S20926C1[] = {
  NSPAIR(_ZN8S20926C1C1Ev),
  NSPAIR(_ZN8S20926C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20926C3;
extern VTBL_ENTRY _ZTI8S20926C3[];
extern  VTBL_ENTRY _ZTV8S20926C3[];
extern Class_Descriptor cd_S20926C2;
extern VTBL_ENTRY _ZTI8S20926C2[];
extern  VTBL_ENTRY _ZTV8S20926C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20926C2[];
static Base_Class bases_S20926C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20926C3,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //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_S20926C2,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20926C1[];
extern void _ZN8S20926C12v1Ev();
extern void _ZN8S20926C12v2Ev();
extern void _ZN8S20926C12v3Ev();
extern void _ZN8S20926C12v4Ev();
extern void _ZN8S20926C12v5Ev();
extern void _ZN8S20926C12v6Ev();
extern void _ZN8S20926C12v7Ev();
extern void _ZN8S20926C23v13Ev();
extern void _ZN8S20926C23v14Ev();
extern void _ZN8S20926C23v15Ev();
extern void _ZN8S20926C23v16Ev();
extern void _ZN8S20926C23v17Ev();
extern void _ZN8S20926C23v18Ev();
extern void _ZN8S20926C23v19Ev();
extern void _ZN8S20926C32v8Ev();
extern void _ZN8S20926C32v9Ev();
extern void _ZN8S20926C33v10Ev();
extern void _ZN8S20926C33v11Ev();
extern void _ZN8S20926C33v12Ev();
static  VTBL_ENTRY vtc_S20926C1[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20926C1[0]),
  (VTBL_ENTRY)&_ZN8S20926C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20926C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20926C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20926C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20926C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20926C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20926C12v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20926C1[0]),
  (VTBL_ENTRY)&_ZN8S20926C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20926C1[0]),
  (VTBL_ENTRY)&_ZN8S20926C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20926C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v12Ev,
};
extern VTBL_ENTRY _ZTV8S20926C1[];
extern void _ZN8S20926C23v13Ev();
extern void _ZN8S20926C23v14Ev();
extern void _ZN8S20926C23v15Ev();
extern void _ZN8S20926C23v16Ev();
extern void _ZN8S20926C23v17Ev();
extern void _ZN8S20926C23v18Ev();
extern void _ZN8S20926C23v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20926C2__8S20926C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20926C2[0]),
  (VTBL_ENTRY)&_ZN8S20926C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20926C23v19Ev,
};
extern void _ZN8S20926C32v8Ev();
extern void _ZN8S20926C32v9Ev();
extern void _ZN8S20926C33v10Ev();
extern void _ZN8S20926C33v11Ev();
extern void _ZN8S20926C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20926C3__8S20926C2__8S20926C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20926C2[0]),
  (VTBL_ENTRY)&_ZN8S20926C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20926C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20926C33v12Ev,
};
static  VTT_ENTRY vtt_S20926C1[] = {
  {&(_ZTV8S20926C1[4]),  4,40},
  {&(_ZTV8S20926C1[21]),  21,40},
  {&(_ZTV8S20926C1[35]),  35,40},
  {&(_tg__ZTV8S20926C2__8S20926C1[3]),  3,10},
  {&(_tg__ZTV8S20926C3__8S20926C2__8S20926C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S20926C1[];
extern  VTBL_ENTRY _ZTV8S20926C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20926C1[];
Class_Descriptor cd_S20926C1 = {  "S20926C1", // class name
  bases_S20926C1, 2,
  &(vtc_S20926C1[0]), // expected_vtbl_contents
  &(vtt_S20926C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20926C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20926C1),40, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20926C1),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  S21074C4  {
  long double s21074c4f0[3];
  virtual void  v3(); // _ZN8S21074C42v3Ev
  virtual void  v4(); // _ZN8S21074C42v4Ev
  virtual void  v5(); // _ZN8S21074C42v5Ev
  virtual void  v6(); // _ZN8S21074C42v6Ev
  virtual void  v7(); // _ZN8S21074C42v7Ev
  virtual void  v8(); // _ZN8S21074C42v8Ev
  virtual void  v9(); // _ZN8S21074C42v9Ev
  ~S21074C4(); // tgen
  S21074C4(); // tgen
};
//SIG(-1 S21074C4) C1{ v1 v2 v3 v4 v5 v6 v7 FD[3]}


void  S21074C4 ::v3(){vfunc_called(this, "_ZN8S21074C42v3Ev");}
void  S21074C4 ::v4(){vfunc_called(this, "_ZN8S21074C42v4Ev");}
void  S21074C4 ::v5(){vfunc_called(this, "_ZN8S21074C42v5Ev");}
void  S21074C4 ::v6(){vfunc_called(this, "_ZN8S21074C42v6Ev");}
void  S21074C4 ::v7(){vfunc_called(this, "_ZN8S21074C42v7Ev");}
void  S21074C4 ::v8(){vfunc_called(this, "_ZN8S21074C42v8Ev");}
void  S21074C4 ::v9(){vfunc_called(this, "_ZN8S21074C42v9Ev");}
S21074C4 ::~S21074C4(){ note_dtor("S21074C4", this);} // tgen
S21074C4 ::S21074C4(){ note_ctor("S21074C4", this);} // tgen

static void Test_S21074C4()
{
  extern Class_Descriptor cd_S21074C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S21074C4, buf);
    S21074C4 *dp, &lv = *(dp=new (buf) S21074C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S21074C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21074C4)");
    check_field_offset(lv, s21074c4f0, ABISELECT(16,4), "S21074C4.s21074c4f0");
    test_class_info(&lv, &cd_S21074C4);
    dp->~S21074C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21074C4(Test_S21074C4, "S21074C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S21074C4C1Ev();
extern void _ZN8S21074C4D1Ev();
Name_Map name_map_S21074C4[] = {
  NSPAIR(_ZN8S21074C4C1Ev),
  NSPAIR(_ZN8S21074C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21074C4[];
extern void _ZN8S21074C42v3Ev();
extern void _ZN8S21074C42v4Ev();
extern void _ZN8S21074C42v5Ev();
extern void _ZN8S21074C42v6Ev();
extern void _ZN8S21074C42v7Ev();
extern void _ZN8S21074C42v8Ev();
extern void _ZN8S21074C42v9Ev();
static  VTBL_ENTRY vtc_S21074C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21074C4[0]),
  (VTBL_ENTRY)&_ZN8S21074C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v9Ev,
};
extern VTBL_ENTRY _ZTI8S21074C4[];
extern  VTBL_ENTRY _ZTV8S21074C4[];
Class_Descriptor cd_S21074C4 = {  "S21074C4", // class name
  0,0,//no base classes
  &(vtc_S21074C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S21074C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21074C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21074C3  : virtual S21074C4 {
  virtual void  v10(); // _ZN8S21074C33v10Ev
  virtual void  v11(); // _ZN8S21074C33v11Ev
  virtual void  v12(); // _ZN8S21074C33v12Ev
  ~S21074C3(); // tgen
  S21074C3(); // tgen
};
//SIG(-1 S21074C3) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 FD[3]} v1 v2 v3}


void  S21074C3 ::v10(){vfunc_called(this, "_ZN8S21074C33v10Ev");}
void  S21074C3 ::v11(){vfunc_called(this, "_ZN8S21074C33v11Ev");}
void  S21074C3 ::v12(){vfunc_called(this, "_ZN8S21074C33v12Ev");}
S21074C3 ::~S21074C3(){ note_dtor("S21074C3", this);} // tgen
S21074C3 ::S21074C3(){ note_ctor("S21074C3", this);} // tgen

static void Test_S21074C3()
{
  extern Class_Descriptor cd_S21074C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S21074C3, buf);
    S21074C3 *dp, &lv = *(dp=new (buf) S21074C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S21074C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21074C3)");
    check_base_class_offset(lv, (S21074C4*), ABISELECT(16,4), "S21074C3");
    test_class_info(&lv, &cd_S21074C3);
    dp->~S21074C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21074C3(Test_S21074C3, "S21074C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S21074C3C1Ev();
extern void _ZN8S21074C3D1Ev();
Name_Map name_map_S21074C3[] = {
  NSPAIR(_ZN8S21074C3C1Ev),
  NSPAIR(_ZN8S21074C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21074C4;
extern VTBL_ENTRY _ZTI8S21074C4[];
extern  VTBL_ENTRY _ZTV8S21074C4[];
static Base_Class bases_S21074C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21074C4,    ABISELECT(16,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S21074C3[];
extern void _ZN8S21074C33v10Ev();
extern void _ZN8S21074C33v11Ev();
extern void _ZN8S21074C33v12Ev();
extern void _ZN8S21074C42v3Ev();
extern void _ZN8S21074C42v4Ev();
extern void _ZN8S21074C42v5Ev();
extern void _ZN8S21074C42v6Ev();
extern void _ZN8S21074C42v7Ev();
extern void _ZN8S21074C42v8Ev();
extern void _ZN8S21074C42v9Ev();
static  VTBL_ENTRY vtc_S21074C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21074C3[0]),
  (VTBL_ENTRY)&_ZN8S21074C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v11Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21074C3[0]),
  (VTBL_ENTRY)&_ZN8S21074C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v9Ev,
};
extern VTBL_ENTRY _ZTV8S21074C3[];
static  VTT_ENTRY vtt_S21074C3[] = {
  {&(_ZTV8S21074C3[3]),  3,22},
  {&(_ZTV8S21074C3[15]),  15,22},
};
extern VTBL_ENTRY _ZTI8S21074C3[];
extern  VTBL_ENTRY _ZTV8S21074C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21074C3[];
Class_Descriptor cd_S21074C3 = {  "S21074C3", // class name
  bases_S21074C3, 1,
  &(vtc_S21074C3[0]), // expected_vtbl_contents
  &(vtt_S21074C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S21074C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21074C3),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21074C3),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  S21074C2  : virtual S21074C3 {
  virtual void  v13(); // _ZN8S21074C23v13Ev
  virtual void  v14(); // _ZN8S21074C23v14Ev
  ~S21074C2(); // tgen
  S21074C2(); // tgen
};
//SIG(-1 S21074C2) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 v9 FD[3]} v10 v11 v12} v1 v2}


void  S21074C2 ::v13(){vfunc_called(this, "_ZN8S21074C23v13Ev");}
void  S21074C2 ::v14(){vfunc_called(this, "_ZN8S21074C23v14Ev");}
S21074C2 ::~S21074C2(){ note_dtor("S21074C2", this);} // tgen
S21074C2 ::S21074C2(){ note_ctor("S21074C2", this);} // tgen

static void Test_S21074C2()
{
  extern Class_Descriptor cd_S21074C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S21074C2, buf);
    S21074C2 *dp, &lv = *(dp=new (buf) S21074C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S21074C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21074C2)");
    check_base_class_offset(lv, (S21074C4*)(S21074C3*), ABISELECT(16,4), "S21074C2");
    check_base_class_offset(lv, (S21074C3*), 0, "S21074C2");
    test_class_info(&lv, &cd_S21074C2);
    dp->~S21074C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21074C2(Test_S21074C2, "S21074C2", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S21074C2C1Ev();
extern void _ZN8S21074C2D1Ev();
Name_Map name_map_S21074C2[] = {
  NSPAIR(_ZN8S21074C2C1Ev),
  NSPAIR(_ZN8S21074C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21074C4;
extern VTBL_ENTRY _ZTI8S21074C4[];
extern  VTBL_ENTRY _ZTV8S21074C4[];
extern Class_Descriptor cd_S21074C3;
extern VTBL_ENTRY _ZTI8S21074C3[];
extern  VTBL_ENTRY _ZTV8S21074C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21074C3[];
static Base_Class bases_S21074C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21074C4,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //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_S21074C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21074C2[];
extern void _ZN8S21074C33v10Ev();
extern void _ZN8S21074C33v11Ev();
extern void _ZN8S21074C33v12Ev();
extern void _ZN8S21074C23v13Ev();
extern void _ZN8S21074C23v14Ev();
extern void _ZN8S21074C42v3Ev();
extern void _ZN8S21074C42v4Ev();
extern void _ZN8S21074C42v5Ev();
extern void _ZN8S21074C42v6Ev();
extern void _ZN8S21074C42v7Ev();
extern void _ZN8S21074C42v8Ev();
extern void _ZN8S21074C42v9Ev();
static  VTBL_ENTRY vtc_S21074C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21074C2[0]),
  (VTBL_ENTRY)&_ZN8S21074C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v11Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v12Ev,
  (VTBL_ENTRY)&_ZN8S21074C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21074C23v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21074C2[0]),
  (VTBL_ENTRY)&_ZN8S21074C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v9Ev,
};
extern VTBL_ENTRY _ZTV8S21074C2[];
extern void _ZN8S21074C33v10Ev();
extern void _ZN8S21074C33v11Ev();
extern void _ZN8S21074C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S21074C3__8S21074C2[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21074C3[0]),
  (VTBL_ENTRY)&_ZN8S21074C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v11Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v12Ev,
};
extern void _ZN8S21074C42v3Ev();
extern void _ZN8S21074C42v4Ev();
extern void _ZN8S21074C42v5Ev();
extern void _ZN8S21074C42v6Ev();
extern void _ZN8S21074C42v7Ev();
extern void _ZN8S21074C42v8Ev();
extern void _ZN8S21074C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S21074C4__8S21074C3__8S21074C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S21074C3[0]),
  (VTBL_ENTRY)&_ZN8S21074C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v9Ev,
};
static  VTT_ENTRY vtt_S21074C2[] = {
  {&(_ZTV8S21074C2[7]),  7,28},
  {&(_ZTV8S21074C2[7]),  7,28},
  {&(_ZTV8S21074C2[21]),  21,28},
  {&(_tg__ZTV8S21074C3__8S21074C2[3]),  3,6},
  {&(_tg__ZTV8S21074C4__8S21074C3__8S21074C2[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S21074C2[];
extern  VTBL_ENTRY _ZTV8S21074C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21074C2[];
Class_Descriptor cd_S21074C2 = {  "S21074C2", // class name
  bases_S21074C2, 2,
  &(vtc_S21074C2[0]), // expected_vtbl_contents
  &(vtt_S21074C2[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S21074C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21074C2),28, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21074C2),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  S21074C1  : virtual S21074C2 {
  ::S6611C8_nt s21074c1f0;
  int s21074c1f1;
  virtual void  v1(); // _ZN8S21074C12v1Ev
  virtual void  v2(); // _ZN8S21074C12v2Ev
  ~S21074C1(); // tgen
  S21074C1(); // tgen
};
//SIG(1 S21074C1) C1{ VBC2{ VBC3{ VBC4{ v3 v4 v5 v6 v7 v8 v9 FD[3]} v10 v11 v12} v13 v14} v1 v2 FC5{ m Fi} Fi}


void  S21074C1 ::v1(){vfunc_called(this, "_ZN8S21074C12v1Ev");}
void  S21074C1 ::v2(){vfunc_called(this, "_ZN8S21074C12v2Ev");}
S21074C1 ::~S21074C1(){ note_dtor("S21074C1", this);} // tgen
S21074C1 ::S21074C1(){ note_ctor("S21074C1", this);} // tgen

static void Test_S21074C1()
{
  extern Class_Descriptor cd_S21074C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,14)];
    init_test(&cd_S21074C1, buf);
    S21074C1 *dp, &lv = *(dp=new (buf) S21074C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S21074C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21074C1)");
    check_base_class_offset(lv, (S21074C4*)(S21074C3*), ABISELECT(16,12), "S21074C1");
    check_base_class_offset(lv, (S21074C3*)(S21074C2*), 0, "S21074C1");
    check_base_class_offset(lv, (S21074C2*), 0, "S21074C1");
    check_field_offset(lv, s21074c1f0, ABISELECT(8,4), "S21074C1.s21074c1f0");
    check_field_offset(lv, s21074c1f1, ABISELECT(12,8), "S21074C1.s21074c1f1");
    test_class_info(&lv, &cd_S21074C1);
    dp->~S21074C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21074C1(Test_S21074C1, "S21074C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN8S21074C1C1Ev();
extern void _ZN8S21074C1D1Ev();
Name_Map name_map_S21074C1[] = {
  NSPAIR(_ZN8S21074C1C1Ev),
  NSPAIR(_ZN8S21074C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21074C4;
extern VTBL_ENTRY _ZTI8S21074C4[];
extern  VTBL_ENTRY _ZTV8S21074C4[];
extern Class_Descriptor cd_S21074C3;
extern VTBL_ENTRY _ZTI8S21074C3[];
extern  VTBL_ENTRY _ZTV8S21074C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21074C3[];
extern Class_Descriptor cd_S21074C2;
extern VTBL_ENTRY _ZTI8S21074C2[];
extern  VTBL_ENTRY _ZTV8S21074C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21074C2[];
static Base_Class bases_S21074C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21074C4,    ABISELECT(16,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //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_S21074C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21074C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21074C1[];
extern void _ZN8S21074C33v10Ev();
extern void _ZN8S21074C33v11Ev();
extern void _ZN8S21074C33v12Ev();
extern void _ZN8S21074C23v13Ev();
extern void _ZN8S21074C23v14Ev();
extern void _ZN8S21074C12v1Ev();
extern void _ZN8S21074C12v2Ev();
extern void _ZN8S21074C42v3Ev();
extern void _ZN8S21074C42v4Ev();
extern void _ZN8S21074C42v5Ev();
extern void _ZN8S21074C42v6Ev();
extern void _ZN8S21074C42v7Ev();
extern void _ZN8S21074C42v8Ev();
extern void _ZN8S21074C42v9Ev();
static  VTBL_ENTRY vtc_S21074C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21074C1[0]),
  (VTBL_ENTRY)&_ZN8S21074C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v11Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v12Ev,
  (VTBL_ENTRY)&_ZN8S21074C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21074C23v14Ev,
  (VTBL_ENTRY)&_ZN8S21074C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21074C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21074C1[0]),
  (VTBL_ENTRY)&_ZN8S21074C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v9Ev,
};
extern VTBL_ENTRY _ZTV8S21074C1[];
extern void _ZN8S21074C33v10Ev();
extern void _ZN8S21074C33v11Ev();
extern void _ZN8S21074C33v12Ev();
extern void _ZN8S21074C23v13Ev();
extern void _ZN8S21074C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S21074C2__8S21074C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21074C2[0]),
  (VTBL_ENTRY)&_ZN8S21074C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v11Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v12Ev,
  (VTBL_ENTRY)&_ZN8S21074C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21074C23v14Ev,
};
extern void _ZN8S21074C42v3Ev();
extern void _ZN8S21074C42v4Ev();
extern void _ZN8S21074C42v5Ev();
extern void _ZN8S21074C42v6Ev();
extern void _ZN8S21074C42v7Ev();
extern void _ZN8S21074C42v8Ev();
extern void _ZN8S21074C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S21074C4__8S21074C2__8S21074C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21074C2[0]),
  (VTBL_ENTRY)&_ZN8S21074C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v9Ev,
};
extern void _ZN8S21074C33v10Ev();
extern void _ZN8S21074C33v11Ev();
extern void _ZN8S21074C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S21074C3__8S21074C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21074C3[0]),
  (VTBL_ENTRY)&_ZN8S21074C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v11Ev,
  (VTBL_ENTRY)&_ZN8S21074C33v12Ev,
};
extern void _ZN8S21074C42v3Ev();
extern void _ZN8S21074C42v4Ev();
extern void _ZN8S21074C42v5Ev();
extern void _ZN8S21074C42v6Ev();
extern void _ZN8S21074C42v7Ev();
extern void _ZN8S21074C42v8Ev();
extern void _ZN8S21074C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S21074C4__8S21074C3__8S21074C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21074C3[0]),
  (VTBL_ENTRY)&_ZN8S21074C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21074C42v9Ev,
};
static  VTT_ENTRY vtt_S21074C1[] = {
  {&(_ZTV8S21074C1[10]),  10,33},
  {&(_ZTV8S21074C1[10]),  10,33},
  {&(_ZTV8S21074C1[10]),  10,33},
  {&(_ZTV8S21074C1[26]),  26,33},
  {&(_tg__ZTV8S21074C2__8S21074C1[7]),  7,12},
  {&(_tg__ZTV8S21074C2__8S21074C1[7]),  7,12},
  {&(_tg__ZTV8S21074C4__8S21074C2__8S21074C1[9]),  9,16},
  {&(_tg__ZTV8S21074C3__8S21074C1[3]),  3,6},
  {&(_tg__ZTV8S21074C4__8S21074C3__8S21074C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S21074C1[];
extern  VTBL_ENTRY _ZTV8S21074C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21074C1[];
Class_Descriptor cd_S21074C1 = {  "S21074C1", // class name
  bases_S21074C1, 3,
  &(vtc_S21074C1[0]), // expected_vtbl_contents
  &(vtt_S21074C1[0]), // expected_vtt_contents
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI8S21074C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21074C1),33, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21074C1),9, //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  S17154C2  {
  void *s17154c2f0[15];
  void  mf17154c2(); // _ZN8S17154C29mf17154c2Ev
  virtual  ~S17154C2(); // _ZN8S17154C2D1Ev
  S17154C2(); // tgen
};
//SIG(-1 S17154C2) C1{ vd m Fp[15]}


void  S17154C2 ::mf17154c2(){}
 S17154C2 ::~S17154C2(){ note_dtor("S17154C2", this);}
S17154C2 ::S17154C2(){ note_ctor("S17154C2", this);} // tgen

static void Test_S17154C2()
{
  extern Class_Descriptor cd_S17154C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S17154C2, buf);
    S17154C2 *dp, &lv = *(dp=new (buf) S17154C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S17154C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17154C2)");
    check_field_offset(lv, s17154c2f0, ABISELECT(8,4), "S17154C2.s17154c2f0");
    test_class_info(&lv, &cd_S17154C2);
    dp->~S17154C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17154C2(Test_S17154C2, "S17154C2", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S17154C2C1Ev();
extern void _ZN8S17154C2D1Ev();
Name_Map name_map_S17154C2[] = {
  NSPAIR(_ZN8S17154C2C1Ev),
  NSPAIR(_ZN8S17154C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S17154C2[];
extern void _ZN8S17154C2D1Ev();
extern void _ZN8S17154C2D0Ev();
static  VTBL_ENTRY vtc_S17154C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S17154C2[0]),
  (VTBL_ENTRY)&_ZN8S17154C2D1Ev,
  (VTBL_ENTRY)&_ZN8S17154C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S17154C2[];
extern  VTBL_ENTRY _ZTV8S17154C2[];
Class_Descriptor cd_S17154C2 = {  "S17154C2", // class name
  0,0,//no base classes
  &(vtc_S17154C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S17154C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S17154C2),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  S17154C3  : virtual S17154C2 {
  int s17154c3f0;
  short s17154c3f1;
  void *s17154c3f2;
  int s17154c3f3;
  long double s17154c3f4;
  void *s17154c3f5;
  ~S17154C3(); // tgen
  S17154C3(); // tgen
};
//SIG(1 S17154C3) C1{ VBC2{ vd m Fp[15]} Fi Fs Fp Fi FD Fp}


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

static void Test_S17154C3()
{
  extern Class_Descriptor cd_S17154C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,26)];
    init_test(&cd_S17154C3, buf);
    S17154C3 *dp, &lv = *(dp=new (buf) S17154C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,100), "sizeof(S17154C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S17154C3)");
    check_base_class_offset(lv, (S17154C2*), ABISELECT(56,36), "S17154C3");
    check_field_offset(lv, s17154c3f0, ABISELECT(8,4), "S17154C3.s17154c3f0");
    check_field_offset(lv, s17154c3f1, ABISELECT(12,8), "S17154C3.s17154c3f1");
    check_field_offset(lv, s17154c3f2, ABISELECT(16,12), "S17154C3.s17154c3f2");
    check_field_offset(lv, s17154c3f3, ABISELECT(24,16), "S17154C3.s17154c3f3");
    check_field_offset(lv, s17154c3f4, ABISELECT(32,20), "S17154C3.s17154c3f4");
    check_field_offset(lv, s17154c3f5, ABISELECT(48,32), "S17154C3.s17154c3f5");
    test_class_info(&lv, &cd_S17154C3);
    dp->~S17154C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17154C3(Test_S17154C3, "S17154C3", ABISELECT(192,100));

#else // __cplusplus

extern void _ZN8S17154C3C1Ev();
extern void _ZN8S17154C3D1Ev();
Name_Map name_map_S17154C3[] = {
  NSPAIR(_ZN8S17154C3C1Ev),
  NSPAIR(_ZN8S17154C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17154C2;
extern VTBL_ENTRY _ZTI8S17154C2[];
extern  VTBL_ENTRY _ZTV8S17154C2[];
static Base_Class bases_S17154C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17154C2,    ABISELECT(56,36), //bcp->offset
    5, //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 _ZTI8S17154C3[];
extern void _ZN8S17154C3D1Ev();
extern void _ZN8S17154C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S17154C3D1Ev,_ZTv0_n12_N8S17154C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S17154C3D1Ev,_ZThn36_N8S17154C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S17154C3D0Ev,_ZTv0_n12_N8S17154C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S17154C3D0Ev,_ZThn36_N8S17154C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S17154C3[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S17154C3[0]),
  (VTBL_ENTRY)&_ZN8S17154C3D1Ev,
  (VTBL_ENTRY)&_ZN8S17154C3D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S17154C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S17154C3D1Ev,_ZTv0_n12_N8S17154C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S17154C3D0Ev,_ZTv0_n12_N8S17154C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S17154C3[];
static  VTT_ENTRY vtt_S17154C3[] = {
  {&(_ZTV8S17154C3[3]),  3,10},
  {&(_ZTV8S17154C3[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S17154C3[];
extern  VTBL_ENTRY _ZTV8S17154C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S17154C3[];
static VTBL_ENTRY alt_thunk_names148[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S17154C3D0Ev,_ZTv0_n12_N8S17154C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S17154C3D0Ev,_ZThn36_N8S17154C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S17154C3D1Ev,_ZTv0_n12_N8S17154C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S17154C3D1Ev,_ZThn36_N8S17154C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S17154C3 = {  "S17154C3", // class name
  bases_S17154C3, 1,
  &(vtc_S17154C3[0]), // expected_vtbl_contents
  &(vtt_S17154C3[0]), // expected_vtt_contents
  ABISELECT(192,100), // object size
  NSPAIRA(_ZTI8S17154C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S17154C3),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S17154C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names148,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17154C1  {
  int s17154c1f0[2];
  void *s17154c1f1[9];
  int s17154c1f2[2];
  char s17154c1f3;
  ::S17154C2 s17154c1f4;
  char s17154c1f5;
  int s17154c1f6;
  ::S17154C3 s17154c1f7[3];
  void  mf17154c1(); // _ZN8S17154C19mf17154c1Ev
};
//SIG(1 S17154C1) C1{ m Fi[2] Fp[9] Fi[2] Fc FC2{ vd m Fp[15]} Fc Fi FC3{ VBC2 Fi Fs Fp Fi FD Fp}[3]}


void  S17154C1 ::mf17154c1(){}

static void Test_S17154C1()
{
  {
    init_simple_test("S17154C1");
    S17154C1 lv;
    check2(sizeof(lv), ABISELECT(816,428), "sizeof(S17154C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S17154C1)");
    check_field_offset(lv, s17154c1f0, 0, "S17154C1.s17154c1f0");
    check_field_offset(lv, s17154c1f1, 8, "S17154C1.s17154c1f1");
    check_field_offset(lv, s17154c1f2, ABISELECT(80,44), "S17154C1.s17154c1f2");
    check_field_offset(lv, s17154c1f3, ABISELECT(88,52), "S17154C1.s17154c1f3");
    check_field_offset(lv, s17154c1f4, ABISELECT(96,56), "S17154C1.s17154c1f4");
    check_field_offset(lv, s17154c1f5, ABISELECT(224,120), "S17154C1.s17154c1f5");
    check_field_offset(lv, s17154c1f6, ABISELECT(228,124), "S17154C1.s17154c1f6");
    check_field_offset(lv, s17154c1f7, ABISELECT(240,128), "S17154C1.s17154c1f7");
  }
}
static Arrange_To_Call_Me vS17154C1(Test_S17154C1, "S17154C1", ABISELECT(816,428));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6417C2_nt  {
  virtual  ~S6417C2_nt(); // _ZN10S6417C2_ntD1Ev
  virtual void  v1(); // _ZN10S6417C2_nt2v1Ev
  virtual void  v2(); // _ZN10S6417C2_nt2v2Ev
  virtual void  v3(); // _ZN10S6417C2_nt2v3Ev
  S6417C2_nt(); // tgen
};
//SIG(-1 S6417C2_nt) C1{ vd v1 v2 v3}


 S6417C2_nt ::~S6417C2_nt(){ note_dtor("S6417C2_nt", this);}
void  S6417C2_nt ::v1(){vfunc_called(this, "_ZN10S6417C2_nt2v1Ev");}
void  S6417C2_nt ::v2(){vfunc_called(this, "_ZN10S6417C2_nt2v2Ev");}
void  S6417C2_nt ::v3(){vfunc_called(this, "_ZN10S6417C2_nt2v3Ev");}
S6417C2_nt ::S6417C2_nt(){ note_ctor("S6417C2_nt", this);} // tgen

//skip512 S6417C2_nt

#else // __cplusplus

extern void _ZN10S6417C2_ntC1Ev();
extern void _ZN10S6417C2_ntD1Ev();
Name_Map name_map_S6417C2_nt[] = {
  NSPAIR(_ZN10S6417C2_ntC1Ev),
  NSPAIR(_ZN10S6417C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6417C2_nt[];
extern void _ZN10S6417C2_ntD1Ev();
extern void _ZN10S6417C2_ntD0Ev();
extern void _ZN10S6417C2_nt2v1Ev();
extern void _ZN10S6417C2_nt2v2Ev();
extern void _ZN10S6417C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S6417C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6417C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6417C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6417C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6417C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S6417C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S6417C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S6417C2_nt[];
VTBL_ENTRY *P__ZTI10S6417C2_nt = _ZTI10S6417C2_nt; 
extern  VTBL_ENTRY _ZTV10S6417C2_nt[];
Class_Descriptor cd_S6417C2_nt = {  "S6417C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6417C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6417C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6417C2_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6417C4  {
  __tsi64 s6417c4f0;
  virtual  ~S6417C4(); // _ZN7S6417C4D1Ev
  virtual void  v4(); // _ZN7S6417C42v4Ev
  virtual void  v5(); // _ZN7S6417C42v5Ev
  S6417C4(); // tgen
};
//SIG(-1 S6417C4) C1{ vd v1 v2 FL}


 S6417C4 ::~S6417C4(){ note_dtor("S6417C4", this);}
void  S6417C4 ::v4(){vfunc_called(this, "_ZN7S6417C42v4Ev");}
void  S6417C4 ::v5(){vfunc_called(this, "_ZN7S6417C42v5Ev");}
S6417C4 ::S6417C4(){ note_ctor("S6417C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6417C4C1Ev();
extern void _ZN7S6417C4D1Ev();
Name_Map name_map_S6417C4[] = {
  NSPAIR(_ZN7S6417C4C1Ev),
  NSPAIR(_ZN7S6417C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6417C4[];
extern void _ZN7S6417C4D1Ev();
extern void _ZN7S6417C4D0Ev();
extern void _ZN7S6417C42v4Ev();
extern void _ZN7S6417C42v5Ev();
static  VTBL_ENTRY vtc_S6417C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6417C4[0]),
  (VTBL_ENTRY)&_ZN7S6417C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6417C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6417C42v4Ev,
  (VTBL_ENTRY)&_ZN7S6417C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S6417C4[];
extern  VTBL_ENTRY _ZTV7S6417C4[];
Class_Descriptor cd_S6417C4 = {  "S6417C4", // class name
  0,0,//no base classes
  &(vtc_S6417C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S6417C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6417C4),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  S6417C3  : S6417C4 {
  long double s6417c3f0;
  int s6417c3f1;
  virtual  ~S6417C3(); // _ZN7S6417C3D1Ev
  virtual void  v6(); // _ZN7S6417C32v6Ev
  virtual void  v7(); // _ZN7S6417C32v7Ev
  virtual void  v8(); // _ZN7S6417C32v8Ev
  virtual void  v9(); // _ZN7S6417C32v9Ev
  virtual void  v10(); // _ZN7S6417C33v10Ev
  S6417C3(); // tgen
};
//SIG(-1 S6417C3) C1{ BC2{ vd v6 v7 FL} vd v1 v2 v3 v4 v5 FD Fi}


 S6417C3 ::~S6417C3(){ note_dtor("S6417C3", this);}
void  S6417C3 ::v6(){vfunc_called(this, "_ZN7S6417C32v6Ev");}
void  S6417C3 ::v7(){vfunc_called(this, "_ZN7S6417C32v7Ev");}
void  S6417C3 ::v8(){vfunc_called(this, "_ZN7S6417C32v8Ev");}
void  S6417C3 ::v9(){vfunc_called(this, "_ZN7S6417C32v9Ev");}
void  S6417C3 ::v10(){vfunc_called(this, "_ZN7S6417C33v10Ev");}
S6417C3 ::S6417C3(){ note_ctor("S6417C3", this);} // tgen

static void Test_S6417C3()
{
  extern Class_Descriptor cd_S6417C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S6417C3, buf);
    S6417C3 *dp, &lv = *(dp=new (buf) S6417C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S6417C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6417C3)");
    check_base_class_offset(lv, (S6417C4*), 0, "S6417C3");
    check_field_offset(lv, s6417c3f0, ABISELECT(16,12), "S6417C3.s6417c3f0");
    check_field_offset(lv, s6417c3f1, ABISELECT(32,24), "S6417C3.s6417c3f1");
    test_class_info(&lv, &cd_S6417C3);
    dp->~S6417C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6417C3(Test_S6417C3, "S6417C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S6417C3C1Ev();
extern void _ZN7S6417C3D1Ev();
Name_Map name_map_S6417C3[] = {
  NSPAIR(_ZN7S6417C3C1Ev),
  NSPAIR(_ZN7S6417C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6417C4;
extern VTBL_ENTRY _ZTI7S6417C4[];
extern  VTBL_ENTRY _ZTV7S6417C4[];
static Base_Class bases_S6417C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6417C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6417C3[];
extern void _ZN7S6417C3D1Ev();
extern void _ZN7S6417C3D0Ev();
extern void _ZN7S6417C42v4Ev();
extern void _ZN7S6417C42v5Ev();
extern void _ZN7S6417C32v6Ev();
extern void _ZN7S6417C32v7Ev();
extern void _ZN7S6417C32v8Ev();
extern void _ZN7S6417C32v9Ev();
extern void _ZN7S6417C33v10Ev();
static  VTBL_ENTRY vtc_S6417C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6417C3[0]),
  (VTBL_ENTRY)&_ZN7S6417C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6417C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6417C42v4Ev,
  (VTBL_ENTRY)&_ZN7S6417C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6417C32v6Ev,
  (VTBL_ENTRY)&_ZN7S6417C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6417C32v8Ev,
  (VTBL_ENTRY)&_ZN7S6417C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6417C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S6417C3[];
extern  VTBL_ENTRY _ZTV7S6417C3[];
Class_Descriptor cd_S6417C3 = {  "S6417C3", // class name
  bases_S6417C3, 1,
  &(vtc_S6417C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S6417C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6417C3),11, //virtual function table var
  2, // 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  S6417C1  : S6417C2_nt , virtual S6417C3 , S6417C4 {
  ::S6417C4 s6417c1f0[3];
  virtual  ~S6417C1(); // _ZN7S6417C1D2Ev
  S6417C1(); // tgen
};
//SIG(1 S6417C1) C1{ BC2{ vd v1 v2 v3} VBC3{ BC4{ vd v4 v5 FL} vd v6 v7 v8 v9 v10 FD Fi} BC4 vd FC4[3]}


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

static void Test_S6417C1()
{
  extern Class_Descriptor cd_S6417C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S6417C1, buf);
    S6417C1 *dp, &lv = *(dp=new (buf) S6417C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S6417C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6417C1)");
    check_base_class_offset(lv, (S6417C2_nt*), 0, "S6417C1");
    check_base_class_offset(lv, (S6417C4*)(S6417C3*), ABISELECT(80,52), "S6417C1");
    check_base_class_offset(lv, (S6417C3*), ABISELECT(80,52), "S6417C1");
    /*is_ambiguous_... S6417C1::S6417C4 */ AMB_check_base_class_offset(lv, (S6417C4*), ABISELECT(8,4), "S6417C1");
    check_field_offset(lv, s6417c1f0, ABISELECT(24,16), "S6417C1.s6417c1f0");
    test_class_info(&lv, &cd_S6417C1);
    dp->~S6417C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6417C1(Test_S6417C1, "S6417C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S6417C1C1Ev();
extern void _ZN7S6417C1D2Ev();
Name_Map name_map_S6417C1[] = {
  NSPAIR(_ZN7S6417C1C1Ev),
  NSPAIR(_ZN7S6417C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6417C2_nt;
extern VTBL_ENTRY _ZTI10S6417C2_nt[];
extern  VTBL_ENTRY _ZTV10S6417C2_nt[];
extern Class_Descriptor cd_S6417C4;
extern VTBL_ENTRY _ZTI7S6417C4[];
extern  VTBL_ENTRY _ZTV7S6417C4[];
extern Class_Descriptor cd_S6417C3;
extern VTBL_ENTRY _ZTI7S6417C3[];
extern  VTBL_ENTRY _ZTV7S6417C3[];
extern Class_Descriptor cd_S6417C4;
extern VTBL_ENTRY _ZTI7S6417C4[];
extern  VTBL_ENTRY _ZTV7S6417C4[];
static Base_Class bases_S6417C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6417C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6417C4,    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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6417C3,    ABISELECT(80,52), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6417C4,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6417C1[];
extern void _ZN7S6417C1D1Ev();
extern void _ZN7S6417C1D0Ev();
extern void _ZN10S6417C2_nt2v1Ev();
extern void _ZN10S6417C2_nt2v2Ev();
extern void _ZN10S6417C2_nt2v3Ev();
extern void ABISELECT(_ZThn8_N7S6417C1D1Ev,_ZThn4_N7S6417C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S6417C1D0Ev,_ZThn4_N7S6417C1D0Ev)();
extern void _ZN7S6417C42v4Ev();
extern void _ZN7S6417C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S6417C1D1Ev,_ZTv0_n12_N7S6417C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S6417C1D1Ev,_ZThn52_N7S6417C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6417C1D0Ev,_ZTv0_n12_N7S6417C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S6417C1D0Ev,_ZThn52_N7S6417C1D0Ev)() __attribute__((weak));
extern void _ZN7S6417C42v4Ev();
extern void _ZN7S6417C42v5Ev();
extern void _ZN7S6417C32v6Ev();
extern void _ZN7S6417C32v7Ev();
extern void _ZN7S6417C32v8Ev();
extern void _ZN7S6417C32v9Ev();
extern void _ZN7S6417C33v10Ev();
static  VTBL_ENTRY vtc_S6417C1[] = {
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6417C1[0]),
  (VTBL_ENTRY)&_ZN7S6417C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6417C1D0Ev,
  (VTBL_ENTRY)&_ZN10S6417C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S6417C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S6417C2_nt2v3Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6417C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6417C1D1Ev,_ZThn4_N7S6417C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6417C1D0Ev,_ZThn4_N7S6417C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6417C42v4Ev,
  (VTBL_ENTRY)&_ZN7S6417C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S6417C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6417C1D1Ev,_ZTv0_n12_N7S6417C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6417C1D0Ev,_ZTv0_n12_N7S6417C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6417C42v4Ev,
  (VTBL_ENTRY)&_ZN7S6417C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6417C32v6Ev,
  (VTBL_ENTRY)&_ZN7S6417C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6417C32v8Ev,
  (VTBL_ENTRY)&_ZN7S6417C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6417C33v10Ev,
};
extern VTBL_ENTRY _ZTV7S6417C1[];
static  VTT_ENTRY vtt_S6417C1[] = {
  {&(_ZTV7S6417C1[3]),  3,33},
  {&(_ZTV7S6417C1[24]),  24,33},
};
extern VTBL_ENTRY _ZTI7S6417C1[];
extern  VTBL_ENTRY _ZTV7S6417C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6417C1[];
static VTBL_ENTRY alt_thunk_names149[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6417C1D0Ev,_ZTv0_n12_N7S6417C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S6417C1D0Ev,_ZThn52_N7S6417C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6417C1D1Ev,_ZTv0_n12_N7S6417C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S6417C1D1Ev,_ZThn52_N7S6417C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6417C1 = {  "S6417C1", // class name
  bases_S6417C1, 4,
  &(vtc_S6417C1[0]), // expected_vtbl_contents
  &(vtt_S6417C1[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S6417C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6417C1),33, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6417C1),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names149,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8325C4_nt  {
  char s8325c4f0[12];
};
//SIG(-1 S8325C4_nt) C1{ Fc[12]}



//skip512 S8325C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8325C3_nt  {
  ::S8325C4_nt s8325c3f0;
  void  mf8325c3(); // _ZN10S8325C3_nt8mf8325c3Ev
};
//SIG(-1 S8325C3_nt) C1{ m FC2{ Fc[12]}}


void  S8325C3_nt ::mf8325c3(){}

//skip512 S8325C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8325C5_nt  {
  ::S10155C13_nt s8325c5f0;
  ::S10155C13_nt s8325c5f1;
  ::S10155C13_nt s8325c5f2;
  ::S10155C13_nt s8325c5f3;
};
//SIG(-1 S8325C5_nt) C1{ FC2{ Fi[4]} FC2 FC2 FC2}



//skip512 S8325C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8325C1  : S2863C11_nt {
  int s8325c1f0;
  ::S8325C3_nt s8325c1f1;
  void *s8325c1f2[4];
  int s8325c1f3[2];
  ::S8325C5_nt s8325c1f4;
  __tsi64 s8325c1f5;
  virtual  ~S8325C1(); // _ZN7S8325C1D1Ev
  S8325C1(); // tgen
};
//SIG(1 S8325C1) C1{ BC2{ vd m} vd Fi FC3{ m FC4{ Fc[12]}} Fp[4] Fi[2] FC5{ FC6{ Fi[4]} FC6 FC6 FC6} FL}


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

static void Test_S8325C1()
{
  extern Class_Descriptor cd_S8325C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,30)];
    init_test(&cd_S8325C1, buf);
    S8325C1 *dp, &lv = *(dp=new (buf) S8325C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,116), "sizeof(S8325C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8325C1)");
    check_base_class_offset(lv, (S2863C11_nt*), 0, "S8325C1");
    check_field_offset(lv, s8325c1f0, ABISELECT(8,4), "S8325C1.s8325c1f0");
    check_field_offset(lv, s8325c1f1, ABISELECT(12,8), "S8325C1.s8325c1f1");
    check_field_offset(lv, s8325c1f2, ABISELECT(24,20), "S8325C1.s8325c1f2");
    check_field_offset(lv, s8325c1f3, ABISELECT(56,36), "S8325C1.s8325c1f3");
    check_field_offset(lv, s8325c1f4, ABISELECT(64,44), "S8325C1.s8325c1f4");
    check_field_offset(lv, s8325c1f5, ABISELECT(128,108), "S8325C1.s8325c1f5");
    test_class_info(&lv, &cd_S8325C1);
    dp->~S8325C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8325C1(Test_S8325C1, "S8325C1", ABISELECT(136,116));

#else // __cplusplus

extern void _ZN7S8325C1C1Ev();
extern void _ZN7S8325C1D1Ev();
Name_Map name_map_S8325C1[] = {
  NSPAIR(_ZN7S8325C1C1Ev),
  NSPAIR(_ZN7S8325C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2863C11_nt;
extern VTBL_ENTRY _ZTI11S2863C11_nt[];
extern  VTBL_ENTRY _ZTV11S2863C11_nt[];
static Base_Class bases_S8325C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2863C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8325C1[];
extern void _ZN7S8325C1D1Ev();
extern void _ZN7S8325C1D0Ev();
static  VTBL_ENTRY vtc_S8325C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8325C1[0]),
  (VTBL_ENTRY)&_ZN7S8325C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8325C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8325C1[];
extern  VTBL_ENTRY _ZTV7S8325C1[];
Class_Descriptor cd_S8325C1 = {  "S8325C1", // class name
  bases_S8325C1, 1,
  &(vtc_S8325C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,116), // object size
  NSPAIRA(_ZTI7S8325C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8325C1),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  S15565C3_nt  {
  int s15565c3f0;
  char s15565c3f1[32];
};
//SIG(-1 S15565C3_nt) C1{ Fi Fc[32]}



//skip512 S15565C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S15565C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15565C1  {
  ::S10155C9 s15565c1f0;
  ::S15565C3_nt s15565c1f1;
  int s15565c1f2[5];
  ::S15565C4_nt s15565c1f3;
  int s15565c1f4;
  char s15565c1f5[2];
  void  mf15565c1(); // _ZN8S15565C19mf15565c1Ev
};
//SIG(1 S15565C1) C1{ m FC2{ Fi[4] Fc[64] Fi[2] Fc[8] Fi} FC3{ Fi Fc[32]} Fi[5] FC4{ Fc[16]} Fi Fc[2]}


void  S15565C1 ::mf15565c1(){}

static void Test_S15565C1()
{
  {
    init_simple_test("S15565C1");
    S15565C1 lv;
    check2(sizeof(lv), 180, "sizeof(S15565C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15565C1)");
    check_field_offset(lv, s15565c1f0, 0, "S15565C1.s15565c1f0");
    check_field_offset(lv, s15565c1f1, 100, "S15565C1.s15565c1f1");
    check_field_offset(lv, s15565c1f2, 136, "S15565C1.s15565c1f2");
    check_field_offset(lv, s15565c1f3, 156, "S15565C1.s15565c1f3");
    check_field_offset(lv, s15565c1f4, 172, "S15565C1.s15565c1f4");
    check_field_offset(lv, s15565c1f5, 176, "S15565C1.s15565c1f5");
  }
}
static Arrange_To_Call_Me vS15565C1(Test_S15565C1, "S15565C1", 180);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9396C2  {
  ::S2123C20_nt s9396c2f0;
  int s9396c2f1[2];
  char s9396c2f2;
  virtual  ~S9396C2(); // _ZN7S9396C2D1Ev
  virtual void  v3(); // _ZN7S9396C22v3Ev
  virtual void  v4(); // _ZN7S9396C22v4Ev
  virtual void  v5(); // _ZN7S9396C22v5Ev
  S9396C2(); // tgen
};
//SIG(-1 S9396C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9396C2 ::~S9396C2(){ note_dtor("S9396C2", this);}
void  S9396C2 ::v3(){vfunc_called(this, "_ZN7S9396C22v3Ev");}
void  S9396C2 ::v4(){vfunc_called(this, "_ZN7S9396C22v4Ev");}
void  S9396C2 ::v5(){vfunc_called(this, "_ZN7S9396C22v5Ev");}
S9396C2 ::S9396C2(){ note_ctor("S9396C2", this);} // tgen

static void Test_S9396C2()
{
  extern Class_Descriptor cd_S9396C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9396C2, buf);
    S9396C2 *dp, &lv = *(dp=new (buf) S9396C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9396C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9396C2)");
    check_field_offset(lv, s9396c2f0, ABISELECT(8,4), "S9396C2.s9396c2f0");
    check_field_offset(lv, s9396c2f1, ABISELECT(24,16), "S9396C2.s9396c2f1");
    check_field_offset(lv, s9396c2f2, ABISELECT(32,24), "S9396C2.s9396c2f2");
    test_class_info(&lv, &cd_S9396C2);
    dp->~S9396C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9396C2(Test_S9396C2, "S9396C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9396C2C1Ev();
extern void _ZN7S9396C2D1Ev();
Name_Map name_map_S9396C2[] = {
  NSPAIR(_ZN7S9396C2C1Ev),
  NSPAIR(_ZN7S9396C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9396C2[];
extern void _ZN7S9396C2D1Ev();
extern void _ZN7S9396C2D0Ev();
extern void _ZN7S9396C22v3Ev();
extern void _ZN7S9396C22v4Ev();
extern void _ZN7S9396C22v5Ev();
static  VTBL_ENTRY vtc_S9396C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9396C2[0]),
  (VTBL_ENTRY)&_ZN7S9396C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9396C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9396C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9396C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9396C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9396C2[];
extern  VTBL_ENTRY _ZTV7S9396C2[];
Class_Descriptor cd_S9396C2 = {  "S9396C2", // class name
  0,0,//no base classes
  &(vtc_S9396C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9396C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9396C2),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  S9396C1  : S9396C2 {
  void *s9396c1f0[2];
  int s9396c1f1;
  ::S21777C11_nt s9396c1f2;
  virtual  ~S9396C1(); // _ZN7S9396C1D1Ev
  virtual void  v1(); // _ZN7S9396C12v1Ev
  virtual void  v2(); // _ZN7S9396C12v2Ev
  S9396C1(); // tgen
};
//SIG(1 S9396C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[2] Fi FC5{ m Fp}}


 S9396C1 ::~S9396C1(){ note_dtor("S9396C1", this);}
void  S9396C1 ::v1(){vfunc_called(this, "_ZN7S9396C12v1Ev");}
void  S9396C1 ::v2(){vfunc_called(this, "_ZN7S9396C12v2Ev");}
S9396C1 ::S9396C1(){ note_ctor("S9396C1", this);} // tgen

static void Test_S9396C1()
{
  extern Class_Descriptor cd_S9396C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S9396C1, buf);
    S9396C1 *dp, &lv = *(dp=new (buf) S9396C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S9396C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9396C1)");
    check_base_class_offset(lv, (S9396C2*), 0, "S9396C1");
    check_field_offset(lv, s9396c1f0, ABISELECT(40,28), "S9396C1.s9396c1f0");
    check_field_offset(lv, s9396c1f1, ABISELECT(56,36), "S9396C1.s9396c1f1");
    check_field_offset(lv, s9396c1f2, ABISELECT(64,40), "S9396C1.s9396c1f2");
    test_class_info(&lv, &cd_S9396C1);
    dp->~S9396C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9396C1(Test_S9396C1, "S9396C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S9396C1C1Ev();
extern void _ZN7S9396C1D1Ev();
Name_Map name_map_S9396C1[] = {
  NSPAIR(_ZN7S9396C1C1Ev),
  NSPAIR(_ZN7S9396C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9396C2;
extern VTBL_ENTRY _ZTI7S9396C2[];
extern  VTBL_ENTRY _ZTV7S9396C2[];
static Base_Class bases_S9396C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9396C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9396C1[];
extern void _ZN7S9396C1D1Ev();
extern void _ZN7S9396C1D0Ev();
extern void _ZN7S9396C22v3Ev();
extern void _ZN7S9396C22v4Ev();
extern void _ZN7S9396C22v5Ev();
extern void _ZN7S9396C12v1Ev();
extern void _ZN7S9396C12v2Ev();
static  VTBL_ENTRY vtc_S9396C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9396C1[0]),
  (VTBL_ENTRY)&_ZN7S9396C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9396C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9396C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9396C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9396C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9396C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9396C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9396C1[];
extern  VTBL_ENTRY _ZTV7S9396C1[];
Class_Descriptor cd_S9396C1 = {  "S9396C1", // class name
  bases_S9396C1, 1,
  &(vtc_S9396C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S9396C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9396C1),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  S9225C2  {
  ::S2123C20_nt s9225c2f0;
  int s9225c2f1[2];
  char s9225c2f2;
  virtual  ~S9225C2(); // _ZN7S9225C2D1Ev
  virtual void  v3(); // _ZN7S9225C22v3Ev
  virtual void  v4(); // _ZN7S9225C22v4Ev
  virtual void  v5(); // _ZN7S9225C22v5Ev
  S9225C2(); // tgen
};
//SIG(-1 S9225C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9225C2 ::~S9225C2(){ note_dtor("S9225C2", this);}
void  S9225C2 ::v3(){vfunc_called(this, "_ZN7S9225C22v3Ev");}
void  S9225C2 ::v4(){vfunc_called(this, "_ZN7S9225C22v4Ev");}
void  S9225C2 ::v5(){vfunc_called(this, "_ZN7S9225C22v5Ev");}
S9225C2 ::S9225C2(){ note_ctor("S9225C2", this);} // tgen

static void Test_S9225C2()
{
  extern Class_Descriptor cd_S9225C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9225C2, buf);
    S9225C2 *dp, &lv = *(dp=new (buf) S9225C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9225C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9225C2)");
    check_field_offset(lv, s9225c2f0, ABISELECT(8,4), "S9225C2.s9225c2f0");
    check_field_offset(lv, s9225c2f1, ABISELECT(24,16), "S9225C2.s9225c2f1");
    check_field_offset(lv, s9225c2f2, ABISELECT(32,24), "S9225C2.s9225c2f2");
    test_class_info(&lv, &cd_S9225C2);
    dp->~S9225C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9225C2(Test_S9225C2, "S9225C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9225C2C1Ev();
extern void _ZN7S9225C2D1Ev();
Name_Map name_map_S9225C2[] = {
  NSPAIR(_ZN7S9225C2C1Ev),
  NSPAIR(_ZN7S9225C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9225C2[];
extern void _ZN7S9225C2D1Ev();
extern void _ZN7S9225C2D0Ev();
extern void _ZN7S9225C22v3Ev();
extern void _ZN7S9225C22v4Ev();
extern void _ZN7S9225C22v5Ev();
static  VTBL_ENTRY vtc_S9225C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9225C2[0]),
  (VTBL_ENTRY)&_ZN7S9225C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9225C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9225C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9225C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9225C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9225C2[];
extern  VTBL_ENTRY _ZTV7S9225C2[];
Class_Descriptor cd_S9225C2 = {  "S9225C2", // class name
  0,0,//no base classes
  &(vtc_S9225C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9225C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9225C2),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  S9225C1  : S9225C2 {
  __tsi64 s9225c1f0;
  ::S2123C20_nt s9225c1f1;
  ::S3681C6_nt s9225c1f2;
  virtual void  v1(); // _ZN7S9225C12v1Ev
  virtual void  v2(); // _ZN7S9225C12v2Ev
  ~S9225C1(); // tgen
  S9225C1(); // tgen
};
//SIG(1 S9225C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 FL FC3 FC5{ m Fp[2]}}


void  S9225C1 ::v1(){vfunc_called(this, "_ZN7S9225C12v1Ev");}
void  S9225C1 ::v2(){vfunc_called(this, "_ZN7S9225C12v2Ev");}
S9225C1 ::~S9225C1(){ note_dtor("S9225C1", this);} // tgen
S9225C1 ::S9225C1(){ note_ctor("S9225C1", this);} // tgen

static void Test_S9225C1()
{
  extern Class_Descriptor cd_S9225C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S9225C1, buf);
    S9225C1 *dp, &lv = *(dp=new (buf) S9225C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S9225C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9225C1)");
    check_base_class_offset(lv, (S9225C2*), 0, "S9225C1");
    check_field_offset(lv, s9225c1f0, ABISELECT(40,28), "S9225C1.s9225c1f0");
    check_field_offset(lv, s9225c1f1, ABISELECT(48,36), "S9225C1.s9225c1f1");
    check_field_offset(lv, s9225c1f2, ABISELECT(64,48), "S9225C1.s9225c1f2");
    test_class_info(&lv, &cd_S9225C1);
    dp->~S9225C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9225C1(Test_S9225C1, "S9225C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S9225C1C1Ev();
extern void _ZN7S9225C1D1Ev();
Name_Map name_map_S9225C1[] = {
  NSPAIR(_ZN7S9225C1C1Ev),
  NSPAIR(_ZN7S9225C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9225C2;
extern VTBL_ENTRY _ZTI7S9225C2[];
extern  VTBL_ENTRY _ZTV7S9225C2[];
static Base_Class bases_S9225C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9225C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9225C1[];
extern void _ZN7S9225C1D1Ev();
extern void _ZN7S9225C1D0Ev();
extern void _ZN7S9225C22v3Ev();
extern void _ZN7S9225C22v4Ev();
extern void _ZN7S9225C22v5Ev();
extern void _ZN7S9225C12v1Ev();
extern void _ZN7S9225C12v2Ev();
static  VTBL_ENTRY vtc_S9225C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9225C1[0]),
  (VTBL_ENTRY)&_ZN7S9225C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9225C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9225C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9225C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9225C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9225C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9225C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9225C1[];
extern  VTBL_ENTRY _ZTV7S9225C1[];
Class_Descriptor cd_S9225C1 = {  "S9225C1", // class name
  bases_S9225C1, 1,
  &(vtc_S9225C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S9225C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9225C1),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  S13355C4_nt  {
  char s13355c4f0[4];
};
//SIG(-1 S13355C4_nt) C1{ Fc[4]}



//skip512 S13355C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13355C1  {
  int s13355c1f0[3];
  __tsi64 s13355c1f1;
  ::S2123C20_nt s13355c1f2;
  ::S2123C20_nt s13355c1f3;
  ::S2123C20_nt s13355c1f4;
  ::S2123C20_nt s13355c1f5;
  ::S2123C20_nt s13355c1f6;
  ::S2123C20_nt s13355c1f7;
  ::S2123C20_nt s13355c1f8;
  int s13355c1f9[3];
  ::S13355C4_nt s13355c1f10;
};
//SIG(1 S13355C1) C1{ Fi[3] FL FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FC2 FC2 FC2 Fi[3] FC4{ Fc[4]}}



static void Test_S13355C1()
{
  {
    init_simple_test("S13355C1");
    S13355C1 lv;
    check2(sizeof(lv), ABISELECT(152,120), "sizeof(S13355C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13355C1)");
    check_field_offset(lv, s13355c1f0, 0, "S13355C1.s13355c1f0");
    check_field_offset(lv, s13355c1f1, ABISELECT(16,12), "S13355C1.s13355c1f1");
    check_field_offset(lv, s13355c1f2, ABISELECT(24,20), "S13355C1.s13355c1f2");
    check_field_offset(lv, s13355c1f3, ABISELECT(40,32), "S13355C1.s13355c1f3");
    check_field_offset(lv, s13355c1f4, ABISELECT(56,44), "S13355C1.s13355c1f4");
    check_field_offset(lv, s13355c1f5, ABISELECT(72,56), "S13355C1.s13355c1f5");
    check_field_offset(lv, s13355c1f6, ABISELECT(88,68), "S13355C1.s13355c1f6");
    check_field_offset(lv, s13355c1f7, ABISELECT(104,80), "S13355C1.s13355c1f7");
    check_field_offset(lv, s13355c1f8, ABISELECT(120,92), "S13355C1.s13355c1f8");
    check_field_offset(lv, s13355c1f9, ABISELECT(136,104), "S13355C1.s13355c1f9");
    check_field_offset(lv, s13355c1f10, ABISELECT(148,116), "S13355C1.s13355c1f10");
  }
}
static Arrange_To_Call_Me vS13355C1(Test_S13355C1, "S13355C1", ABISELECT(152,120));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9704C2  {
  ::S2123C20_nt s9704c2f0;
  int s9704c2f1[2];
  char s9704c2f2;
  virtual  ~S9704C2(); // _ZN7S9704C2D1Ev
  virtual void  v4(); // _ZN7S9704C22v4Ev
  virtual void  v5(); // _ZN7S9704C22v5Ev
  virtual void  v6(); // _ZN7S9704C22v6Ev
  S9704C2(); // tgen
};
//SIG(-1 S9704C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9704C2 ::~S9704C2(){ note_dtor("S9704C2", this);}
void  S9704C2 ::v4(){vfunc_called(this, "_ZN7S9704C22v4Ev");}
void  S9704C2 ::v5(){vfunc_called(this, "_ZN7S9704C22v5Ev");}
void  S9704C2 ::v6(){vfunc_called(this, "_ZN7S9704C22v6Ev");}
S9704C2 ::S9704C2(){ note_ctor("S9704C2", this);} // tgen

static void Test_S9704C2()
{
  extern Class_Descriptor cd_S9704C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9704C2, buf);
    S9704C2 *dp, &lv = *(dp=new (buf) S9704C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9704C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9704C2)");
    check_field_offset(lv, s9704c2f0, ABISELECT(8,4), "S9704C2.s9704c2f0");
    check_field_offset(lv, s9704c2f1, ABISELECT(24,16), "S9704C2.s9704c2f1");
    check_field_offset(lv, s9704c2f2, ABISELECT(32,24), "S9704C2.s9704c2f2");
    test_class_info(&lv, &cd_S9704C2);
    dp->~S9704C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9704C2(Test_S9704C2, "S9704C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9704C2C1Ev();
extern void _ZN7S9704C2D1Ev();
Name_Map name_map_S9704C2[] = {
  NSPAIR(_ZN7S9704C2C1Ev),
  NSPAIR(_ZN7S9704C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9704C2[];
extern void _ZN7S9704C2D1Ev();
extern void _ZN7S9704C2D0Ev();
extern void _ZN7S9704C22v4Ev();
extern void _ZN7S9704C22v5Ev();
extern void _ZN7S9704C22v6Ev();
static  VTBL_ENTRY vtc_S9704C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9704C2[0]),
  (VTBL_ENTRY)&_ZN7S9704C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9704C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9704C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9704C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9704C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9704C2[];
extern  VTBL_ENTRY _ZTV7S9704C2[];
Class_Descriptor cd_S9704C2 = {  "S9704C2", // class name
  0,0,//no base classes
  &(vtc_S9704C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9704C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9704C2),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  S9704C1  : S9704C2 {
  void *s9704c1f0;
  int s9704c1f1;
  void *s9704c1f2;
  int s9704c1f3;
  virtual  ~S9704C1(); // _ZN7S9704C1D1Ev
  virtual void  v1(); // _ZN7S9704C12v1Ev
  virtual void  v2(); // _ZN7S9704C12v2Ev
  virtual void  v3(); // _ZN7S9704C12v3Ev
  S9704C1(); // tgen
};
//SIG(1 S9704C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp Fi Fp Fi}


 S9704C1 ::~S9704C1(){ note_dtor("S9704C1", this);}
void  S9704C1 ::v1(){vfunc_called(this, "_ZN7S9704C12v1Ev");}
void  S9704C1 ::v2(){vfunc_called(this, "_ZN7S9704C12v2Ev");}
void  S9704C1 ::v3(){vfunc_called(this, "_ZN7S9704C12v3Ev");}
S9704C1 ::S9704C1(){ note_ctor("S9704C1", this);} // tgen

static void Test_S9704C1()
{
  extern Class_Descriptor cd_S9704C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S9704C1, buf);
    S9704C1 *dp, &lv = *(dp=new (buf) S9704C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S9704C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9704C1)");
    check_base_class_offset(lv, (S9704C2*), 0, "S9704C1");
    check_field_offset(lv, s9704c1f0, ABISELECT(40,28), "S9704C1.s9704c1f0");
    check_field_offset(lv, s9704c1f1, ABISELECT(48,32), "S9704C1.s9704c1f1");
    check_field_offset(lv, s9704c1f2, ABISELECT(56,36), "S9704C1.s9704c1f2");
    check_field_offset(lv, s9704c1f3, ABISELECT(64,40), "S9704C1.s9704c1f3");
    test_class_info(&lv, &cd_S9704C1);
    dp->~S9704C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9704C1(Test_S9704C1, "S9704C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S9704C1C1Ev();
extern void _ZN7S9704C1D1Ev();
Name_Map name_map_S9704C1[] = {
  NSPAIR(_ZN7S9704C1C1Ev),
  NSPAIR(_ZN7S9704C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9704C2;
extern VTBL_ENTRY _ZTI7S9704C2[];
extern  VTBL_ENTRY _ZTV7S9704C2[];
static Base_Class bases_S9704C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9704C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9704C1[];
extern void _ZN7S9704C1D1Ev();
extern void _ZN7S9704C1D0Ev();
extern void _ZN7S9704C22v4Ev();
extern void _ZN7S9704C22v5Ev();
extern void _ZN7S9704C22v6Ev();
extern void _ZN7S9704C12v1Ev();
extern void _ZN7S9704C12v2Ev();
extern void _ZN7S9704C12v3Ev();
static  VTBL_ENTRY vtc_S9704C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9704C1[0]),
  (VTBL_ENTRY)&_ZN7S9704C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9704C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9704C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9704C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9704C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9704C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9704C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9704C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9704C1[];
extern  VTBL_ENTRY _ZTV7S9704C1[];
Class_Descriptor cd_S9704C1 = {  "S9704C1", // class name
  bases_S9704C1, 1,
  &(vtc_S9704C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S9704C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9704C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14245C3_nt  {
  void *s14245c3f0;
  void *s14245c3f1;
};
//SIG(1 S14245C3_nt) C1{ Fp[2]}



//skip512 S14245C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14245C4_nt  {
  int s14245c4f0;
  void *s14245c4f1;
};
//SIG(1 S14245C4_nt) C1{ Fi Fp}



//skip512 S14245C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14245C7_nt  {
  void *s14245c7f0;
};
//SIG(1 S14245C7_nt) C1{ Fp}



//skip512 S14245C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14245C6  {
  ::S14245C7_nt s14245c6f0;
};
//SIG(1 S14245C6) U1{ FC2{ Fp}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14245C5  {
  int s14245c5f0;
  ::S14245C6 s14245c5f1;
};
//SIG(1 S14245C5) C1{ Fi FU2{ FC3{ Fp}}}



static void Test_S14245C5()
{
  {
    init_simple_test("S14245C5");
    S14245C5 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S14245C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14245C5)");
    check_field_offset(lv, s14245c5f0, 0, "S14245C5.s14245c5f0");
    check_field_offset(lv, s14245c5f1, ABISELECT(8,4), "S14245C5.s14245c5f1");
  }
}
static Arrange_To_Call_Me vS14245C5(Test_S14245C5, "S14245C5", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14245C2  {
  void *s14245c2f0;
  ::S14245C3_nt s14245c2f1;
  void *s14245c2f2;
  ::S14245C4_nt s14245c2f3;
  void *s14245c2f4;
  ::S14245C5 s14245c2f5;
};
//SIG(1 S14245C2) U1{ Fp FC2{ Fp Fp} Fp FC3{ Fi Fp} Fp FC4{ Fi FU5{ FC6{ Fp}}}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14245C1  {
  void *s14245c1f0;
  int s14245c1f1;
  void *s14245c1f2[2];
  ::S14245C2 s14245c1f3;
};
//SIG(1 S14245C1) C1{ Fp Fi Fp[2] FU2{ Fp FC3{ Fp Fp} Fp FC4{ Fi Fp} Fp FC5{ Fi FU6{ FC7{ Fp}}}}}



static void Test_S14245C1()
{
  {
    init_simple_test("S14245C1");
    S14245C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S14245C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14245C1)");
    check_field_offset(lv, s14245c1f0, 0, "S14245C1.s14245c1f0");
    check_field_offset(lv, s14245c1f1, ABISELECT(8,4), "S14245C1.s14245c1f1");
    check_field_offset(lv, s14245c1f2, ABISELECT(16,8), "S14245C1.s14245c1f2");
    check_field_offset(lv, s14245c1f3, ABISELECT(32,16), "S14245C1.s14245c1f3");
  }
}
static Arrange_To_Call_Me vS14245C1(Test_S14245C1, "S14245C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4394C3  {
  ::S2123C20_nt s4394c3f0;
  int s4394c3f1[2];
  char s4394c3f2;
  virtual  ~S4394C3(); // _ZN7S4394C3D1Ev
  virtual void  v2(); // _ZN7S4394C32v2Ev
  virtual void  v3(); // _ZN7S4394C32v3Ev
  virtual void  v4(); // _ZN7S4394C32v4Ev
  S4394C3(); // tgen
};
//SIG(-1 S4394C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4394C3 ::~S4394C3(){ note_dtor("S4394C3", this);}
void  S4394C3 ::v2(){vfunc_called(this, "_ZN7S4394C32v2Ev");}
void  S4394C3 ::v3(){vfunc_called(this, "_ZN7S4394C32v3Ev");}
void  S4394C3 ::v4(){vfunc_called(this, "_ZN7S4394C32v4Ev");}
S4394C3 ::S4394C3(){ note_ctor("S4394C3", this);} // tgen

static void Test_S4394C3()
{
  extern Class_Descriptor cd_S4394C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4394C3, buf);
    S4394C3 *dp, &lv = *(dp=new (buf) S4394C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4394C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4394C3)");
    check_field_offset(lv, s4394c3f0, ABISELECT(8,4), "S4394C3.s4394c3f0");
    check_field_offset(lv, s4394c3f1, ABISELECT(24,16), "S4394C3.s4394c3f1");
    check_field_offset(lv, s4394c3f2, ABISELECT(32,24), "S4394C3.s4394c3f2");
    test_class_info(&lv, &cd_S4394C3);
    dp->~S4394C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4394C3(Test_S4394C3, "S4394C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4394C3C1Ev();
extern void _ZN7S4394C3D1Ev();
Name_Map name_map_S4394C3[] = {
  NSPAIR(_ZN7S4394C3C1Ev),
  NSPAIR(_ZN7S4394C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4394C3[];
extern void _ZN7S4394C3D1Ev();
extern void _ZN7S4394C3D0Ev();
extern void _ZN7S4394C32v2Ev();
extern void _ZN7S4394C32v3Ev();
extern void _ZN7S4394C32v4Ev();
static  VTBL_ENTRY vtc_S4394C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4394C3[0]),
  (VTBL_ENTRY)&_ZN7S4394C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4394C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4394C3[];
extern  VTBL_ENTRY _ZTV7S4394C3[];
Class_Descriptor cd_S4394C3 = {  "S4394C3", // class name
  0,0,//no base classes
  &(vtc_S4394C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4394C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4394C3),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  S4394C2_nt  : S4394C3 {
  void *s4394c2f0;
  virtual void  v5(); // _ZN10S4394C2_nt2v5Ev
  virtual void  v6(); // _ZN10S4394C2_nt2v6Ev
  ~S4394C2_nt(); // tgen
  S4394C2_nt(); // tgen
};
//SIG(-1 S4394C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4394C2_nt ::v5(){vfunc_called(this, "_ZN10S4394C2_nt2v5Ev");}
void  S4394C2_nt ::v6(){vfunc_called(this, "_ZN10S4394C2_nt2v6Ev");}
S4394C2_nt ::~S4394C2_nt(){ note_dtor("S4394C2_nt", this);} // tgen
S4394C2_nt ::S4394C2_nt(){ note_ctor("S4394C2_nt", this);} // tgen

//skip512 S4394C2_nt

#else // __cplusplus

extern void _ZN10S4394C2_ntC1Ev();
extern void _ZN10S4394C2_ntD1Ev();
Name_Map name_map_S4394C2_nt[] = {
  NSPAIR(_ZN10S4394C2_ntC1Ev),
  NSPAIR(_ZN10S4394C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4394C3;
extern VTBL_ENTRY _ZTI7S4394C3[];
extern  VTBL_ENTRY _ZTV7S4394C3[];
static Base_Class bases_S4394C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4394C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4394C2_nt[];
extern void _ZN10S4394C2_ntD1Ev();
extern void _ZN10S4394C2_ntD0Ev();
extern void _ZN7S4394C32v2Ev();
extern void _ZN7S4394C32v3Ev();
extern void _ZN7S4394C32v4Ev();
extern void _ZN10S4394C2_nt2v5Ev();
extern void _ZN10S4394C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S4394C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4394C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4394C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4394C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v4Ev,
  (VTBL_ENTRY)&_ZN10S4394C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4394C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S4394C2_nt[];
VTBL_ENTRY *P__ZTI10S4394C2_nt = _ZTI10S4394C2_nt; 
extern  VTBL_ENTRY _ZTV10S4394C2_nt[];
Class_Descriptor cd_S4394C2_nt = {  "S4394C2_nt", // class name
  bases_S4394C2_nt, 1,
  &(vtc_S4394C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S4394C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4394C2_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4394C1  : S4394C2_nt {
  void *s4394c1f0[2];
  virtual void  v1(); // _ZN7S4394C12v1Ev
  ~S4394C1(); // tgen
  S4394C1(); // tgen
};
//SIG(1 S4394C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 Fp[2]}


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

static void Test_S4394C1()
{
  extern Class_Descriptor cd_S4394C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4394C1, buf);
    S4394C1 *dp, &lv = *(dp=new (buf) S4394C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4394C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4394C1)");
    check_base_class_offset(lv, (S4394C3*)(S4394C2_nt*), 0, "S4394C1");
    check_base_class_offset(lv, (S4394C2_nt*), 0, "S4394C1");
    check_field_offset(lv, s4394c1f0, ABISELECT(48,32), "S4394C1.s4394c1f0");
    test_class_info(&lv, &cd_S4394C1);
    dp->~S4394C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4394C1(Test_S4394C1, "S4394C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4394C1C1Ev();
extern void _ZN7S4394C1D1Ev();
Name_Map name_map_S4394C1[] = {
  NSPAIR(_ZN7S4394C1C1Ev),
  NSPAIR(_ZN7S4394C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4394C3;
extern VTBL_ENTRY _ZTI7S4394C3[];
extern  VTBL_ENTRY _ZTV7S4394C3[];
extern Class_Descriptor cd_S4394C2_nt;
extern VTBL_ENTRY _ZTI10S4394C2_nt[];
extern  VTBL_ENTRY _ZTV10S4394C2_nt[];
static Base_Class bases_S4394C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4394C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4394C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4394C1[];
extern void _ZN7S4394C1D1Ev();
extern void _ZN7S4394C1D0Ev();
extern void _ZN7S4394C32v2Ev();
extern void _ZN7S4394C32v3Ev();
extern void _ZN7S4394C32v4Ev();
extern void _ZN10S4394C2_nt2v5Ev();
extern void _ZN10S4394C2_nt2v6Ev();
extern void _ZN7S4394C12v1Ev();
static  VTBL_ENTRY vtc_S4394C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4394C1[0]),
  (VTBL_ENTRY)&_ZN7S4394C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4394C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4394C32v4Ev,
  (VTBL_ENTRY)&_ZN10S4394C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4394C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S4394C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4394C1[];
extern  VTBL_ENTRY _ZTV7S4394C1[];
Class_Descriptor cd_S4394C1 = {  "S4394C1", // class name
  bases_S4394C1, 2,
  &(vtc_S4394C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4394C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4394C1),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  S6036C1  : S3681C6_nt {
  void *s6036c1f0[2];
  ::S2123C37 s6036c1f1;
  ::S2123C29_nt s6036c1f2;
  int s6036c1f3;
};
//SIG(1 S6036C1) C1{ BC2{ m Fp[2]} Fp[2] FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fp Fi[2] FC4} Fi}



static void Test_S6036C1()
{
  extern Class_Descriptor cd_S6036C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S6036C1, buf);
    S6036C1 &lv = *(new (buf) S6036C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S6036C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6036C1)");
    check_base_class_offset(lv, (S3681C6_nt*), 0, "S6036C1");
    check_field_offset(lv, s6036c1f0, ABISELECT(16,8), "S6036C1.s6036c1f0");
    check_field_offset(lv, s6036c1f1, ABISELECT(32,16), "S6036C1.s6036c1f1");
    check_field_offset(lv, s6036c1f2, ABISELECT(56,32), "S6036C1.s6036c1f2");
    check_field_offset(lv, s6036c1f3, ABISELECT(80,48), "S6036C1.s6036c1f3");
    test_class_info(&lv, &cd_S6036C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6036C1(Test_S6036C1, "S6036C1", ABISELECT(88,52));

#else // __cplusplus

extern Class_Descriptor cd_S3681C6_nt;
static Base_Class bases_S6036C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3681C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6036C1 = {  "S6036C1", // class name
  bases_S6036C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(88,52), // 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  S12764C1  {
  int s12764c1f0;
  void *s12764c1f1[2];
  ::S14245C2 s12764c1f2;
};
//SIG(1 S12764C1) C1{ Fi Fp[2] FU2{ Fp FC3{ Fp Fp} Fp FC4{ Fi Fp} Fp FC5{ Fi FU6{ FC7{ Fp}}}}}



static void Test_S12764C1()
{
  {
    init_simple_test("S12764C1");
    S12764C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S12764C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12764C1)");
    check_field_offset(lv, s12764c1f0, 0, "S12764C1.s12764c1f0");
    check_field_offset(lv, s12764c1f1, ABISELECT(8,4), "S12764C1.s12764c1f1");
    check_field_offset(lv, s12764c1f2, ABISELECT(24,12), "S12764C1.s12764c1f2");
  }
}
static Arrange_To_Call_Me vS12764C1(Test_S12764C1, "S12764C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16336C3_nt  {
  void *s16336c3f0;
  int s16336c3f1[2];
  void  mf16336c3(); // _ZN11S16336C3_nt9mf16336c3Ev
};
//SIG(-1 S16336C3_nt) C1{ m Fp Fi[2]}


void  S16336C3_nt ::mf16336c3(){}

//skip512 S16336C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16336C4_nt  {
  int s16336c4f0;
  void *s16336c4f1[3];
  void  mf16336c4(); // _ZN11S16336C4_nt9mf16336c4Ev
};
//SIG(-1 S16336C4_nt) C1{ m Fi Fp[3]}


void  S16336C4_nt ::mf16336c4(){}

//skip512 S16336C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16336C1  {
  ::S708C10_nt s16336c1f0;
  ::S16336C3_nt s16336c1f1;
  ::S16336C4_nt s16336c1f2;
  ::S16336C3_nt s16336c1f3;
  void  mf16336c1(); // _ZN8S16336C19mf16336c1Ev
};
//SIG(1 S16336C1) C1{ m FC2{ m Fp Fi[2]} FC3{ m Fp Fi[2]} FC4{ m Fi Fp[3]} FC3}


void  S16336C1 ::mf16336c1(){}

static void Test_S16336C1()
{
  {
    init_simple_test("S16336C1");
    S16336C1 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S16336C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16336C1)");
    check_field_offset(lv, s16336c1f0, 0, "S16336C1.s16336c1f0");
    check_field_offset(lv, s16336c1f1, ABISELECT(16,12), "S16336C1.s16336c1f1");
    check_field_offset(lv, s16336c1f2, ABISELECT(32,24), "S16336C1.s16336c1f2");
    check_field_offset(lv, s16336c1f3, ABISELECT(64,40), "S16336C1.s16336c1f3");
  }
}
static Arrange_To_Call_Me vS16336C1(Test_S16336C1, "S16336C1", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18796C1  {
  ::S21131C5 s18796c1f0;
  short s18796c1f1:5;
  virtual void  v1(); // _ZN8S18796C12v1Ev
  virtual void  v2(); // _ZN8S18796C12v2Ev
  virtual void  v3(); // _ZN8S18796C12v3Ev
  virtual void  v4(); // _ZN8S18796C12v4Ev
  virtual void  v5(); // _ZN8S18796C12v5Ev
  virtual void  v6(); // _ZN8S18796C12v6Ev
  virtual void  v7(); // _ZN8S18796C12v7Ev
  ~S18796C1(); // tgen
  S18796C1(); // tgen
};
//SIG(1 S18796C1) C1{ v1 v2 v3 v4 v5 v6 v7 FC2{ v8 v9 v10 v11 v12 v13 v14 FD[3]} Fs:5}


void  S18796C1 ::v1(){vfunc_called(this, "_ZN8S18796C12v1Ev");}
void  S18796C1 ::v2(){vfunc_called(this, "_ZN8S18796C12v2Ev");}
void  S18796C1 ::v3(){vfunc_called(this, "_ZN8S18796C12v3Ev");}
void  S18796C1 ::v4(){vfunc_called(this, "_ZN8S18796C12v4Ev");}
void  S18796C1 ::v5(){vfunc_called(this, "_ZN8S18796C12v5Ev");}
void  S18796C1 ::v6(){vfunc_called(this, "_ZN8S18796C12v6Ev");}
void  S18796C1 ::v7(){vfunc_called(this, "_ZN8S18796C12v7Ev");}
S18796C1 ::~S18796C1(){ note_dtor("S18796C1", this);} // tgen
S18796C1 ::S18796C1(){ note_ctor("S18796C1", this);} // tgen

static void Test_S18796C1()
{
  extern Class_Descriptor cd_S18796C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S18796C1, buf);
    S18796C1 *dp, &lv = *(dp=new (buf) S18796C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S18796C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18796C1)");
    check_field_offset(lv, s18796c1f0, ABISELECT(16,4), "S18796C1.s18796c1f0");
    set_bf_and_test(lv, s18796c1f1, ABISELECT(80,44), 0, 5, 1, "S18796C1");
    set_bf_and_test(lv, s18796c1f1, ABISELECT(80,44), 0, 5, hide_sll(1LL<<4), "S18796C1");
    test_class_info(&lv, &cd_S18796C1);
    dp->~S18796C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18796C1(Test_S18796C1, "S18796C1", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S18796C1C1Ev();
extern void _ZN8S18796C1D1Ev();
Name_Map name_map_S18796C1[] = {
  NSPAIR(_ZN8S18796C1C1Ev),
  NSPAIR(_ZN8S18796C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18796C1[];
extern void _ZN8S18796C12v1Ev();
extern void _ZN8S18796C12v2Ev();
extern void _ZN8S18796C12v3Ev();
extern void _ZN8S18796C12v4Ev();
extern void _ZN8S18796C12v5Ev();
extern void _ZN8S18796C12v6Ev();
extern void _ZN8S18796C12v7Ev();
static  VTBL_ENTRY vtc_S18796C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18796C1[0]),
  (VTBL_ENTRY)&_ZN8S18796C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18796C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18796C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18796C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18796C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18796C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18796C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S18796C1[];
extern  VTBL_ENTRY _ZTV8S18796C1[];
Class_Descriptor cd_S18796C1 = {  "S18796C1", // class name
  0,0,//no base classes
  &(vtc_S18796C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S18796C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18796C1),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  S18856C1  {
  ::S21131C5 s18856c1f0;
  virtual  ~S18856C1(); // _ZN8S18856C1D1Ev
  virtual void  v1(); // _ZN8S18856C12v1Ev
  virtual void  v2(); // _ZN8S18856C12v2Ev
  virtual void  v3(); // _ZN8S18856C12v3Ev
  virtual void  v4(); // _ZN8S18856C12v4Ev
  virtual void  v5(); // _ZN8S18856C12v5Ev
  virtual void  v6(); // _ZN8S18856C12v6Ev
  virtual void  v7(); // _ZN8S18856C12v7Ev
  S18856C1(); // tgen
};
//SIG(1 S18856C1) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ v8 v9 v10 v11 v12 v13 v14 FD[3]}}


 S18856C1 ::~S18856C1(){ note_dtor("S18856C1", this);}
void  S18856C1 ::v1(){vfunc_called(this, "_ZN8S18856C12v1Ev");}
void  S18856C1 ::v2(){vfunc_called(this, "_ZN8S18856C12v2Ev");}
void  S18856C1 ::v3(){vfunc_called(this, "_ZN8S18856C12v3Ev");}
void  S18856C1 ::v4(){vfunc_called(this, "_ZN8S18856C12v4Ev");}
void  S18856C1 ::v5(){vfunc_called(this, "_ZN8S18856C12v5Ev");}
void  S18856C1 ::v6(){vfunc_called(this, "_ZN8S18856C12v6Ev");}
void  S18856C1 ::v7(){vfunc_called(this, "_ZN8S18856C12v7Ev");}
S18856C1 ::S18856C1(){ note_ctor("S18856C1", this);} // tgen

static void Test_S18856C1()
{
  extern Class_Descriptor cd_S18856C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S18856C1, buf);
    S18856C1 *dp, &lv = *(dp=new (buf) S18856C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S18856C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18856C1)");
    check_field_offset(lv, s18856c1f0, ABISELECT(16,4), "S18856C1.s18856c1f0");
    test_class_info(&lv, &cd_S18856C1);
    dp->~S18856C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18856C1(Test_S18856C1, "S18856C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S18856C1C1Ev();
extern void _ZN8S18856C1D1Ev();
Name_Map name_map_S18856C1[] = {
  NSPAIR(_ZN8S18856C1C1Ev),
  NSPAIR(_ZN8S18856C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18856C1[];
extern void _ZN8S18856C1D1Ev();
extern void _ZN8S18856C1D0Ev();
extern void _ZN8S18856C12v1Ev();
extern void _ZN8S18856C12v2Ev();
extern void _ZN8S18856C12v3Ev();
extern void _ZN8S18856C12v4Ev();
extern void _ZN8S18856C12v5Ev();
extern void _ZN8S18856C12v6Ev();
extern void _ZN8S18856C12v7Ev();
static  VTBL_ENTRY vtc_S18856C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18856C1[0]),
  (VTBL_ENTRY)&_ZN8S18856C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18856C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18856C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18856C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18856C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18856C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18856C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18856C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18856C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S18856C1[];
extern  VTBL_ENTRY _ZTV8S18856C1[];
Class_Descriptor cd_S18856C1 = {  "S18856C1", // class name
  0,0,//no base classes
  &(vtc_S18856C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S18856C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18856C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20052C2  {
  short s20052c2f0:13;
  int s20052c2f1;
  void *s20052c2f2;
  virtual void  v2(); // _ZN8S20052C22v2Ev
  virtual void  v3(); // _ZN8S20052C22v3Ev
  virtual void  v4(); // _ZN8S20052C22v4Ev
  virtual void  v5(); // _ZN8S20052C22v5Ev
  virtual void  v6(); // _ZN8S20052C22v6Ev
  ~S20052C2(); // tgen
  S20052C2(); // tgen
};
//SIG(-1 S20052C2) C1{ v1 v2 v3 v4 v5 Fs:13 Fi Fp}


void  S20052C2 ::v2(){vfunc_called(this, "_ZN8S20052C22v2Ev");}
void  S20052C2 ::v3(){vfunc_called(this, "_ZN8S20052C22v3Ev");}
void  S20052C2 ::v4(){vfunc_called(this, "_ZN8S20052C22v4Ev");}
void  S20052C2 ::v5(){vfunc_called(this, "_ZN8S20052C22v5Ev");}
void  S20052C2 ::v6(){vfunc_called(this, "_ZN8S20052C22v6Ev");}
S20052C2 ::~S20052C2(){ note_dtor("S20052C2", this);} // tgen
S20052C2 ::S20052C2(){ note_ctor("S20052C2", this);} // tgen

static void Test_S20052C2()
{
  extern Class_Descriptor cd_S20052C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20052C2, buf);
    S20052C2 *dp, &lv = *(dp=new (buf) S20052C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20052C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20052C2)");
    set_bf_and_test(lv, s20052c2f0, ABISELECT(8,4), 0, 13, 1, "S20052C2");
    set_bf_and_test(lv, s20052c2f0, ABISELECT(8,4), 0, 13, hide_sll(1LL<<12), "S20052C2");
    check_field_offset(lv, s20052c2f1, ABISELECT(12,8), "S20052C2.s20052c2f1");
    check_field_offset(lv, s20052c2f2, ABISELECT(16,12), "S20052C2.s20052c2f2");
    test_class_info(&lv, &cd_S20052C2);
    dp->~S20052C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20052C2(Test_S20052C2, "S20052C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20052C2C1Ev();
extern void _ZN8S20052C2D1Ev();
Name_Map name_map_S20052C2[] = {
  NSPAIR(_ZN8S20052C2C1Ev),
  NSPAIR(_ZN8S20052C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20052C2[];
extern void _ZN8S20052C22v2Ev();
extern void _ZN8S20052C22v3Ev();
extern void _ZN8S20052C22v4Ev();
extern void _ZN8S20052C22v5Ev();
extern void _ZN8S20052C22v6Ev();
static  VTBL_ENTRY vtc_S20052C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20052C2[0]),
  (VTBL_ENTRY)&_ZN8S20052C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20052C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20052C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20052C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20052C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20052C2[];
extern  VTBL_ENTRY _ZTV8S20052C2[];
Class_Descriptor cd_S20052C2 = {  "S20052C2", // class name
  0,0,//no base classes
  &(vtc_S20052C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20052C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20052C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20052C3  {
  int s20052c3f0;
  virtual void  v7(); // _ZN8S20052C32v7Ev
  virtual void  v8(); // _ZN8S20052C32v8Ev
  virtual void  v9(); // _ZN8S20052C32v9Ev
  virtual void  v10(); // _ZN8S20052C33v10Ev
  virtual void  v11(); // _ZN8S20052C33v11Ev
  ~S20052C3(); // tgen
  S20052C3(); // tgen
};
//SIG(-1 S20052C3) C1{ v1 v2 v3 v4 v5 Fi}


void  S20052C3 ::v7(){vfunc_called(this, "_ZN8S20052C32v7Ev");}
void  S20052C3 ::v8(){vfunc_called(this, "_ZN8S20052C32v8Ev");}
void  S20052C3 ::v9(){vfunc_called(this, "_ZN8S20052C32v9Ev");}
void  S20052C3 ::v10(){vfunc_called(this, "_ZN8S20052C33v10Ev");}
void  S20052C3 ::v11(){vfunc_called(this, "_ZN8S20052C33v11Ev");}
S20052C3 ::~S20052C3(){ note_dtor("S20052C3", this);} // tgen
S20052C3 ::S20052C3(){ note_ctor("S20052C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20052C3C1Ev();
extern void _ZN8S20052C3D1Ev();
Name_Map name_map_S20052C3[] = {
  NSPAIR(_ZN8S20052C3C1Ev),
  NSPAIR(_ZN8S20052C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20052C3[];
extern void _ZN8S20052C32v7Ev();
extern void _ZN8S20052C32v8Ev();
extern void _ZN8S20052C32v9Ev();
extern void _ZN8S20052C33v10Ev();
extern void _ZN8S20052C33v11Ev();
static  VTBL_ENTRY vtc_S20052C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20052C3[0]),
  (VTBL_ENTRY)&_ZN8S20052C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20052C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20052C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20052C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20052C33v11Ev,
};
extern VTBL_ENTRY _ZTI8S20052C3[];
extern  VTBL_ENTRY _ZTV8S20052C3[];
Class_Descriptor cd_S20052C3 = {  "S20052C3", // class name
  0,0,//no base classes
  &(vtc_S20052C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20052C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20052C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20052C1  : virtual S20052C2 , virtual S20052C3 {
  virtual void  v1(); // _ZN8S20052C12v1Ev
  ~S20052C1(); // tgen
  S20052C1(); // tgen
};
//SIG(1 S20052C1) C1{ VBC2{ v2 v3 v4 v5 v6 Fs:13 Fi Fp} VBC3{ v7 v8 v9 v10 v11 Fi} v1}


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

static void Test_S20052C1()
{
  extern Class_Descriptor cd_S20052C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S20052C1, buf);
    S20052C1 *dp, &lv = *(dp=new (buf) S20052C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S20052C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20052C1)");
    check_base_class_offset(lv, (S20052C2*), ABISELECT(8,4), "S20052C1");
    check_base_class_offset(lv, (S20052C3*), ABISELECT(32,20), "S20052C1");
    test_class_info(&lv, &cd_S20052C1);
    dp->~S20052C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20052C1(Test_S20052C1, "S20052C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S20052C1C1Ev();
extern void _ZN8S20052C1D1Ev();
Name_Map name_map_S20052C1[] = {
  NSPAIR(_ZN8S20052C1C1Ev),
  NSPAIR(_ZN8S20052C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20052C2;
extern VTBL_ENTRY _ZTI8S20052C2[];
extern  VTBL_ENTRY _ZTV8S20052C2[];
extern Class_Descriptor cd_S20052C3;
extern VTBL_ENTRY _ZTI8S20052C3[];
extern  VTBL_ENTRY _ZTV8S20052C3[];
static Base_Class bases_S20052C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20052C2,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //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_S20052C3,    ABISELECT(32,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20052C1[];
extern void _ZN8S20052C12v1Ev();
extern void _ZN8S20052C22v2Ev();
extern void _ZN8S20052C22v3Ev();
extern void _ZN8S20052C22v4Ev();
extern void _ZN8S20052C22v5Ev();
extern void _ZN8S20052C22v6Ev();
extern void _ZN8S20052C32v7Ev();
extern void _ZN8S20052C32v8Ev();
extern void _ZN8S20052C32v9Ev();
extern void _ZN8S20052C33v10Ev();
extern void _ZN8S20052C33v11Ev();
static  VTBL_ENTRY vtc_S20052C1[] = {
  ABISELECT(32,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20052C1[0]),
  (VTBL_ENTRY)&_ZN8S20052C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20052C1[0]),
  (VTBL_ENTRY)&_ZN8S20052C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20052C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20052C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20052C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20052C22v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20052C1[0]),
  (VTBL_ENTRY)&_ZN8S20052C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20052C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20052C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20052C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20052C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S20052C1[];
static  VTT_ENTRY vtt_S20052C1[] = {
  {&(_ZTV8S20052C1[4]),  4,29},
  {&(_ZTV8S20052C1[12]),  12,29},
  {&(_ZTV8S20052C1[24]),  24,29},
};
extern VTBL_ENTRY _ZTI8S20052C1[];
extern  VTBL_ENTRY _ZTV8S20052C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20052C1[];
Class_Descriptor cd_S20052C1 = {  "S20052C1", // class name
  bases_S20052C1, 2,
  &(vtc_S20052C1[0]), // expected_vtbl_contents
  &(vtt_S20052C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S20052C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20052C1),29, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20052C1),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  S9455C2  {
  void *s9455c2f0;
  virtual  ~S9455C2(); // _ZN7S9455C2D1Ev
  virtual void  v3(); // _ZN7S9455C22v3Ev
  virtual void  v4(); // _ZN7S9455C22v4Ev
  virtual void  v5(); // _ZN7S9455C22v5Ev
  virtual void  v6(); // _ZN7S9455C22v6Ev
  S9455C2(); // tgen
};
//SIG(-1 S9455C2) C1{ vd v1 v2 v3 v4 Fp}


 S9455C2 ::~S9455C2(){ note_dtor("S9455C2", this);}
void  S9455C2 ::v3(){vfunc_called(this, "_ZN7S9455C22v3Ev");}
void  S9455C2 ::v4(){vfunc_called(this, "_ZN7S9455C22v4Ev");}
void  S9455C2 ::v5(){vfunc_called(this, "_ZN7S9455C22v5Ev");}
void  S9455C2 ::v6(){vfunc_called(this, "_ZN7S9455C22v6Ev");}
S9455C2 ::S9455C2(){ note_ctor("S9455C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9455C2C1Ev();
extern void _ZN7S9455C2D1Ev();
Name_Map name_map_S9455C2[] = {
  NSPAIR(_ZN7S9455C2C1Ev),
  NSPAIR(_ZN7S9455C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9455C2[];
extern void _ZN7S9455C2D1Ev();
extern void _ZN7S9455C2D0Ev();
extern void _ZN7S9455C22v3Ev();
extern void _ZN7S9455C22v4Ev();
extern void _ZN7S9455C22v5Ev();
extern void _ZN7S9455C22v6Ev();
static  VTBL_ENTRY vtc_S9455C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9455C2[0]),
  (VTBL_ENTRY)&_ZN7S9455C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9455C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9455C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9455C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9455C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9455C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9455C2[];
extern  VTBL_ENTRY _ZTV7S9455C2[];
Class_Descriptor cd_S9455C2 = {  "S9455C2", // class name
  0,0,//no base classes
  &(vtc_S9455C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9455C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9455C2),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  S9455C1  : S9455C2 {
  void *s9455c1f0[2];
  ::S2123C20_nt s9455c1f1;
  int s9455c1f2;
  virtual  ~S9455C1(); // _ZN7S9455C1D1Ev
  virtual void  v1(); // _ZN7S9455C12v1Ev
  virtual void  v2(); // _ZN7S9455C12v2Ev
  S9455C1(); // tgen
};
//SIG(1 S9455C1) C1{ BC2{ vd v3 v4 v5 v6 Fp} vd v1 v2 Fp[2] FC3{ m Fp Fi FC4{ m}} Fi}


 S9455C1 ::~S9455C1(){ note_dtor("S9455C1", this);}
void  S9455C1 ::v1(){vfunc_called(this, "_ZN7S9455C12v1Ev");}
void  S9455C1 ::v2(){vfunc_called(this, "_ZN7S9455C12v2Ev");}
S9455C1 ::S9455C1(){ note_ctor("S9455C1", this);} // tgen

static void Test_S9455C1()
{
  extern Class_Descriptor cd_S9455C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S9455C1, buf);
    S9455C1 *dp, &lv = *(dp=new (buf) S9455C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S9455C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9455C1)");
    check_base_class_offset(lv, (S9455C2*), 0, "S9455C1");
    check_field_offset(lv, s9455c1f0, ABISELECT(16,8), "S9455C1.s9455c1f0");
    check_field_offset(lv, s9455c1f1, ABISELECT(32,16), "S9455C1.s9455c1f1");
    check_field_offset(lv, s9455c1f2, ABISELECT(48,28), "S9455C1.s9455c1f2");
    test_class_info(&lv, &cd_S9455C1);
    dp->~S9455C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9455C1(Test_S9455C1, "S9455C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S9455C1C1Ev();
extern void _ZN7S9455C1D1Ev();
Name_Map name_map_S9455C1[] = {
  NSPAIR(_ZN7S9455C1C1Ev),
  NSPAIR(_ZN7S9455C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9455C2;
extern VTBL_ENTRY _ZTI7S9455C2[];
extern  VTBL_ENTRY _ZTV7S9455C2[];
static Base_Class bases_S9455C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9455C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9455C1[];
extern void _ZN7S9455C1D1Ev();
extern void _ZN7S9455C1D0Ev();
extern void _ZN7S9455C22v3Ev();
extern void _ZN7S9455C22v4Ev();
extern void _ZN7S9455C22v5Ev();
extern void _ZN7S9455C22v6Ev();
extern void _ZN7S9455C12v1Ev();
extern void _ZN7S9455C12v2Ev();
static  VTBL_ENTRY vtc_S9455C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9455C1[0]),
  (VTBL_ENTRY)&_ZN7S9455C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9455C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9455C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9455C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9455C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9455C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9455C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9455C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9455C1[];
extern  VTBL_ENTRY _ZTV7S9455C1[];
Class_Descriptor cd_S9455C1 = {  "S9455C1", // class name
  bases_S9455C1, 1,
  &(vtc_S9455C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S9455C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9455C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8190C3  : virtual S17154C2 {
  int s8190c3f0;
  short s8190c3f1;
  void *s8190c3f2;
  int s8190c3f3;
  long double s8190c3f4;
  void *s8190c3f5;
  ~S8190C3(); // tgen
  S8190C3(); // tgen
};
//SIG(-1 S8190C3) C1{ VBC2{ vd m Fp[15]} Fi Fs Fp Fi FD Fp}


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

static void Test_S8190C3()
{
  extern Class_Descriptor cd_S8190C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,26)];
    init_test(&cd_S8190C3, buf);
    S8190C3 *dp, &lv = *(dp=new (buf) S8190C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,100), "sizeof(S8190C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S8190C3)");
    check_base_class_offset(lv, (S17154C2*), ABISELECT(56,36), "S8190C3");
    check_field_offset(lv, s8190c3f0, ABISELECT(8,4), "S8190C3.s8190c3f0");
    check_field_offset(lv, s8190c3f1, ABISELECT(12,8), "S8190C3.s8190c3f1");
    check_field_offset(lv, s8190c3f2, ABISELECT(16,12), "S8190C3.s8190c3f2");
    check_field_offset(lv, s8190c3f3, ABISELECT(24,16), "S8190C3.s8190c3f3");
    check_field_offset(lv, s8190c3f4, ABISELECT(32,20), "S8190C3.s8190c3f4");
    check_field_offset(lv, s8190c3f5, ABISELECT(48,32), "S8190C3.s8190c3f5");
    test_class_info(&lv, &cd_S8190C3);
    dp->~S8190C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8190C3(Test_S8190C3, "S8190C3", ABISELECT(192,100));

#else // __cplusplus

extern void _ZN7S8190C3C1Ev();
extern void _ZN7S8190C3D1Ev();
Name_Map name_map_S8190C3[] = {
  NSPAIR(_ZN7S8190C3C1Ev),
  NSPAIR(_ZN7S8190C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17154C2;
extern VTBL_ENTRY _ZTI8S17154C2[];
extern  VTBL_ENTRY _ZTV8S17154C2[];
static Base_Class bases_S8190C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17154C2,    ABISELECT(56,36), //bcp->offset
    5, //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 _ZTI7S8190C3[];
extern void _ZN7S8190C3D1Ev();
extern void _ZN7S8190C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8190C3D1Ev,_ZTv0_n12_N7S8190C3D1Ev)();
extern void ABISELECT(_ZThn56_N7S8190C3D1Ev,_ZThn36_N7S8190C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8190C3D0Ev,_ZTv0_n12_N7S8190C3D0Ev)();
extern void ABISELECT(_ZThn56_N7S8190C3D0Ev,_ZThn36_N7S8190C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8190C3[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S8190C3[0]),
  (VTBL_ENTRY)&_ZN7S8190C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8190C3D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S8190C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8190C3D1Ev,_ZTv0_n12_N7S8190C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8190C3D0Ev,_ZTv0_n12_N7S8190C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S8190C3[];
static  VTT_ENTRY vtt_S8190C3[] = {
  {&(_ZTV7S8190C3[3]),  3,10},
  {&(_ZTV7S8190C3[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S8190C3[];
extern  VTBL_ENTRY _ZTV7S8190C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8190C3[];
static VTBL_ENTRY alt_thunk_names150[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8190C3D0Ev,_ZTv0_n12_N7S8190C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S8190C3D0Ev,_ZThn36_N7S8190C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8190C3D1Ev,_ZTv0_n12_N7S8190C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S8190C3D1Ev,_ZThn36_N7S8190C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8190C3 = {  "S8190C3", // class name
  bases_S8190C3, 1,
  &(vtc_S8190C3[0]), // expected_vtbl_contents
  &(vtt_S8190C3[0]), // expected_vtt_contents
  ABISELECT(192,100), // object size
  NSPAIRA(_ZTI7S8190C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S8190C3),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8190C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names150,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8190C1  : S17154C2 , S8190C3 {
  void *s8190c1f0;
  __tsi64 s8190c1f1;
  void *s8190c1f2[3];
  ::S17154C2 s8190c1f3;
  ~S8190C1(); // tgen
  S8190C1(); // tgen
};
//SIG(1 S8190C1) C1{ BC2{ vd m Fp[15]} BC3{ VBC2 Fi Fs Fp Fi FD Fp} Fp FL Fp[3] FC2}


S8190C1 ::~S8190C1(){ note_dtor("S8190C1", this);} // tgen
S8190C1 ::S8190C1(){ note_ctor("S8190C1", this);} // tgen

static void Test_S8190C1()
{
  extern Class_Descriptor cd_S8190C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,64)];
    init_test(&cd_S8190C1, buf);
    S8190C1 *dp, &lv = *(dp=new (buf) S8190C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,252), "sizeof(S8190C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S8190C1)");
    /*is_ambiguous_... S8190C1::S17154C2 */ AMB_check_base_class_offset(lv, (S17154C2*), 0, "S8190C1");
    check_base_class_offset(lv, (S17154C2*)(S8190C3*), ABISELECT(352,188), "S8190C1");
    check_base_class_offset(lv, (S8190C3*), ABISELECT(128,64), "S8190C1");
    check_field_offset(lv, s8190c1f0, ABISELECT(184,100), "S8190C1.s8190c1f0");
    check_field_offset(lv, s8190c1f1, ABISELECT(192,104), "S8190C1.s8190c1f1");
    check_field_offset(lv, s8190c1f2, ABISELECT(200,112), "S8190C1.s8190c1f2");
    check_field_offset(lv, s8190c1f3, ABISELECT(224,124), "S8190C1.s8190c1f3");
    test_class_info(&lv, &cd_S8190C1);
    dp->~S8190C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8190C1(Test_S8190C1, "S8190C1", ABISELECT(480,252));

#else // __cplusplus

extern void _ZN7S8190C1C1Ev();
extern void _ZN7S8190C1D1Ev();
Name_Map name_map_S8190C1[] = {
  NSPAIR(_ZN7S8190C1C1Ev),
  NSPAIR(_ZN7S8190C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17154C2;
extern VTBL_ENTRY _ZTI8S17154C2[];
extern  VTBL_ENTRY _ZTV8S17154C2[];
extern Class_Descriptor cd_S17154C2;
extern VTBL_ENTRY _ZTI8S17154C2[];
extern  VTBL_ENTRY _ZTV8S17154C2[];
extern Class_Descriptor cd_S8190C3;
extern VTBL_ENTRY _ZTI7S8190C3[];
extern  VTBL_ENTRY _ZTV7S8190C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8190C3[];
static Base_Class bases_S8190C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17154C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S17154C2,    ABISELECT(352,188), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S8190C3,    ABISELECT(128,64), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8190C1[];
extern void _ZN7S8190C1D1Ev();
extern void _ZN7S8190C1D0Ev();
extern void ABISELECT(_ZThn128_N7S8190C1D1Ev,_ZThn64_N7S8190C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S8190C1D0Ev,_ZThn64_N7S8190C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8190C1D1Ev,_ZTv0_n12_N7S8190C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S8190C1D1Ev,_ZThn188_N7S8190C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8190C1D0Ev,_ZTv0_n12_N7S8190C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S8190C1D0Ev,_ZThn188_N7S8190C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8190C1[] = {
  ABISELECT(352,188),
  0,
  (VTBL_ENTRY)&(_ZTI7S8190C1[0]),
  (VTBL_ENTRY)&_ZN7S8190C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8190C1D0Ev,
  ABISELECT(224,124),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S8190C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S8190C1D1Ev,_ZThn64_N7S8190C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S8190C1D0Ev,_ZThn64_N7S8190C1D0Ev),
  ABISELECT(-352,-188),
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI7S8190C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8190C1D1Ev,_ZTv0_n12_N7S8190C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8190C1D0Ev,_ZTv0_n12_N7S8190C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S8190C1[];
extern void _ZN7S8190C3D1Ev();
extern void _ZN7S8190C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8190C3__7S8190C1[] = {
  ABISELECT(224,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S8190C3[0]),
  (VTBL_ENTRY)&_ZN7S8190C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8190C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8190C3D1Ev,_ZTv0_n12_N7S8190C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S8190C3D1Ev,_ZThn124_N7S8190C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8190C3D0Ev,_ZTv0_n12_N7S8190C3D0Ev)();
extern void ABISELECT(_ZThn224_N7S8190C3D0Ev,_ZThn124_N7S8190C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S17154C2__7S8190C3__7S8190C1[] = {
  ABISELECT(-224,-124),
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI7S8190C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8190C3D1Ev,_ZTv0_n12_N7S8190C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8190C3D0Ev,_ZTv0_n12_N7S8190C3D0Ev),
};
static  VTT_ENTRY vtt_S8190C1[] = {
  {&(_ZTV7S8190C1[3]),  3,15},
  {&(_tg__ZTV7S8190C3__7S8190C1[3]),  3,5},
  {&(_tg__ZTV8S17154C2__7S8190C3__7S8190C1[3]),  3,5},
  {&(_ZTV7S8190C1[8]),  8,15},
  {&(_ZTV7S8190C1[13]),  13,15},
};
extern VTBL_ENTRY _ZTI7S8190C1[];
extern  VTBL_ENTRY _ZTV7S8190C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8190C1[];
static VTBL_ENTRY alt_thunk_names151[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8190C3D0Ev,_ZTv0_n12_N7S8190C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S8190C3D0Ev,_ZThn124_N7S8190C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8190C3D1Ev,_ZTv0_n12_N7S8190C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S8190C3D1Ev,_ZThn124_N7S8190C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8190C1D0Ev,_ZTv0_n12_N7S8190C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S8190C1D0Ev,_ZThn188_N7S8190C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8190C1D1Ev,_ZTv0_n12_N7S8190C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S8190C1D1Ev,_ZThn188_N7S8190C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8190C1 = {  "S8190C1", // class name
  bases_S8190C1, 3,
  &(vtc_S8190C1[0]), // expected_vtbl_contents
  &(vtt_S8190C1[0]), // expected_vtt_contents
  ABISELECT(480,252), // object size
  NSPAIRA(_ZTI7S8190C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8190C1),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8190C1),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names151,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6171C4_nt  {
  int s6171c4f0[3];
};
//SIG(-1 S6171C4_nt) C1{ Fi[3]}



//skip512 S6171C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6171C1  : S2123C30 {
  ::S15944C13_nt s6171c1f0;
  int s6171c1f1[3];
  ::S6171C4_nt s6171c1f2;
  ::S6171C4_nt s6171c1f3;
  int s6171c1f4[3];
  char s6171c1f5[8];
};
//SIG(1 S6171C1) C1{ BC2{ m} FC3{ m Fi[2]} Fi[3] FC4{ Fi[3]} FC4 Fi[3] Fc[8]}



static void Test_S6171C1()
{
  extern Class_Descriptor cd_S6171C1;
  void *lvp;
  {
    int buf[17];
    init_test(&cd_S6171C1, buf);
    S6171C1 &lv = *(new (buf) S6171C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 64, "sizeof(S6171C1)");
    check2(__alignof__(lv), 4, "__alignof__(S6171C1)");
    check_base_class_offset(lv, (S2123C30*), 0, "S6171C1");
    check_field_offset(lv, s6171c1f0, 0, "S6171C1.s6171c1f0");
    check_field_offset(lv, s6171c1f1, 8, "S6171C1.s6171c1f1");
    check_field_offset(lv, s6171c1f2, 20, "S6171C1.s6171c1f2");
    check_field_offset(lv, s6171c1f3, 32, "S6171C1.s6171c1f3");
    check_field_offset(lv, s6171c1f4, 44, "S6171C1.s6171c1f4");
    check_field_offset(lv, s6171c1f5, 56, "S6171C1.s6171c1f5");
    test_class_info(&lv, &cd_S6171C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6171C1(Test_S6171C1, "S6171C1", 64);

#else // __cplusplus

extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
static Base_Class bases_S6171C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6171C1 = {  "S6171C1", // class name
  bases_S6171C1, 1,
  0, // no vftv
  0, //no vtt
  64, // 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  S3833C2_nt  : S3681C3_nt {
  virtual  ~S3833C2_nt(); // _ZN10S3833C2_ntD1Ev
  virtual void  v2(); // _ZN10S3833C2_nt2v2Ev
  S3833C2_nt(); // tgen
};
//SIG(-1 S3833C2_nt) C1{ BC2{ vd m Fi} vd v1}


 S3833C2_nt ::~S3833C2_nt(){ note_dtor("S3833C2_nt", this);}
void  S3833C2_nt ::v2(){vfunc_called(this, "_ZN10S3833C2_nt2v2Ev");}
S3833C2_nt ::S3833C2_nt(){ note_ctor("S3833C2_nt", this);} // tgen

//skip512 S3833C2_nt

#else // __cplusplus

extern void _ZN10S3833C2_ntC1Ev();
extern void _ZN10S3833C2_ntD1Ev();
Name_Map name_map_S3833C2_nt[] = {
  NSPAIR(_ZN10S3833C2_ntC1Ev),
  NSPAIR(_ZN10S3833C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3681C3_nt;
extern VTBL_ENTRY _ZTI10S3681C3_nt[];
extern  VTBL_ENTRY _ZTV10S3681C3_nt[];
static Base_Class bases_S3833C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3681C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3833C2_nt[];
extern void _ZN10S3833C2_ntD1Ev();
extern void _ZN10S3833C2_ntD0Ev();
extern void _ZN10S3833C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S3833C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3833C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3833C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3833C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3833C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S3833C2_nt[];
VTBL_ENTRY *P__ZTI10S3833C2_nt = _ZTI10S3833C2_nt; 
extern  VTBL_ENTRY _ZTV10S3833C2_nt[];
Class_Descriptor cd_S3833C2_nt = {  "S3833C2_nt", // class name
  bases_S3833C2_nt, 1,
  &(vtc_S3833C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3833C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3833C2_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  S3833C1  : S3833C2_nt {
  void *s3833c1f0;
  ::S2123C37 s3833c1f1;
  void *s3833c1f2;
  virtual  ~S3833C1(); // _ZN7S3833C1D1Ev
  virtual void  v1(); // _ZN7S3833C12v1Ev
  S3833C1(); // tgen
};
//SIG(1 S3833C1) C1{ BC2{ BC3{ vd m Fi} vd v2} vd v1 Fp FC4{ m Fp Fi[2] FC5{ m}} Fp}


 S3833C1 ::~S3833C1(){ note_dtor("S3833C1", this);}
void  S3833C1 ::v1(){vfunc_called(this, "_ZN7S3833C12v1Ev");}
S3833C1 ::S3833C1(){ note_ctor("S3833C1", this);} // tgen

static void Test_S3833C1()
{
  extern Class_Descriptor cd_S3833C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S3833C1, buf);
    S3833C1 *dp, &lv = *(dp=new (buf) S3833C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S3833C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3833C1)");
    check_base_class_offset(lv, (S3681C3_nt*)(S3833C2_nt*), 0, "S3833C1");
    check_base_class_offset(lv, (S3833C2_nt*), 0, "S3833C1");
    check_field_offset(lv, s3833c1f0, ABISELECT(16,8), "S3833C1.s3833c1f0");
    check_field_offset(lv, s3833c1f1, ABISELECT(24,12), "S3833C1.s3833c1f1");
    check_field_offset(lv, s3833c1f2, ABISELECT(48,28), "S3833C1.s3833c1f2");
    test_class_info(&lv, &cd_S3833C1);
    dp->~S3833C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3833C1(Test_S3833C1, "S3833C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S3833C1C1Ev();
extern void _ZN7S3833C1D1Ev();
Name_Map name_map_S3833C1[] = {
  NSPAIR(_ZN7S3833C1C1Ev),
  NSPAIR(_ZN7S3833C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3681C3_nt;
extern VTBL_ENTRY _ZTI10S3681C3_nt[];
extern  VTBL_ENTRY _ZTV10S3681C3_nt[];
extern Class_Descriptor cd_S3833C2_nt;
extern VTBL_ENTRY _ZTI10S3833C2_nt[];
extern  VTBL_ENTRY _ZTV10S3833C2_nt[];
static Base_Class bases_S3833C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3681C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3833C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3833C1[];
extern void _ZN7S3833C1D1Ev();
extern void _ZN7S3833C1D0Ev();
extern void _ZN10S3833C2_nt2v2Ev();
extern void _ZN7S3833C12v1Ev();
static  VTBL_ENTRY vtc_S3833C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3833C1[0]),
  (VTBL_ENTRY)&_ZN7S3833C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3833C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3833C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S3833C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3833C1[];
extern  VTBL_ENTRY _ZTV7S3833C1[];
Class_Descriptor cd_S3833C1 = {  "S3833C1", // class name
  bases_S3833C1, 2,
  &(vtc_S3833C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S3833C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3833C1),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  S18143C2_nt  {
  char s18143c2f0[128];
};
//SIG(-1 S18143C2_nt) C1{ Fc[128]}



//skip512 S18143C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18143C1  {
  void *s18143c1f0[3];
  ::S18143C2_nt s18143c1f1;
  ::S21777C11_nt s18143c1f2;
  ::S2123C37 s18143c1f3;
  int s18143c1f4;
  void  mf18143c1(); // _ZN8S18143C19mf18143c1Ev
};
//SIG(1 S18143C1) C1{ m Fp[3] FC2{ Fc[128]} FC3{ m Fp} FC4{ m Fp Fi[2] FC5{ m}} Fi}


void  S18143C1 ::mf18143c1(){}

static void Test_S18143C1()
{
  {
    init_simple_test("S18143C1");
    S18143C1 lv;
    check2(sizeof(lv), ABISELECT(192,164), "sizeof(S18143C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18143C1)");
    check_field_offset(lv, s18143c1f0, 0, "S18143C1.s18143c1f0");
    check_field_offset(lv, s18143c1f1, ABISELECT(24,12), "S18143C1.s18143c1f1");
    check_field_offset(lv, s18143c1f2, ABISELECT(152,140), "S18143C1.s18143c1f2");
    check_field_offset(lv, s18143c1f3, ABISELECT(160,144), "S18143C1.s18143c1f3");
    check_field_offset(lv, s18143c1f4, ABISELECT(184,160), "S18143C1.s18143c1f4");
  }
}
static Arrange_To_Call_Me vS18143C1(Test_S18143C1, "S18143C1", ABISELECT(192,164));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15179C3  {
  int s15179c3f0[3];
};
//SIG(-1 S15179C3) C1{ Fi[3]}



static void Test_S15179C3()
{
  {
    init_simple_test("S15179C3");
    S15179C3 lv;
    check2(sizeof(lv), 12, "sizeof(S15179C3)");
    check2(__alignof__(lv), 4, "__alignof__(S15179C3)");
    check_field_offset(lv, s15179c3f0, 0, "S15179C3.s15179c3f0");
  }
}
static Arrange_To_Call_Me vS15179C3(Test_S15179C3, "S15179C3", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15179C4_nt  {
  int s15179c4f0[2];
};
//SIG(-1 S15179C4_nt) C1{ Fi[2]}



//skip512 S15179C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15179C1  {
  char s15179c1f0[17];
  ::S6171C4_nt s15179c1f1;
  ::S15179C3 s15179c1f2;
  int s15179c1f3[2];
  ::S15179C4_nt s15179c1f4[32];
  int s15179c1f5;
  void  mf15179c1(); // _ZN8S15179C19mf15179c1Ev
};
//SIG(1 S15179C1) C1{ m Fc[17] FC2{ Fi[3]} FC3{ Fi[3]} Fi[2] FC4{ Fi[2]}[32] Fi}


void  S15179C1 ::mf15179c1(){}

static void Test_S15179C1()
{
  {
    init_simple_test("S15179C1");
    S15179C1 lv;
    check2(sizeof(lv), 312, "sizeof(S15179C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15179C1)");
    check_field_offset(lv, s15179c1f0, 0, "S15179C1.s15179c1f0");
    check_field_offset(lv, s15179c1f1, 20, "S15179C1.s15179c1f1");
    check_field_offset(lv, s15179c1f2, 32, "S15179C1.s15179c1f2");
    check_field_offset(lv, s15179c1f3, 44, "S15179C1.s15179c1f3");
    check_field_offset(lv, s15179c1f4, 52, "S15179C1.s15179c1f4");
    check_field_offset(lv, s15179c1f5, 308, "S15179C1.s15179c1f5");
  }
}
static Arrange_To_Call_Me vS15179C1(Test_S15179C1, "S15179C1", 312);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21385C1  {
  ::S2105C9_nt s21385c1f0;
  ::S2123C25 s21385c1f1;
  void  mf21385c1(); // _ZN8S21385C19mf21385c1Ev
  virtual  ~S21385C1(); // _ZN8S21385C1D1Ev
  S21385C1(); // tgen
};
//SIG(1 S21385C1) C1{ vd m FC2{ m FC3{ FL[4]}} FC4{ BC5{ m Fp Fi FC6{ m} FC6}}}


void  S21385C1 ::mf21385c1(){}
 S21385C1 ::~S21385C1(){ note_dtor("S21385C1", this);}
S21385C1 ::S21385C1(){ note_ctor("S21385C1", this);} // tgen

static void Test_S21385C1()
{
  extern Class_Descriptor cd_S21385C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S21385C1, buf);
    S21385C1 *dp, &lv = *(dp=new (buf) S21385C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S21385C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21385C1)");
    check_field_offset(lv, s21385c1f0, ABISELECT(8,4), "S21385C1.s21385c1f0");
    check_field_offset(lv, s21385c1f1, ABISELECT(40,36), "S21385C1.s21385c1f1");
    test_class_info(&lv, &cd_S21385C1);
    dp->~S21385C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21385C1(Test_S21385C1, "S21385C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN8S21385C1C1Ev();
extern void _ZN8S21385C1D1Ev();
Name_Map name_map_S21385C1[] = {
  NSPAIR(_ZN8S21385C1C1Ev),
  NSPAIR(_ZN8S21385C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21385C1[];
extern void _ZN8S21385C1D1Ev();
extern void _ZN8S21385C1D0Ev();
static  VTBL_ENTRY vtc_S21385C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21385C1[0]),
  (VTBL_ENTRY)&_ZN8S21385C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21385C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21385C1[];
extern  VTBL_ENTRY _ZTV8S21385C1[];
Class_Descriptor cd_S21385C1 = {  "S21385C1", // class name
  0,0,//no base classes
  &(vtc_S21385C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI8S21385C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21385C1),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  S21510C1  {
  ::S2123C37 s21510c1f0;
  ::S2123C20_nt s21510c1f1;
  char s21510c1f2[2];
  void  mf21510c1(); // _ZN8S21510C19mf21510c1Ev
  virtual  ~S21510C1(); // _ZN8S21510C1D1Ev
  S21510C1(); // tgen
};
//SIG(1 S21510C1) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fp Fi FC5{ m}} Fc[2]}


void  S21510C1 ::mf21510c1(){}
 S21510C1 ::~S21510C1(){ note_dtor("S21510C1", this);}
S21510C1 ::S21510C1(){ note_ctor("S21510C1", this);} // tgen

static void Test_S21510C1()
{
  extern Class_Descriptor cd_S21510C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S21510C1, buf);
    S21510C1 *dp, &lv = *(dp=new (buf) S21510C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S21510C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21510C1)");
    check_field_offset(lv, s21510c1f0, ABISELECT(8,4), "S21510C1.s21510c1f0");
    check_field_offset(lv, s21510c1f1, ABISELECT(32,20), "S21510C1.s21510c1f1");
    check_field_offset(lv, s21510c1f2, ABISELECT(48,32), "S21510C1.s21510c1f2");
    test_class_info(&lv, &cd_S21510C1);
    dp->~S21510C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21510C1(Test_S21510C1, "S21510C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S21510C1C1Ev();
extern void _ZN8S21510C1D1Ev();
Name_Map name_map_S21510C1[] = {
  NSPAIR(_ZN8S21510C1C1Ev),
  NSPAIR(_ZN8S21510C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21510C1[];
extern void _ZN8S21510C1D1Ev();
extern void _ZN8S21510C1D0Ev();
static  VTBL_ENTRY vtc_S21510C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21510C1[0]),
  (VTBL_ENTRY)&_ZN8S21510C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21510C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21510C1[];
extern  VTBL_ENTRY _ZTV8S21510C1[];
Class_Descriptor cd_S21510C1 = {  "S21510C1", // class name
  0,0,//no base classes
  &(vtc_S21510C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S21510C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21510C1),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  S3969C3_nt  {
  void *s3969c3f0;
  int s3969c3f1;
  void  mf3969c3(); // _ZN10S3969C3_nt8mf3969c3Ev
  virtual  ~S3969C3_nt(); // _ZN10S3969C3_ntD1Ev
  S3969C3_nt(); // tgen
};
//SIG(-1 S3969C3_nt) C1{ vd m Fp Fi}


void  S3969C3_nt ::mf3969c3(){}
 S3969C3_nt ::~S3969C3_nt(){ note_dtor("S3969C3_nt", this);}
S3969C3_nt ::S3969C3_nt(){ note_ctor("S3969C3_nt", this);} // tgen

//skip512 S3969C3_nt

#else // __cplusplus

extern void _ZN10S3969C3_ntC1Ev();
extern void _ZN10S3969C3_ntD1Ev();
Name_Map name_map_S3969C3_nt[] = {
  NSPAIR(_ZN10S3969C3_ntC1Ev),
  NSPAIR(_ZN10S3969C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3969C3_nt[];
extern void _ZN10S3969C3_ntD1Ev();
extern void _ZN10S3969C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3969C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3969C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3969C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3969C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3969C3_nt[];
VTBL_ENTRY *P__ZTI10S3969C3_nt = _ZTI10S3969C3_nt; 
extern  VTBL_ENTRY _ZTV10S3969C3_nt[];
Class_Descriptor cd_S3969C3_nt = {  "S3969C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3969C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S3969C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3969C3_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  S3969C2  : S3969C3_nt {
  int s3969c2f0;
  virtual  ~S3969C2(); // _ZN7S3969C2D1Ev
  S3969C2(); // tgen
};
//SIG(-1 S3969C2) C1{ BC2{ vd m Fp Fi} vd Fi}


 S3969C2 ::~S3969C2(){ note_dtor("S3969C2", this);}
S3969C2 ::S3969C2(){ note_ctor("S3969C2", this);} // tgen

static void Test_S3969C2()
{
  extern Class_Descriptor cd_S3969C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3969C2, buf);
    S3969C2 *dp, &lv = *(dp=new (buf) S3969C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3969C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3969C2)");
    check_base_class_offset(lv, (S3969C3_nt*), 0, "S3969C2");
    check_field_offset(lv, s3969c2f0, ABISELECT(20,12), "S3969C2.s3969c2f0");
    test_class_info(&lv, &cd_S3969C2);
    dp->~S3969C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3969C2(Test_S3969C2, "S3969C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3969C2C1Ev();
extern void _ZN7S3969C2D1Ev();
Name_Map name_map_S3969C2[] = {
  NSPAIR(_ZN7S3969C2C1Ev),
  NSPAIR(_ZN7S3969C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3969C3_nt;
extern VTBL_ENTRY _ZTI10S3969C3_nt[];
extern  VTBL_ENTRY _ZTV10S3969C3_nt[];
static Base_Class bases_S3969C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3969C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3969C2[];
extern void _ZN7S3969C2D1Ev();
extern void _ZN7S3969C2D0Ev();
static  VTBL_ENTRY vtc_S3969C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3969C2[0]),
  (VTBL_ENTRY)&_ZN7S3969C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3969C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3969C2[];
extern  VTBL_ENTRY _ZTV7S3969C2[];
Class_Descriptor cd_S3969C2 = {  "S3969C2", // class name
  bases_S3969C2, 1,
  &(vtc_S3969C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3969C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3969C2),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  S3969C1  : S3969C2 {
  int s3969c1f0;
  ::S2123C20_nt s3969c1f1;
  virtual  ~S3969C1(); // _ZN7S3969C1D1Ev
  S3969C1(); // tgen
};
//SIG(1 S3969C1) C1{ BC2{ BC3{ vd m Fp Fi} vd Fi} vd Fi FC4{ m Fp Fi FC5{ m}}}


 S3969C1 ::~S3969C1(){ note_dtor("S3969C1", this);}
S3969C1 ::S3969C1(){ note_ctor("S3969C1", this);} // tgen

static void Test_S3969C1()
{
  extern Class_Descriptor cd_S3969C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S3969C1, buf);
    S3969C1 *dp, &lv = *(dp=new (buf) S3969C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S3969C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3969C1)");
    check_base_class_offset(lv, (S3969C3_nt*)(S3969C2*), 0, "S3969C1");
    check_base_class_offset(lv, (S3969C2*), 0, "S3969C1");
    check_field_offset(lv, s3969c1f0, ABISELECT(24,16), "S3969C1.s3969c1f0");
    check_field_offset(lv, s3969c1f1, ABISELECT(32,20), "S3969C1.s3969c1f1");
    test_class_info(&lv, &cd_S3969C1);
    dp->~S3969C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3969C1(Test_S3969C1, "S3969C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S3969C1C1Ev();
extern void _ZN7S3969C1D1Ev();
Name_Map name_map_S3969C1[] = {
  NSPAIR(_ZN7S3969C1C1Ev),
  NSPAIR(_ZN7S3969C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3969C3_nt;
extern VTBL_ENTRY _ZTI10S3969C3_nt[];
extern  VTBL_ENTRY _ZTV10S3969C3_nt[];
extern Class_Descriptor cd_S3969C2;
extern VTBL_ENTRY _ZTI7S3969C2[];
extern  VTBL_ENTRY _ZTV7S3969C2[];
static Base_Class bases_S3969C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3969C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3969C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3969C1[];
extern void _ZN7S3969C1D1Ev();
extern void _ZN7S3969C1D0Ev();
static  VTBL_ENTRY vtc_S3969C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3969C1[0]),
  (VTBL_ENTRY)&_ZN7S3969C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3969C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3969C1[];
extern  VTBL_ENTRY _ZTV7S3969C1[];
Class_Descriptor cd_S3969C1 = {  "S3969C1", // class name
  bases_S3969C1, 2,
  &(vtc_S3969C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S3969C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3969C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15291C1  {
  ::S708C37_nt s15291c1f0;
  ::S708C37_nt s15291c1f1;
  ::S708C50 s15291c1f2;
  void  mf15291c1(); // _ZN8S15291C19mf15291c1Ev
};
//SIG(1 S15291C1) C1{ m FC2{ BC3{ BC4{ BC5{ m Fp Fi[2]}}}} FC2 FC6{ BC7{ BC5}}}


void  S15291C1 ::mf15291c1(){}

static void Test_S15291C1()
{
  {
    init_simple_test("S15291C1");
    S15291C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S15291C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15291C1)");
    check_field_offset(lv, s15291c1f0, 0, "S15291C1.s15291c1f0");
    check_field_offset(lv, s15291c1f1, ABISELECT(16,12), "S15291C1.s15291c1f1");
    check_field_offset(lv, s15291c1f2, ABISELECT(32,24), "S15291C1.s15291c1f2");
  }
}
static Arrange_To_Call_Me vS15291C1(Test_S15291C1, "S15291C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18280C2  {
  void *s18280c2f0;
  ::S2123C26 s18280c2f1;
  void  mf18280c2(); // _ZN8S18280C29mf18280c2Ev
};
//SIG(-1 S18280C2) C1{ m Fp FC2{ m Fp Fi FC3{ m} FC3}}


void  S18280C2 ::mf18280c2(){}

static void Test_S18280C2()
{
  {
    init_simple_test("S18280C2");
    S18280C2 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18280C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18280C2)");
    check_field_offset(lv, s18280c2f0, 0, "S18280C2.s18280c2f0");
    check_field_offset(lv, s18280c2f1, ABISELECT(8,4), "S18280C2.s18280c2f1");
  }
}
static Arrange_To_Call_Me vS18280C2(Test_S18280C2, "S18280C2", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18280C1  {
  void *s18280c1f0[3];
  ::S18280C2 s18280c1f1;
  char s18280c1f2[2];
  void  mf18280c1(); // _ZN8S18280C19mf18280c1Ev
};
//SIG(1 S18280C1) C1{ m Fp[3] FC2{ m Fp FC3{ m Fp Fi FC4{ m} FC4}} Fc[2]}


void  S18280C1 ::mf18280c1(){}

static void Test_S18280C1()
{
  {
    init_simple_test("S18280C1");
    S18280C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S18280C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18280C1)");
    check_field_offset(lv, s18280c1f0, 0, "S18280C1.s18280c1f0");
    check_field_offset(lv, s18280c1f1, ABISELECT(24,12), "S18280C1.s18280c1f1");
    check_field_offset(lv, s18280c1f2, ABISELECT(48,28), "S18280C1.s18280c1f2");
  }
}
static Arrange_To_Call_Me vS18280C1(Test_S18280C1, "S18280C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17637C1  {
  void *s17637c1f0;
  ::S2123C37 s17637c1f1;
  char s17637c1f2;
  void *s17637c1f3;
  ::S21777C11_nt s17637c1f4;
  char s17637c1f5[2];
  void  mf17637c1(); // _ZN8S17637C19mf17637c1Ev
};
//SIG(1 S17637C1) C1{ m Fp FC2{ m Fp Fi[2] FC3{ m}} Fc Fp FC4{ m Fp} Fc[2]}


void  S17637C1 ::mf17637c1(){}

static void Test_S17637C1()
{
  {
    init_simple_test("S17637C1");
    S17637C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S17637C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17637C1)");
    check_field_offset(lv, s17637c1f0, 0, "S17637C1.s17637c1f0");
    check_field_offset(lv, s17637c1f1, ABISELECT(8,4), "S17637C1.s17637c1f1");
    check_field_offset(lv, s17637c1f2, ABISELECT(32,20), "S17637C1.s17637c1f2");
    check_field_offset(lv, s17637c1f3, ABISELECT(40,24), "S17637C1.s17637c1f3");
    check_field_offset(lv, s17637c1f4, ABISELECT(48,28), "S17637C1.s17637c1f4");
    check_field_offset(lv, s17637c1f5, ABISELECT(56,32), "S17637C1.s17637c1f5");
  }
}
static Arrange_To_Call_Me vS17637C1(Test_S17637C1, "S17637C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14373C1  {
  void *s14373c1f0;
  int s14373c1f1[7];
  void *s14373c1f2;
  char s14373c1f3[1280];
  int s14373c1f4[2];
  long s14373c1f5;
  int s14373c1f6[2];
  char s14373c1f7[8];
  int s14373c1f8[5];
};
//SIG(1 S14373C1) C1{ Fp Fi[7] Fp Fc[1280] Fi[2] Fl Fi[2] Fc[8] Fi[5]}



static void Test_S14373C1()
{
  {
    init_simple_test("S14373C1");
    S14373C1 lv;
    check2(sizeof(lv), ABISELECT(1384,1364), "sizeof(S14373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14373C1)");
    check_field_offset(lv, s14373c1f0, 0, "S14373C1.s14373c1f0");
    check_field_offset(lv, s14373c1f1, ABISELECT(8,4), "S14373C1.s14373c1f1");
    check_field_offset(lv, s14373c1f2, ABISELECT(40,32), "S14373C1.s14373c1f2");
    check_field_offset(lv, s14373c1f3, ABISELECT(48,36), "S14373C1.s14373c1f3");
    check_field_offset(lv, s14373c1f4, ABISELECT(1328,1316), "S14373C1.s14373c1f4");
    check_field_offset(lv, s14373c1f5, ABISELECT(1336,1324), "S14373C1.s14373c1f5");
    check_field_offset(lv, s14373c1f6, ABISELECT(1344,1328), "S14373C1.s14373c1f6");
    check_field_offset(lv, s14373c1f7, ABISELECT(1352,1336), "S14373C1.s14373c1f7");
    check_field_offset(lv, s14373c1f8, ABISELECT(1360,1344), "S14373C1.s14373c1f8");
  }
}
static Arrange_To_Call_Me vS14373C1(Test_S14373C1, "S14373C1", ABISELECT(1384,1364));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14010C3  {
  __tsi64 s14010c3f0;
  long s14010c3f1;
  short s14010c3f2;
  void *s14010c3f3;
};
//SIG(1 S14010C3) C1{ FL Fl Fs Fp}



static void Test_S14010C3()
{
  {
    init_simple_test("S14010C3");
    S14010C3 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S14010C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14010C3)");
    check_field_offset(lv, s14010c3f0, 0, "S14010C3.s14010c3f0");
    check_field_offset(lv, s14010c3f1, 8, "S14010C3.s14010c3f1");
    check_field_offset(lv, s14010c3f2, ABISELECT(16,12), "S14010C3.s14010c3f2");
    check_field_offset(lv, s14010c3f3, ABISELECT(24,16), "S14010C3.s14010c3f3");
  }
}
static Arrange_To_Call_Me vS14010C3(Test_S14010C3, "S14010C3", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14010C2  {
  long s14010c2f0[2];
  ::S14010C3 s14010c2f1[50];
};
//SIG(1 S14010C2) C1{ Fl[2] FC2{ FL Fl Fs Fp}[50]}



static void Test_S14010C2()
{
  {
    init_simple_test("S14010C2");
    S14010C2 lv;
    check2(sizeof(lv), ABISELECT(1616,1008), "sizeof(S14010C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14010C2)");
    check_field_offset(lv, s14010c2f0, 0, "S14010C2.s14010c2f0");
    check_field_offset(lv, s14010c2f1, ABISELECT(16,8), "S14010C2.s14010c2f1");
  }
}
static Arrange_To_Call_Me vS14010C2(Test_S14010C2, "S14010C2", ABISELECT(1616,1008));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14010C1  {
  __tsi64 s14010c1f0[4];
  long s14010c1f1[2];
  ::S14010C2 s14010c1f2[2];
};
//SIG(1 S14010C1) C1{ FL[4] Fl[2] FC2{ Fl[2] FC3{ FL Fl Fs Fp}[50]}[2]}



static void Test_S14010C1()
{
  {
    init_simple_test("S14010C1");
    S14010C1 lv;
    check2(sizeof(lv), ABISELECT(3280,2056), "sizeof(S14010C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14010C1)");
    check_field_offset(lv, s14010c1f0, 0, "S14010C1.s14010c1f0");
    check_field_offset(lv, s14010c1f1, 32, "S14010C1.s14010c1f1");
    check_field_offset(lv, s14010c1f2, ABISELECT(48,40), "S14010C1.s14010c1f2");
  }
}
static Arrange_To_Call_Me vS14010C1(Test_S14010C1, "S14010C1", ABISELECT(3280,2056));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12352C2  {
  char s12352c2f0[2];
  short s12352c2f1;
  int s12352c2f2;
};
//SIG(-1 S12352C2) C1{ Fc[2] Fs Fi}



static void Test_S12352C2()
{
  {
    init_simple_test("S12352C2");
    S12352C2 lv;
    check2(sizeof(lv), 8, "sizeof(S12352C2)");
    check2(__alignof__(lv), 4, "__alignof__(S12352C2)");
    check_field_offset(lv, s12352c2f0, 0, "S12352C2.s12352c2f0");
    check_field_offset(lv, s12352c2f1, 2, "S12352C2.s12352c2f1");
    check_field_offset(lv, s12352c2f2, 4, "S12352C2.s12352c2f2");
  }
}
static Arrange_To_Call_Me vS12352C2(Test_S12352C2, "S12352C2", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12352C1  {
  int s12352c1f0;
  ::S12352C2 s12352c1f1;
  int s12352c1f2[2];
  void *s12352c1f3;
  int s12352c1f4;
  void *s12352c1f5;
  int s12352c1f6[2];
  void *s12352c1f7;
  int s12352c1f8;
};
//SIG(1 S12352C1) C1{ Fi FC2{ Fc[2] Fs Fi} Fi[2] Fp Fi Fp Fi[2] Fp Fi}



static void Test_S12352C1()
{
  {
    init_simple_test("S12352C1");
    S12352C1 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S12352C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12352C1)");
    check_field_offset(lv, s12352c1f0, 0, "S12352C1.s12352c1f0");
    check_field_offset(lv, s12352c1f1, 4, "S12352C1.s12352c1f1");
    check_field_offset(lv, s12352c1f2, 12, "S12352C1.s12352c1f2");
    check_field_offset(lv, s12352c1f3, ABISELECT(24,20), "S12352C1.s12352c1f3");
    check_field_offset(lv, s12352c1f4, ABISELECT(32,24), "S12352C1.s12352c1f4");
    check_field_offset(lv, s12352c1f5, ABISELECT(40,28), "S12352C1.s12352c1f5");
    check_field_offset(lv, s12352c1f6, ABISELECT(48,32), "S12352C1.s12352c1f6");
    check_field_offset(lv, s12352c1f7, ABISELECT(56,40), "S12352C1.s12352c1f7");
    check_field_offset(lv, s12352c1f8, ABISELECT(64,44), "S12352C1.s12352c1f8");
  }
}
static Arrange_To_Call_Me vS12352C1(Test_S12352C1, "S12352C1", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18617C1  {
  long double s18617c1f0;
  ::S21131C5 s18617c1f1;
  virtual void  v1(); // _ZN8S18617C12v1Ev
  virtual void  v2(); // _ZN8S18617C12v2Ev
  virtual void  v3(); // _ZN8S18617C12v3Ev
  ~S18617C1(); // tgen
  S18617C1(); // tgen
};
//SIG(1 S18617C1) C1{ v1 v2 v3 FD FC2{ v4 v5 v6 v7 v8 v9 v10 FD[3]}}


void  S18617C1 ::v1(){vfunc_called(this, "_ZN8S18617C12v1Ev");}
void  S18617C1 ::v2(){vfunc_called(this, "_ZN8S18617C12v2Ev");}
void  S18617C1 ::v3(){vfunc_called(this, "_ZN8S18617C12v3Ev");}
S18617C1 ::~S18617C1(){ note_dtor("S18617C1", this);} // tgen
S18617C1 ::S18617C1(){ note_ctor("S18617C1", this);} // tgen

static void Test_S18617C1()
{
  extern Class_Descriptor cd_S18617C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S18617C1, buf);
    S18617C1 *dp, &lv = *(dp=new (buf) S18617C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S18617C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18617C1)");
    check_field_offset(lv, s18617c1f0, ABISELECT(16,4), "S18617C1.s18617c1f0");
    check_field_offset(lv, s18617c1f1, ABISELECT(32,16), "S18617C1.s18617c1f1");
    test_class_info(&lv, &cd_S18617C1);
    dp->~S18617C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18617C1(Test_S18617C1, "S18617C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S18617C1C1Ev();
extern void _ZN8S18617C1D1Ev();
Name_Map name_map_S18617C1[] = {
  NSPAIR(_ZN8S18617C1C1Ev),
  NSPAIR(_ZN8S18617C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18617C1[];
extern void _ZN8S18617C12v1Ev();
extern void _ZN8S18617C12v2Ev();
extern void _ZN8S18617C12v3Ev();
static  VTBL_ENTRY vtc_S18617C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18617C1[0]),
  (VTBL_ENTRY)&_ZN8S18617C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18617C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18617C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18617C1[];
extern  VTBL_ENTRY _ZTV8S18617C1[];
Class_Descriptor cd_S18617C1 = {  "S18617C1", // class name
  0,0,//no base classes
  &(vtc_S18617C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S18617C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18617C1),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  S11164C1  {
  ::S12352C2 s11164c1f0;
  ::S12352C2 s11164c1f1;
  ::S12352C2 s11164c1f2;
  void *s11164c1f3;
  int s11164c1f4;
  void *s11164c1f5;
  int s11164c1f6[2];
  void *s11164c1f7;
  int s11164c1f8;
};
//SIG(1 S11164C1) C1{ FC2{ Fc[2] Fs Fi} FC2 FC2 Fp Fi Fp Fi[2] Fp Fi}



static void Test_S11164C1()
{
  {
    init_simple_test("S11164C1");
    S11164C1 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S11164C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11164C1)");
    check_field_offset(lv, s11164c1f0, 0, "S11164C1.s11164c1f0");
    check_field_offset(lv, s11164c1f1, 8, "S11164C1.s11164c1f1");
    check_field_offset(lv, s11164c1f2, 16, "S11164C1.s11164c1f2");
    check_field_offset(lv, s11164c1f3, 24, "S11164C1.s11164c1f3");
    check_field_offset(lv, s11164c1f4, ABISELECT(32,28), "S11164C1.s11164c1f4");
    check_field_offset(lv, s11164c1f5, ABISELECT(40,32), "S11164C1.s11164c1f5");
    check_field_offset(lv, s11164c1f6, ABISELECT(48,36), "S11164C1.s11164c1f6");
    check_field_offset(lv, s11164c1f7, ABISELECT(56,44), "S11164C1.s11164c1f7");
    check_field_offset(lv, s11164c1f8, ABISELECT(64,48), "S11164C1.s11164c1f8");
  }
}
static Arrange_To_Call_Me vS11164C1(Test_S11164C1, "S11164C1", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18050C4_nt  {
  __tsi64 s18050c4f0;
  void  mf18050c4(); // _ZN11S18050C4_nt9mf18050c4Ev
};
//SIG(-1 S18050C4_nt) C1{ m FL}


void  S18050C4_nt ::mf18050c4(){}

//skip512 S18050C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18050C3_nt  {
  ::S18050C4_nt s18050c3f0;
  void  mf18050c3(); // _ZN11S18050C3_nt9mf18050c3Ev
};
//SIG(-1 S18050C3_nt) C1{ m FC2{ m FL}}


void  S18050C3_nt ::mf18050c3(){}

//skip512 S18050C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18050C2  {
  ::S18050C3_nt s18050c2f0;
  ::S18050C3_nt s18050c2f1;
  int s18050c2f2[2];
  void  mf18050c2(); // _ZN8S18050C29mf18050c2Ev
  virtual  ~S18050C2(); // _ZN8S18050C2D1Ev
  S18050C2(); // tgen
};
//SIG(-1 S18050C2) C1{ vd m FC2{ m FC3{ m FL}} FC2 Fi[2]}


void  S18050C2 ::mf18050c2(){}
 S18050C2 ::~S18050C2(){ note_dtor("S18050C2", this);}
S18050C2 ::S18050C2(){ note_ctor("S18050C2", this);} // tgen

static void Test_S18050C2()
{
  extern Class_Descriptor cd_S18050C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S18050C2, buf);
    S18050C2 *dp, &lv = *(dp=new (buf) S18050C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S18050C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18050C2)");
    check_field_offset(lv, s18050c2f0, ABISELECT(8,4), "S18050C2.s18050c2f0");
    check_field_offset(lv, s18050c2f1, ABISELECT(16,12), "S18050C2.s18050c2f1");
    check_field_offset(lv, s18050c2f2, ABISELECT(24,20), "S18050C2.s18050c2f2");
    test_class_info(&lv, &cd_S18050C2);
    dp->~S18050C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18050C2(Test_S18050C2, "S18050C2", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN8S18050C2C1Ev();
extern void _ZN8S18050C2D1Ev();
Name_Map name_map_S18050C2[] = {
  NSPAIR(_ZN8S18050C2C1Ev),
  NSPAIR(_ZN8S18050C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18050C2[];
extern void _ZN8S18050C2D1Ev();
extern void _ZN8S18050C2D0Ev();
static  VTBL_ENTRY vtc_S18050C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18050C2[0]),
  (VTBL_ENTRY)&_ZN8S18050C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18050C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S18050C2[];
extern  VTBL_ENTRY _ZTV8S18050C2[];
Class_Descriptor cd_S18050C2 = {  "S18050C2", // class name
  0,0,//no base classes
  &(vtc_S18050C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI8S18050C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18050C2),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  S18050C1  {
  void *s18050c1f0[2];
  ::S18050C2 s18050c1f1;
  void  mf18050c1(); // _ZN8S18050C19mf18050c1Ev
};
//SIG(1 S18050C1) C1{ m Fp[2] FC2{ vd m FC3{ m FC4{ m FL}} FC3 Fi[2]}}


void  S18050C1 ::mf18050c1(){}

static void Test_S18050C1()
{
  {
    init_simple_test("S18050C1");
    S18050C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S18050C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18050C1)");
    check_field_offset(lv, s18050c1f0, 0, "S18050C1.s18050c1f0");
    check_field_offset(lv, s18050c1f1, ABISELECT(16,8), "S18050C1.s18050c1f1");
  }
}
static Arrange_To_Call_Me vS18050C1(Test_S18050C1, "S18050C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17782C1  {
  void *s17782c1f0;
  int s17782c1f1[2];
  ::S10155C9 s17782c1f2;
  void  mf17782c1(); // _ZN8S17782C19mf17782c1Ev
};
//SIG(1 S17782C1) C1{ m Fp Fi[2] FC2{ Fi[4] Fc[64] Fi[2] Fc[8] Fi}}


void  S17782C1 ::mf17782c1(){}

static void Test_S17782C1()
{
  {
    init_simple_test("S17782C1");
    S17782C1 lv;
    check2(sizeof(lv), ABISELECT(120,112), "sizeof(S17782C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17782C1)");
    check_field_offset(lv, s17782c1f0, 0, "S17782C1.s17782c1f0");
    check_field_offset(lv, s17782c1f1, ABISELECT(8,4), "S17782C1.s17782c1f1");
    check_field_offset(lv, s17782c1f2, ABISELECT(16,12), "S17782C1.s17782c1f2");
  }
}
static Arrange_To_Call_Me vS17782C1(Test_S17782C1, "S17782C1", ABISELECT(120,112));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16359C1  {
  ::S3681C6_nt s16359c1f0;
  char s16359c1f1;
  int s16359c1f2;
  ::S2123C37 s16359c1f3;
  void  mf16359c1(); // _ZN8S16359C19mf16359c1Ev
};
//SIG(1 S16359C1) C1{ m FC2{ m Fp[2]} Fc Fi FC3{ m Fp Fi[2] FC4{ m}}}


void  S16359C1 ::mf16359c1(){}

static void Test_S16359C1()
{
  {
    init_simple_test("S16359C1");
    S16359C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S16359C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16359C1)");
    check_field_offset(lv, s16359c1f0, 0, "S16359C1.s16359c1f0");
    check_field_offset(lv, s16359c1f1, ABISELECT(16,8), "S16359C1.s16359c1f1");
    check_field_offset(lv, s16359c1f2, ABISELECT(20,12), "S16359C1.s16359c1f2");
    check_field_offset(lv, s16359c1f3, ABISELECT(24,16), "S16359C1.s16359c1f3");
  }
}
static Arrange_To_Call_Me vS16359C1(Test_S16359C1, "S16359C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20300C2  {
  int s20300c2f0;
  virtual void  v6(); // _ZN8S20300C22v6Ev
  virtual void  v7(); // _ZN8S20300C22v7Ev
  virtual void  v8(); // _ZN8S20300C22v8Ev
  virtual void  v9(); // _ZN8S20300C22v9Ev
  virtual void  v10(); // _ZN8S20300C23v10Ev
  ~S20300C2(); // tgen
  S20300C2(); // tgen
};
//SIG(-1 S20300C2) C1{ v1 v2 v3 v4 v5 Fi}


void  S20300C2 ::v6(){vfunc_called(this, "_ZN8S20300C22v6Ev");}
void  S20300C2 ::v7(){vfunc_called(this, "_ZN8S20300C22v7Ev");}
void  S20300C2 ::v8(){vfunc_called(this, "_ZN8S20300C22v8Ev");}
void  S20300C2 ::v9(){vfunc_called(this, "_ZN8S20300C22v9Ev");}
void  S20300C2 ::v10(){vfunc_called(this, "_ZN8S20300C23v10Ev");}
S20300C2 ::~S20300C2(){ note_dtor("S20300C2", this);} // tgen
S20300C2 ::S20300C2(){ note_ctor("S20300C2", this);} // tgen

static void Test_S20300C2()
{
  extern Class_Descriptor cd_S20300C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20300C2, buf);
    S20300C2 *dp, &lv = *(dp=new (buf) S20300C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20300C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20300C2)");
    check_field_offset(lv, s20300c2f0, ABISELECT(8,4), "S20300C2.s20300c2f0");
    test_class_info(&lv, &cd_S20300C2);
    dp->~S20300C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20300C2(Test_S20300C2, "S20300C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20300C2C1Ev();
extern void _ZN8S20300C2D1Ev();
Name_Map name_map_S20300C2[] = {
  NSPAIR(_ZN8S20300C2C1Ev),
  NSPAIR(_ZN8S20300C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20300C2[];
extern void _ZN8S20300C22v6Ev();
extern void _ZN8S20300C22v7Ev();
extern void _ZN8S20300C22v8Ev();
extern void _ZN8S20300C22v9Ev();
extern void _ZN8S20300C23v10Ev();
static  VTBL_ENTRY vtc_S20300C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20300C2[0]),
  (VTBL_ENTRY)&_ZN8S20300C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20300C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20300C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20300C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20300C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20300C2[];
extern  VTBL_ENTRY _ZTV8S20300C2[];
Class_Descriptor cd_S20300C2 = {  "S20300C2", // class name
  0,0,//no base classes
  &(vtc_S20300C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20300C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20300C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20300C1  : virtual S20300C2 {
  virtual  ~S20300C1(); // _ZN8S20300C1D2Ev
  virtual void  v1(); // _ZN8S20300C12v1Ev
  virtual void  v2(); // _ZN8S20300C12v2Ev
  virtual void  v3(); // _ZN8S20300C12v3Ev
  virtual void  v4(); // _ZN8S20300C12v4Ev
  virtual void  v5(); // _ZN8S20300C12v5Ev
  S20300C1(); // tgen
};
//SIG(1 S20300C1) C1{ VBC2{ v6 v7 v8 v9 v10 Fi} vd v1 v2 v3 v4 v5}


 S20300C1 ::~S20300C1(){ note_dtor("S20300C1", this);}
void  S20300C1 ::v1(){vfunc_called(this, "_ZN8S20300C12v1Ev");}
void  S20300C1 ::v2(){vfunc_called(this, "_ZN8S20300C12v2Ev");}
void  S20300C1 ::v3(){vfunc_called(this, "_ZN8S20300C12v3Ev");}
void  S20300C1 ::v4(){vfunc_called(this, "_ZN8S20300C12v4Ev");}
void  S20300C1 ::v5(){vfunc_called(this, "_ZN8S20300C12v5Ev");}
S20300C1 ::S20300C1(){ note_ctor("S20300C1", this);} // tgen

static void Test_S20300C1()
{
  extern Class_Descriptor cd_S20300C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20300C1, buf);
    S20300C1 *dp, &lv = *(dp=new (buf) S20300C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20300C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20300C1)");
    check_base_class_offset(lv, (S20300C2*), ABISELECT(8,4), "S20300C1");
    test_class_info(&lv, &cd_S20300C1);
    dp->~S20300C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20300C1(Test_S20300C1, "S20300C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20300C1C1Ev();
extern void _ZN8S20300C1D2Ev();
Name_Map name_map_S20300C1[] = {
  NSPAIR(_ZN8S20300C1C1Ev),
  NSPAIR(_ZN8S20300C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20300C2;
extern VTBL_ENTRY _ZTI8S20300C2[];
extern  VTBL_ENTRY _ZTV8S20300C2[];
static Base_Class bases_S20300C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20300C2,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //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 _ZTI8S20300C1[];
extern void _ZN8S20300C1D1Ev();
extern void _ZN8S20300C1D0Ev();
extern void _ZN8S20300C12v1Ev();
extern void _ZN8S20300C12v2Ev();
extern void _ZN8S20300C12v3Ev();
extern void _ZN8S20300C12v4Ev();
extern void _ZN8S20300C12v5Ev();
extern void _ZN8S20300C22v6Ev();
extern void _ZN8S20300C22v7Ev();
extern void _ZN8S20300C22v8Ev();
extern void _ZN8S20300C22v9Ev();
extern void _ZN8S20300C23v10Ev();
static  VTBL_ENTRY vtc_S20300C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20300C1[0]),
  (VTBL_ENTRY)&_ZN8S20300C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20300C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20300C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20300C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20300C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20300C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20300C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20300C1[0]),
  (VTBL_ENTRY)&_ZN8S20300C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20300C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20300C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20300C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20300C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S20300C1[];
static  VTT_ENTRY vtt_S20300C1[] = {
  {&(_ZTV8S20300C1[3]),  3,22},
  {&(_ZTV8S20300C1[17]),  17,22},
};
extern VTBL_ENTRY _ZTI8S20300C1[];
extern  VTBL_ENTRY _ZTV8S20300C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20300C1[];
Class_Descriptor cd_S20300C1 = {  "S20300C1", // class name
  bases_S20300C1, 1,
  &(vtc_S20300C1[0]), // expected_vtbl_contents
  &(vtt_S20300C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20300C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20300C1),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20300C1),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  S6573C2  {
  void *s6573c2f0;
  int s6573c2f1;
  virtual  ~S6573C2(); // _ZN7S6573C2D1Ev
  virtual void  v2(); // _ZN7S6573C22v2Ev
  virtual void  v3(); // _ZN7S6573C22v3Ev
  virtual void  v4(); // _ZN7S6573C22v4Ev
  S6573C2(); // tgen
};
//SIG(-1 S6573C2) C1{ vd v1 v2 v3 Fp Fi}


 S6573C2 ::~S6573C2(){ note_dtor("S6573C2", this);}
void  S6573C2 ::v2(){vfunc_called(this, "_ZN7S6573C22v2Ev");}
void  S6573C2 ::v3(){vfunc_called(this, "_ZN7S6573C22v3Ev");}
void  S6573C2 ::v4(){vfunc_called(this, "_ZN7S6573C22v4Ev");}
S6573C2 ::S6573C2(){ note_ctor("S6573C2", this);} // tgen

static void Test_S6573C2()
{
  extern Class_Descriptor cd_S6573C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6573C2, buf);
    S6573C2 *dp, &lv = *(dp=new (buf) S6573C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6573C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6573C2)");
    check_field_offset(lv, s6573c2f0, ABISELECT(8,4), "S6573C2.s6573c2f0");
    check_field_offset(lv, s6573c2f1, ABISELECT(16,8), "S6573C2.s6573c2f1");
    test_class_info(&lv, &cd_S6573C2);
    dp->~S6573C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6573C2(Test_S6573C2, "S6573C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6573C2C1Ev();
extern void _ZN7S6573C2D1Ev();
Name_Map name_map_S6573C2[] = {
  NSPAIR(_ZN7S6573C2C1Ev),
  NSPAIR(_ZN7S6573C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6573C2[];
extern void _ZN7S6573C2D1Ev();
extern void _ZN7S6573C2D0Ev();
extern void _ZN7S6573C22v2Ev();
extern void _ZN7S6573C22v3Ev();
extern void _ZN7S6573C22v4Ev();
static  VTBL_ENTRY vtc_S6573C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6573C2[0]),
  (VTBL_ENTRY)&_ZN7S6573C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6573C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6573C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6573C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6573C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6573C2[];
extern  VTBL_ENTRY _ZTV7S6573C2[];
Class_Descriptor cd_S6573C2 = {  "S6573C2", // class name
  0,0,//no base classes
  &(vtc_S6573C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6573C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6573C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6573C1  : S6573C2 {
  void *s6573c1f0;
  ::S3681C6_nt s6573c1f1;
  virtual void  v1(); // _ZN7S6573C12v1Ev
  ~S6573C1(); // tgen
  S6573C1(); // tgen
};
//SIG(1 S6573C1) C1{ BC2{ vd v2 v3 v4 Fp Fi} v1 Fp FC3{ m Fp[2]}}


void  S6573C1 ::v1(){vfunc_called(this, "_ZN7S6573C12v1Ev");}
S6573C1 ::~S6573C1(){ note_dtor("S6573C1", this);} // tgen
S6573C1 ::S6573C1(){ note_ctor("S6573C1", this);} // tgen

static void Test_S6573C1()
{
  extern Class_Descriptor cd_S6573C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6573C1, buf);
    S6573C1 *dp, &lv = *(dp=new (buf) S6573C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6573C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6573C1)");
    check_base_class_offset(lv, (S6573C2*), 0, "S6573C1");
    check_field_offset(lv, s6573c1f0, ABISELECT(24,12), "S6573C1.s6573c1f0");
    check_field_offset(lv, s6573c1f1, ABISELECT(32,16), "S6573C1.s6573c1f1");
    test_class_info(&lv, &cd_S6573C1);
    dp->~S6573C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6573C1(Test_S6573C1, "S6573C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6573C1C1Ev();
extern void _ZN7S6573C1D1Ev();
Name_Map name_map_S6573C1[] = {
  NSPAIR(_ZN7S6573C1C1Ev),
  NSPAIR(_ZN7S6573C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6573C2;
extern VTBL_ENTRY _ZTI7S6573C2[];
extern  VTBL_ENTRY _ZTV7S6573C2[];
static Base_Class bases_S6573C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6573C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6573C1[];
extern void _ZN7S6573C1D1Ev();
extern void _ZN7S6573C1D0Ev();
extern void _ZN7S6573C22v2Ev();
extern void _ZN7S6573C22v3Ev();
extern void _ZN7S6573C22v4Ev();
extern void _ZN7S6573C12v1Ev();
static  VTBL_ENTRY vtc_S6573C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6573C1[0]),
  (VTBL_ENTRY)&_ZN7S6573C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6573C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6573C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6573C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6573C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6573C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6573C1[];
extern  VTBL_ENTRY _ZTV7S6573C1[];
Class_Descriptor cd_S6573C1 = {  "S6573C1", // class name
  bases_S6573C1, 1,
  &(vtc_S6573C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6573C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6573C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21460C1  {
  ::S2123C20_nt s21460c1f0;
  ::S2123C20_nt s21460c1f1;
  char s21460c1f2[3];
  void *s21460c1f3[2];
  void  mf21460c1(); // _ZN8S21460C19mf21460c1Ev
  virtual  ~S21460C1(); // _ZN8S21460C1D1Ev
  S21460C1(); // tgen
};
//SIG(1 S21460C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 Fc[3] Fp[2]}


void  S21460C1 ::mf21460c1(){}
 S21460C1 ::~S21460C1(){ note_dtor("S21460C1", this);}
S21460C1 ::S21460C1(){ note_ctor("S21460C1", this);} // tgen

static void Test_S21460C1()
{
  extern Class_Descriptor cd_S21460C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S21460C1, buf);
    S21460C1 *dp, &lv = *(dp=new (buf) S21460C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S21460C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21460C1)");
    check_field_offset(lv, s21460c1f0, ABISELECT(8,4), "S21460C1.s21460c1f0");
    check_field_offset(lv, s21460c1f1, ABISELECT(24,16), "S21460C1.s21460c1f1");
    check_field_offset(lv, s21460c1f2, ABISELECT(40,28), "S21460C1.s21460c1f2");
    check_field_offset(lv, s21460c1f3, ABISELECT(48,32), "S21460C1.s21460c1f3");
    test_class_info(&lv, &cd_S21460C1);
    dp->~S21460C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21460C1(Test_S21460C1, "S21460C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S21460C1C1Ev();
extern void _ZN8S21460C1D1Ev();
Name_Map name_map_S21460C1[] = {
  NSPAIR(_ZN8S21460C1C1Ev),
  NSPAIR(_ZN8S21460C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21460C1[];
extern void _ZN8S21460C1D1Ev();
extern void _ZN8S21460C1D0Ev();
static  VTBL_ENTRY vtc_S21460C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21460C1[0]),
  (VTBL_ENTRY)&_ZN8S21460C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21460C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21460C1[];
extern  VTBL_ENTRY _ZTV8S21460C1[];
Class_Descriptor cd_S21460C1 = {  "S21460C1", // class name
  0,0,//no base classes
  &(vtc_S21460C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S21460C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21460C1),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  S12921C1  {
  int s12921c1f0:3;
  int s12921c1f1:2;
  int s12921c1f2:2;
  int  :0;
  int s12921c1f4:2;
  int  :0;
  int s12921c1f6:2;
  char  :0;
};
//SIG(1 S12921C1) C1{ Fi:3 Fi:2 Fi:2 Fi:0 Fi:2 Fi:0 Fi:2 Fc:0}



static void Test_S12921C1()
{
  {
    init_simple_test("S12921C1");
    static S12921C1 lv;
    check2(sizeof(lv), 12, "sizeof(S12921C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12921C1)");
    set_bf_and_test(lv, s12921c1f0, 0, 0, 3, 1, "S12921C1");
    set_bf_and_test(lv, s12921c1f0, 0, 0, 3, hide_sll(1LL<<2), "S12921C1");
    set_bf_and_test(lv, s12921c1f1, 0, 3, 2, 1, "S12921C1");
    set_bf_and_test(lv, s12921c1f1, 0, 3, 2, hide_sll(1LL<<1), "S12921C1");
    set_bf_and_test(lv, s12921c1f2, 0, 5, 2, 1, "S12921C1");
    set_bf_and_test(lv, s12921c1f2, 0, 5, 2, hide_sll(1LL<<1), "S12921C1");
    set_bf_and_test(lv, s12921c1f4, 4, 0, 2, 1, "S12921C1");
    set_bf_and_test(lv, s12921c1f4, 4, 0, 2, hide_sll(1LL<<1), "S12921C1");
    set_bf_and_test(lv, s12921c1f6, 8, 0, 2, 1, "S12921C1");
    set_bf_and_test(lv, s12921c1f6, 8, 0, 2, hide_sll(1LL<<1), "S12921C1");
  }
}
static Arrange_To_Call_Me vS12921C1(Test_S12921C1, "S12921C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20278C2  {
  __tsi64 s20278c2f0;
  virtual  ~S20278C2(); // _ZN8S20278C2D1Ev
  virtual void  v5(); // _ZN8S20278C22v5Ev
  virtual void  v6(); // _ZN8S20278C22v6Ev
  S20278C2(); // tgen
};
//SIG(-1 S20278C2) C1{ vd v1 v2 FL}


 S20278C2 ::~S20278C2(){ note_dtor("S20278C2", this);}
void  S20278C2 ::v5(){vfunc_called(this, "_ZN8S20278C22v5Ev");}
void  S20278C2 ::v6(){vfunc_called(this, "_ZN8S20278C22v6Ev");}
S20278C2 ::S20278C2(){ note_ctor("S20278C2", this);} // tgen

static void Test_S20278C2()
{
  extern Class_Descriptor cd_S20278C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20278C2, buf);
    S20278C2 *dp, &lv = *(dp=new (buf) S20278C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20278C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20278C2)");
    check_field_offset(lv, s20278c2f0, ABISELECT(8,4), "S20278C2.s20278c2f0");
    test_class_info(&lv, &cd_S20278C2);
    dp->~S20278C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20278C2(Test_S20278C2, "S20278C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20278C2C1Ev();
extern void _ZN8S20278C2D1Ev();
Name_Map name_map_S20278C2[] = {
  NSPAIR(_ZN8S20278C2C1Ev),
  NSPAIR(_ZN8S20278C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20278C2[];
extern void _ZN8S20278C2D1Ev();
extern void _ZN8S20278C2D0Ev();
extern void _ZN8S20278C22v5Ev();
extern void _ZN8S20278C22v6Ev();
static  VTBL_ENTRY vtc_S20278C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20278C2[0]),
  (VTBL_ENTRY)&_ZN8S20278C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20278C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20278C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20278C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20278C2[];
extern  VTBL_ENTRY _ZTV8S20278C2[];
Class_Descriptor cd_S20278C2 = {  "S20278C2", // class name
  0,0,//no base classes
  &(vtc_S20278C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20278C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20278C2),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  S20278C1  : virtual S20278C2 {
  int s20278c1f0[10];
  virtual  ~S20278C1(); // _ZN8S20278C1D2Ev
  virtual void  v1(); // _ZN8S20278C12v1Ev
  virtual void  v2(); // _ZN8S20278C12v2Ev
  virtual void  v3(); // _ZN8S20278C12v3Ev
  virtual void  v4(); // _ZN8S20278C12v4Ev
  S20278C1(); // tgen
};
//SIG(1 S20278C1) C1{ VBC2{ vd v5 v6 FL} vd v1 v2 v3 v4 Fi[10]}


 S20278C1 ::~S20278C1(){ note_dtor("S20278C1", this);}
void  S20278C1 ::v1(){vfunc_called(this, "_ZN8S20278C12v1Ev");}
void  S20278C1 ::v2(){vfunc_called(this, "_ZN8S20278C12v2Ev");}
void  S20278C1 ::v3(){vfunc_called(this, "_ZN8S20278C12v3Ev");}
void  S20278C1 ::v4(){vfunc_called(this, "_ZN8S20278C12v4Ev");}
S20278C1 ::S20278C1(){ note_ctor("S20278C1", this);} // tgen

static void Test_S20278C1()
{
  extern Class_Descriptor cd_S20278C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,15)];
    init_test(&cd_S20278C1, buf);
    S20278C1 *dp, &lv = *(dp=new (buf) S20278C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S20278C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20278C1)");
    check_base_class_offset(lv, (S20278C2*), ABISELECT(48,44), "S20278C1");
    check_field_offset(lv, s20278c1f0, ABISELECT(8,4), "S20278C1.s20278c1f0");
    test_class_info(&lv, &cd_S20278C1);
    dp->~S20278C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20278C1(Test_S20278C1, "S20278C1", ABISELECT(64,56));

#else // __cplusplus

extern void _ZN8S20278C1C1Ev();
extern void _ZN8S20278C1D2Ev();
Name_Map name_map_S20278C1[] = {
  NSPAIR(_ZN8S20278C1C1Ev),
  NSPAIR(_ZN8S20278C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20278C2;
extern VTBL_ENTRY _ZTI8S20278C2[];
extern  VTBL_ENTRY _ZTV8S20278C2[];
static Base_Class bases_S20278C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20278C2,    ABISELECT(48,44), //bcp->offset
    9, //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 _ZTI8S20278C1[];
extern void _ZN8S20278C1D1Ev();
extern void _ZN8S20278C1D0Ev();
extern void _ZN8S20278C12v1Ev();
extern void _ZN8S20278C12v2Ev();
extern void _ZN8S20278C12v3Ev();
extern void _ZN8S20278C12v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S20278C1D1Ev,_ZTv0_n12_N8S20278C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S20278C1D1Ev,_ZThn44_N8S20278C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20278C1D0Ev,_ZTv0_n12_N8S20278C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S20278C1D0Ev,_ZThn44_N8S20278C1D0Ev)() __attribute__((weak));
extern void _ZN8S20278C22v5Ev();
extern void _ZN8S20278C22v6Ev();
static  VTBL_ENTRY vtc_S20278C1[] = {
  ABISELECT(48,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20278C1[0]),
  (VTBL_ENTRY)&_ZN8S20278C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20278C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20278C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20278C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20278C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20278C12v4Ev,
  0,
  0,
  ABISELECT(-48,-44),
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI8S20278C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20278C1D1Ev,_ZTv0_n12_N8S20278C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20278C1D0Ev,_ZTv0_n12_N8S20278C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20278C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20278C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S20278C1[];
static  VTT_ENTRY vtt_S20278C1[] = {
  {&(_ZTV8S20278C1[3]),  3,18},
  {&(_ZTV8S20278C1[14]),  14,18},
};
extern VTBL_ENTRY _ZTI8S20278C1[];
extern  VTBL_ENTRY _ZTV8S20278C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20278C1[];
static VTBL_ENTRY alt_thunk_names152[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20278C1D0Ev,_ZTv0_n12_N8S20278C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20278C1D0Ev,_ZThn44_N8S20278C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20278C1D1Ev,_ZTv0_n12_N8S20278C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20278C1D1Ev,_ZThn44_N8S20278C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20278C1 = {  "S20278C1", // class name
  bases_S20278C1, 1,
  &(vtc_S20278C1[0]), // expected_vtbl_contents
  &(vtt_S20278C1[0]), // expected_vtt_contents
  ABISELECT(64,56), // object size
  NSPAIRA(_ZTI8S20278C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20278C1),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20278C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names152,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20214C2  {
  long double s20214c2f0;
  void *s20214c2f1[2];
  virtual  ~S20214C2(); // _ZN8S20214C2D1Ev
  virtual void  v4(); // _ZN8S20214C22v4Ev
  virtual void  v5(); // _ZN8S20214C22v5Ev
  virtual void  v6(); // _ZN8S20214C22v6Ev
  S20214C2(); // tgen
};
//SIG(-1 S20214C2) C1{ vd v1 v2 v3 FD Fp[2]}


 S20214C2 ::~S20214C2(){ note_dtor("S20214C2", this);}
void  S20214C2 ::v4(){vfunc_called(this, "_ZN8S20214C22v4Ev");}
void  S20214C2 ::v5(){vfunc_called(this, "_ZN8S20214C22v5Ev");}
void  S20214C2 ::v6(){vfunc_called(this, "_ZN8S20214C22v6Ev");}
S20214C2 ::S20214C2(){ note_ctor("S20214C2", this);} // tgen

static void Test_S20214C2()
{
  extern Class_Descriptor cd_S20214C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20214C2, buf);
    S20214C2 *dp, &lv = *(dp=new (buf) S20214C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20214C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20214C2)");
    check_field_offset(lv, s20214c2f0, ABISELECT(16,4), "S20214C2.s20214c2f0");
    check_field_offset(lv, s20214c2f1, ABISELECT(32,16), "S20214C2.s20214c2f1");
    test_class_info(&lv, &cd_S20214C2);
    dp->~S20214C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20214C2(Test_S20214C2, "S20214C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20214C2C1Ev();
extern void _ZN8S20214C2D1Ev();
Name_Map name_map_S20214C2[] = {
  NSPAIR(_ZN8S20214C2C1Ev),
  NSPAIR(_ZN8S20214C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20214C2[];
extern void _ZN8S20214C2D1Ev();
extern void _ZN8S20214C2D0Ev();
extern void _ZN8S20214C22v4Ev();
extern void _ZN8S20214C22v5Ev();
extern void _ZN8S20214C22v6Ev();
static  VTBL_ENTRY vtc_S20214C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20214C2[0]),
  (VTBL_ENTRY)&_ZN8S20214C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20214C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20214C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20214C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20214C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20214C2[];
extern  VTBL_ENTRY _ZTV8S20214C2[];
Class_Descriptor cd_S20214C2 = {  "S20214C2", // class name
  0,0,//no base classes
  &(vtc_S20214C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20214C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20214C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20214C1  : virtual S20214C2 {
  virtual  ~S20214C1(); // _ZN8S20214C1D2Ev
  virtual void  v1(); // _ZN8S20214C12v1Ev
  virtual void  v2(); // _ZN8S20214C12v2Ev
  virtual void  v3(); // _ZN8S20214C12v3Ev
  S20214C1(); // tgen
};
//SIG(1 S20214C1) C1{ VBC2{ vd v4 v5 v6 FD Fp[2]} vd v1 v2 v3}


 S20214C1 ::~S20214C1(){ note_dtor("S20214C1", this);}
void  S20214C1 ::v1(){vfunc_called(this, "_ZN8S20214C12v1Ev");}
void  S20214C1 ::v2(){vfunc_called(this, "_ZN8S20214C12v2Ev");}
void  S20214C1 ::v3(){vfunc_called(this, "_ZN8S20214C12v3Ev");}
S20214C1 ::S20214C1(){ note_ctor("S20214C1", this);} // tgen

static void Test_S20214C1()
{
  extern Class_Descriptor cd_S20214C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,8)];
    init_test(&cd_S20214C1, buf);
    S20214C1 *dp, &lv = *(dp=new (buf) S20214C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,28), "sizeof(S20214C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20214C1)");
    check_base_class_offset(lv, (S20214C2*), ABISELECT(16,4), "S20214C1");
    test_class_info(&lv, &cd_S20214C1);
    dp->~S20214C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20214C1(Test_S20214C1, "S20214C1", ABISELECT(64,28));

#else // __cplusplus

extern void _ZN8S20214C1C1Ev();
extern void _ZN8S20214C1D2Ev();
Name_Map name_map_S20214C1[] = {
  NSPAIR(_ZN8S20214C1C1Ev),
  NSPAIR(_ZN8S20214C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20214C2;
extern VTBL_ENTRY _ZTI8S20214C2[];
extern  VTBL_ENTRY _ZTV8S20214C2[];
static Base_Class bases_S20214C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20214C2,    ABISELECT(16,4), //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20214C1[];
extern void _ZN8S20214C1D1Ev();
extern void _ZN8S20214C1D0Ev();
extern void _ZN8S20214C12v1Ev();
extern void _ZN8S20214C12v2Ev();
extern void _ZN8S20214C12v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S20214C1D1Ev,_ZTv0_n12_N8S20214C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20214C1D1Ev,_ZThn4_N8S20214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20214C1D0Ev,_ZTv0_n12_N8S20214C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20214C1D0Ev,_ZThn4_N8S20214C1D0Ev)() __attribute__((weak));
extern void _ZN8S20214C22v4Ev();
extern void _ZN8S20214C22v5Ev();
extern void _ZN8S20214C22v6Ev();
static  VTBL_ENTRY vtc_S20214C1[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20214C1[0]),
  (VTBL_ENTRY)&_ZN8S20214C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20214C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20214C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20214C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20214C12v3Ev,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20214C1D1Ev,_ZTv0_n12_N8S20214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20214C1D0Ev,_ZTv0_n12_N8S20214C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20214C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20214C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20214C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S20214C1[];
static  VTT_ENTRY vtt_S20214C1[] = {
  {&(_ZTV8S20214C1[3]),  3,19},
  {&(_ZTV8S20214C1[14]),  14,19},
};
extern VTBL_ENTRY _ZTI8S20214C1[];
extern  VTBL_ENTRY _ZTV8S20214C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20214C1[];
static VTBL_ENTRY alt_thunk_names153[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20214C1D0Ev,_ZTv0_n12_N8S20214C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20214C1D0Ev,_ZThn4_N8S20214C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20214C1D1Ev,_ZTv0_n12_N8S20214C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20214C1D1Ev,_ZThn4_N8S20214C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20214C1 = {  "S20214C1", // class name
  bases_S20214C1, 1,
  &(vtc_S20214C1[0]), // expected_vtbl_contents
  &(vtt_S20214C1[0]), // expected_vtt_contents
  ABISELECT(64,28), // object size
  NSPAIRA(_ZTI8S20214C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20214C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20214C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names153,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14330C1  {
  void *s14330c1f0;
  int s14330c1f1[3];
  long s14330c1f2;
  int s14330c1f3;
  ::S2123C20_nt s14330c1f4;
  ::S2123C20_nt s14330c1f5;
};
//SIG(1 S14330C1) C1{ Fp Fi[3] Fl Fi FC2{ m Fp Fi FC3{ m}} FC2}



static void Test_S14330C1()
{
  {
    init_simple_test("S14330C1");
    S14330C1 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S14330C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14330C1)");
    check_field_offset(lv, s14330c1f0, 0, "S14330C1.s14330c1f0");
    check_field_offset(lv, s14330c1f1, ABISELECT(8,4), "S14330C1.s14330c1f1");
    check_field_offset(lv, s14330c1f2, ABISELECT(24,16), "S14330C1.s14330c1f2");
    check_field_offset(lv, s14330c1f3, ABISELECT(32,20), "S14330C1.s14330c1f3");
    check_field_offset(lv, s14330c1f4, ABISELECT(40,24), "S14330C1.s14330c1f4");
    check_field_offset(lv, s14330c1f5, ABISELECT(56,36), "S14330C1.s14330c1f5");
  }
}
static Arrange_To_Call_Me vS14330C1(Test_S14330C1, "S14330C1", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16964C1  {
  int s16964c1f0;
  void *s16964c1f1[2];
  int s16964c1f2;
  ::S708C51 s16964c1f3;
  int s16964c1f4;
  void  mf16964c1(); // _ZN8S16964C19mf16964c1Ev
};
//SIG(1 S16964C1) C1{ m Fi Fp[2] Fi FC2{ BC3{ m Fp Fi[2]}} Fi}


void  S16964C1 ::mf16964c1(){}

static void Test_S16964C1()
{
  {
    init_simple_test("S16964C1");
    S16964C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S16964C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16964C1)");
    check_field_offset(lv, s16964c1f0, 0, "S16964C1.s16964c1f0");
    check_field_offset(lv, s16964c1f1, ABISELECT(8,4), "S16964C1.s16964c1f1");
    check_field_offset(lv, s16964c1f2, ABISELECT(24,12), "S16964C1.s16964c1f2");
    check_field_offset(lv, s16964c1f3, ABISELECT(32,16), "S16964C1.s16964c1f3");
    check_field_offset(lv, s16964c1f4, ABISELECT(48,28), "S16964C1.s16964c1f4");
  }
}
static Arrange_To_Call_Me vS16964C1(Test_S16964C1, "S16964C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9454C2  {
  void *s9454c2f0;
  virtual  ~S9454C2(); // _ZN7S9454C2D1Ev
  virtual void  v3(); // _ZN7S9454C22v3Ev
  virtual void  v4(); // _ZN7S9454C22v4Ev
  virtual void  v5(); // _ZN7S9454C22v5Ev
  virtual void  v6(); // _ZN7S9454C22v6Ev
  S9454C2(); // tgen
};
//SIG(-1 S9454C2) C1{ vd v1 v2 v3 v4 Fp}


 S9454C2 ::~S9454C2(){ note_dtor("S9454C2", this);}
void  S9454C2 ::v3(){vfunc_called(this, "_ZN7S9454C22v3Ev");}
void  S9454C2 ::v4(){vfunc_called(this, "_ZN7S9454C22v4Ev");}
void  S9454C2 ::v5(){vfunc_called(this, "_ZN7S9454C22v5Ev");}
void  S9454C2 ::v6(){vfunc_called(this, "_ZN7S9454C22v6Ev");}
S9454C2 ::S9454C2(){ note_ctor("S9454C2", this);} // tgen

static void Test_S9454C2()
{
  extern Class_Descriptor cd_S9454C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9454C2, buf);
    S9454C2 *dp, &lv = *(dp=new (buf) S9454C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9454C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9454C2)");
    check_field_offset(lv, s9454c2f0, ABISELECT(8,4), "S9454C2.s9454c2f0");
    test_class_info(&lv, &cd_S9454C2);
    dp->~S9454C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9454C2(Test_S9454C2, "S9454C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9454C2C1Ev();
extern void _ZN7S9454C2D1Ev();
Name_Map name_map_S9454C2[] = {
  NSPAIR(_ZN7S9454C2C1Ev),
  NSPAIR(_ZN7S9454C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9454C2[];
extern void _ZN7S9454C2D1Ev();
extern void _ZN7S9454C2D0Ev();
extern void _ZN7S9454C22v3Ev();
extern void _ZN7S9454C22v4Ev();
extern void _ZN7S9454C22v5Ev();
extern void _ZN7S9454C22v6Ev();
static  VTBL_ENTRY vtc_S9454C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9454C2[0]),
  (VTBL_ENTRY)&_ZN7S9454C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9454C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9454C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9454C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9454C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9454C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9454C2[];
extern  VTBL_ENTRY _ZTV7S9454C2[];
Class_Descriptor cd_S9454C2 = {  "S9454C2", // class name
  0,0,//no base classes
  &(vtc_S9454C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9454C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9454C2),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  S9454C1  : S9454C2 {
  int s9454c1f0;
  char s9454c1f1;
  virtual  ~S9454C1(); // _ZN7S9454C1D1Ev
  virtual void  v1(); // _ZN7S9454C12v1Ev
  virtual void  v2(); // _ZN7S9454C12v2Ev
  S9454C1(); // tgen
};
//SIG(1 S9454C1) C1{ BC2{ vd v3 v4 v5 v6 Fp} vd v1 v2 Fi Fc}


 S9454C1 ::~S9454C1(){ note_dtor("S9454C1", this);}
void  S9454C1 ::v1(){vfunc_called(this, "_ZN7S9454C12v1Ev");}
void  S9454C1 ::v2(){vfunc_called(this, "_ZN7S9454C12v2Ev");}
S9454C1 ::S9454C1(){ note_ctor("S9454C1", this);} // tgen

static void Test_S9454C1()
{
  extern Class_Descriptor cd_S9454C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S9454C1, buf);
    S9454C1 *dp, &lv = *(dp=new (buf) S9454C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9454C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9454C1)");
    check_base_class_offset(lv, (S9454C2*), 0, "S9454C1");
    check_field_offset(lv, s9454c1f0, ABISELECT(16,8), "S9454C1.s9454c1f0");
    check_field_offset(lv, s9454c1f1, ABISELECT(20,12), "S9454C1.s9454c1f1");
    test_class_info(&lv, &cd_S9454C1);
    dp->~S9454C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9454C1(Test_S9454C1, "S9454C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S9454C1C1Ev();
extern void _ZN7S9454C1D1Ev();
Name_Map name_map_S9454C1[] = {
  NSPAIR(_ZN7S9454C1C1Ev),
  NSPAIR(_ZN7S9454C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9454C2;
extern VTBL_ENTRY _ZTI7S9454C2[];
extern  VTBL_ENTRY _ZTV7S9454C2[];
static Base_Class bases_S9454C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9454C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9454C1[];
extern void _ZN7S9454C1D1Ev();
extern void _ZN7S9454C1D0Ev();
extern void _ZN7S9454C22v3Ev();
extern void _ZN7S9454C22v4Ev();
extern void _ZN7S9454C22v5Ev();
extern void _ZN7S9454C22v6Ev();
extern void _ZN7S9454C12v1Ev();
extern void _ZN7S9454C12v2Ev();
static  VTBL_ENTRY vtc_S9454C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9454C1[0]),
  (VTBL_ENTRY)&_ZN7S9454C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9454C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9454C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9454C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9454C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9454C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9454C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9454C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9454C1[];
extern  VTBL_ENTRY _ZTV7S9454C1[];
Class_Descriptor cd_S9454C1 = {  "S9454C1", // class name
  bases_S9454C1, 1,
  &(vtc_S9454C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S9454C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9454C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14190C2  {
  void *s14190c2f0[7];
  int s14190c2f1[5];
  char s14190c2f2[16];
};
//SIG(-1 S14190C2) C1{ Fp[7] Fi[5] Fc[16]}



static void Test_S14190C2()
{
  {
    init_simple_test("S14190C2");
    S14190C2 lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S14190C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14190C2)");
    check_field_offset(lv, s14190c2f0, 0, "S14190C2.s14190c2f0");
    check_field_offset(lv, s14190c2f1, ABISELECT(56,28), "S14190C2.s14190c2f1");
    check_field_offset(lv, s14190c2f2, ABISELECT(76,48), "S14190C2.s14190c2f2");
  }
}
static Arrange_To_Call_Me vS14190C2(Test_S14190C2, "S14190C2", ABISELECT(96,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14190C1  {
  void *s14190c1f0;
  int s14190c1f1;
  ::S14190C2 s14190c1f2;
  char s14190c1f3[16];
};
//SIG(1 S14190C1) C1{ Fp Fi FC2{ Fp[7] Fi[5] Fc[16]} Fc[16]}



static void Test_S14190C1()
{
  {
    init_simple_test("S14190C1");
    S14190C1 lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S14190C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14190C1)");
    check_field_offset(lv, s14190c1f0, 0, "S14190C1.s14190c1f0");
    check_field_offset(lv, s14190c1f1, ABISELECT(8,4), "S14190C1.s14190c1f1");
    check_field_offset(lv, s14190c1f2, ABISELECT(16,8), "S14190C1.s14190c1f2");
    check_field_offset(lv, s14190c1f3, ABISELECT(112,72), "S14190C1.s14190c1f3");
  }
}
static Arrange_To_Call_Me vS14190C1(Test_S14190C1, "S14190C1", ABISELECT(128,88));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12470C1  {
  int s12470c1f0;
  ::S10155C9 s12470c1f1;
};
//SIG(1 S12470C1) C1{ Fi FC2{ Fi[4] Fc[64] Fi[2] Fc[8] Fi}}



static void Test_S12470C1()
{
  {
    init_simple_test("S12470C1");
    S12470C1 lv;
    check2(sizeof(lv), 104, "sizeof(S12470C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12470C1)");
    check_field_offset(lv, s12470c1f0, 0, "S12470C1.s12470c1f0");
    check_field_offset(lv, s12470c1f1, 4, "S12470C1.s12470c1f1");
  }
}
static Arrange_To_Call_Me vS12470C1(Test_S12470C1, "S12470C1", 104);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6413C2  {
  void *s6413c2f0;
  int s6413c2f1;
  virtual  ~S6413C2(); // _ZN7S6413C2D1Ev
  virtual void  v1(); // _ZN7S6413C22v1Ev
  virtual void  v2(); // _ZN7S6413C22v2Ev
  virtual void  v3(); // _ZN7S6413C22v3Ev
  S6413C2(); // tgen
};
//SIG(-1 S6413C2) C1{ vd v1 v2 v3 Fp Fi}


 S6413C2 ::~S6413C2(){ note_dtor("S6413C2", this);}
void  S6413C2 ::v1(){vfunc_called(this, "_ZN7S6413C22v1Ev");}
void  S6413C2 ::v2(){vfunc_called(this, "_ZN7S6413C22v2Ev");}
void  S6413C2 ::v3(){vfunc_called(this, "_ZN7S6413C22v3Ev");}
S6413C2 ::S6413C2(){ note_ctor("S6413C2", this);} // tgen

static void Test_S6413C2()
{
  extern Class_Descriptor cd_S6413C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6413C2, buf);
    S6413C2 *dp, &lv = *(dp=new (buf) S6413C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6413C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6413C2)");
    check_field_offset(lv, s6413c2f0, ABISELECT(8,4), "S6413C2.s6413c2f0");
    check_field_offset(lv, s6413c2f1, ABISELECT(16,8), "S6413C2.s6413c2f1");
    test_class_info(&lv, &cd_S6413C2);
    dp->~S6413C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6413C2(Test_S6413C2, "S6413C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6413C2C1Ev();
extern void _ZN7S6413C2D1Ev();
Name_Map name_map_S6413C2[] = {
  NSPAIR(_ZN7S6413C2C1Ev),
  NSPAIR(_ZN7S6413C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6413C2[];
extern void _ZN7S6413C2D1Ev();
extern void _ZN7S6413C2D0Ev();
extern void _ZN7S6413C22v1Ev();
extern void _ZN7S6413C22v2Ev();
extern void _ZN7S6413C22v3Ev();
static  VTBL_ENTRY vtc_S6413C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6413C2[0]),
  (VTBL_ENTRY)&_ZN7S6413C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6413C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6413C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6413C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6413C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6413C2[];
extern  VTBL_ENTRY _ZTV7S6413C2[];
Class_Descriptor cd_S6413C2 = {  "S6413C2", // class name
  0,0,//no base classes
  &(vtc_S6413C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6413C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6413C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6413C1  : S6413C2 {
  ::S3681C6_nt s6413c1f0;
  ~S6413C1(); // tgen
  S6413C1(); // tgen
};
//SIG(1 S6413C1) C1{ BC2{ vd v1 v2 v3 Fp Fi} FC3{ m Fp[2]}}


S6413C1 ::~S6413C1(){ note_dtor("S6413C1", this);} // tgen
S6413C1 ::S6413C1(){ note_ctor("S6413C1", this);} // tgen

static void Test_S6413C1()
{
  extern Class_Descriptor cd_S6413C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6413C1, buf);
    S6413C1 *dp, &lv = *(dp=new (buf) S6413C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6413C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6413C1)");
    check_base_class_offset(lv, (S6413C2*), 0, "S6413C1");
    check_field_offset(lv, s6413c1f0, ABISELECT(24,12), "S6413C1.s6413c1f0");
    test_class_info(&lv, &cd_S6413C1);
    dp->~S6413C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6413C1(Test_S6413C1, "S6413C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6413C1C1Ev();
extern void _ZN7S6413C1D1Ev();
Name_Map name_map_S6413C1[] = {
  NSPAIR(_ZN7S6413C1C1Ev),
  NSPAIR(_ZN7S6413C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6413C2;
extern VTBL_ENTRY _ZTI7S6413C2[];
extern  VTBL_ENTRY _ZTV7S6413C2[];
static Base_Class bases_S6413C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6413C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6413C1[];
extern void _ZN7S6413C1D1Ev();
extern void _ZN7S6413C1D0Ev();
extern void _ZN7S6413C22v1Ev();
extern void _ZN7S6413C22v2Ev();
extern void _ZN7S6413C22v3Ev();
static  VTBL_ENTRY vtc_S6413C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6413C1[0]),
  (VTBL_ENTRY)&_ZN7S6413C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6413C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6413C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6413C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6413C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6413C1[];
extern  VTBL_ENTRY _ZTV7S6413C1[];
Class_Descriptor cd_S6413C1 = {  "S6413C1", // class name
  bases_S6413C1, 1,
  &(vtc_S6413C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6413C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6413C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9742C2  {
  void *s9742c2f0;
  int s9742c2f1;
  virtual  ~S9742C2(); // _ZN7S9742C2D1Ev
  virtual void  v4(); // _ZN7S9742C22v4Ev
  virtual void  v5(); // _ZN7S9742C22v5Ev
  virtual void  v6(); // _ZN7S9742C22v6Ev
  S9742C2(); // tgen
};
//SIG(-1 S9742C2) C1{ vd v1 v2 v3 Fp Fi}


 S9742C2 ::~S9742C2(){ note_dtor("S9742C2", this);}
void  S9742C2 ::v4(){vfunc_called(this, "_ZN7S9742C22v4Ev");}
void  S9742C2 ::v5(){vfunc_called(this, "_ZN7S9742C22v5Ev");}
void  S9742C2 ::v6(){vfunc_called(this, "_ZN7S9742C22v6Ev");}
S9742C2 ::S9742C2(){ note_ctor("S9742C2", this);} // tgen

static void Test_S9742C2()
{
  extern Class_Descriptor cd_S9742C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9742C2, buf);
    S9742C2 *dp, &lv = *(dp=new (buf) S9742C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9742C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9742C2)");
    check_field_offset(lv, s9742c2f0, ABISELECT(8,4), "S9742C2.s9742c2f0");
    check_field_offset(lv, s9742c2f1, ABISELECT(16,8), "S9742C2.s9742c2f1");
    test_class_info(&lv, &cd_S9742C2);
    dp->~S9742C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9742C2(Test_S9742C2, "S9742C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9742C2C1Ev();
extern void _ZN7S9742C2D1Ev();
Name_Map name_map_S9742C2[] = {
  NSPAIR(_ZN7S9742C2C1Ev),
  NSPAIR(_ZN7S9742C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9742C2[];
extern void _ZN7S9742C2D1Ev();
extern void _ZN7S9742C2D0Ev();
extern void _ZN7S9742C22v4Ev();
extern void _ZN7S9742C22v5Ev();
extern void _ZN7S9742C22v6Ev();
static  VTBL_ENTRY vtc_S9742C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9742C2[0]),
  (VTBL_ENTRY)&_ZN7S9742C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9742C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9742C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9742C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9742C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9742C2[];
extern  VTBL_ENTRY _ZTV7S9742C2[];
Class_Descriptor cd_S9742C2 = {  "S9742C2", // class name
  0,0,//no base classes
  &(vtc_S9742C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9742C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9742C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9742C1  : S9742C2 {
  virtual  ~S9742C1(); // _ZN7S9742C1D1Ev
  virtual void  v1(); // _ZN7S9742C12v1Ev
  virtual void  v2(); // _ZN7S9742C12v2Ev
  virtual void  v3(); // _ZN7S9742C12v3Ev
  S9742C1(); // tgen
};
//SIG(1 S9742C1) C1{ BC2{ vd v4 v5 v6 Fp Fi} vd v1 v2 v3}


 S9742C1 ::~S9742C1(){ note_dtor("S9742C1", this);}
void  S9742C1 ::v1(){vfunc_called(this, "_ZN7S9742C12v1Ev");}
void  S9742C1 ::v2(){vfunc_called(this, "_ZN7S9742C12v2Ev");}
void  S9742C1 ::v3(){vfunc_called(this, "_ZN7S9742C12v3Ev");}
S9742C1 ::S9742C1(){ note_ctor("S9742C1", this);} // tgen

static void Test_S9742C1()
{
  extern Class_Descriptor cd_S9742C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9742C1, buf);
    S9742C1 *dp, &lv = *(dp=new (buf) S9742C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9742C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9742C1)");
    check_base_class_offset(lv, (S9742C2*), 0, "S9742C1");
    test_class_info(&lv, &cd_S9742C1);
    dp->~S9742C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9742C1(Test_S9742C1, "S9742C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9742C1C1Ev();
extern void _ZN7S9742C1D1Ev();
Name_Map name_map_S9742C1[] = {
  NSPAIR(_ZN7S9742C1C1Ev),
  NSPAIR(_ZN7S9742C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9742C2;
extern VTBL_ENTRY _ZTI7S9742C2[];
extern  VTBL_ENTRY _ZTV7S9742C2[];
static Base_Class bases_S9742C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9742C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9742C1[];
extern void _ZN7S9742C1D1Ev();
extern void _ZN7S9742C1D0Ev();
extern void _ZN7S9742C22v4Ev();
extern void _ZN7S9742C22v5Ev();
extern void _ZN7S9742C22v6Ev();
extern void _ZN7S9742C12v1Ev();
extern void _ZN7S9742C12v2Ev();
extern void _ZN7S9742C12v3Ev();
static  VTBL_ENTRY vtc_S9742C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9742C1[0]),
  (VTBL_ENTRY)&_ZN7S9742C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9742C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9742C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9742C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9742C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9742C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9742C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9742C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9742C1[];
extern  VTBL_ENTRY _ZTV7S9742C1[];
Class_Descriptor cd_S9742C1 = {  "S9742C1", // class name
  bases_S9742C1, 1,
  &(vtc_S9742C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9742C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9742C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19640C2  {
  char s19640c2f0;
  long double s19640c2f1[2];
  char s19640c2f2;
  int s19640c2f3;
  void  mf19640c2(); // _ZN8S19640C29mf19640c2Ev
};
//SIG(-1 S19640C2) C1{ m Fc FD[2] Fc Fi}


void  S19640C2 ::mf19640c2(){}

static void Test_S19640C2()
{
  {
    init_simple_test("S19640C2");
    S19640C2 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19640C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19640C2)");
    check_field_offset(lv, s19640c2f0, 0, "S19640C2.s19640c2f0");
    check_field_offset(lv, s19640c2f1, ABISELECT(16,4), "S19640C2.s19640c2f1");
    check_field_offset(lv, s19640c2f2, ABISELECT(48,28), "S19640C2.s19640c2f2");
    check_field_offset(lv, s19640c2f3, ABISELECT(52,32), "S19640C2.s19640c2f3");
  }
}
static Arrange_To_Call_Me vS19640C2(Test_S19640C2, "S19640C2", ABISELECT(64,36));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19640C2[];
VTBL_ENTRY *P__ZTI8S19640C2 = _ZTI8S19640C2; 
Class_Descriptor cd_S19640C2 = {  "S19640C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19640C2),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  S19640C1  : virtual S19640C2 {
  void *s19640c1f0[10];
  ::S19640C2 s19640c1f1;
  ~S19640C1(); // tgen
  S19640C1(); // tgen
};
//SIG(1 S19640C1) C1{ VBC2{ m Fc FD[2] Fc Fi} Fp[10] FC2}


S19640C1 ::~S19640C1(){ note_dtor("S19640C1", this);} // tgen
S19640C1 ::S19640C1(){ note_ctor("S19640C1", this);} // tgen

static void Test_S19640C1()
{
  extern Class_Descriptor cd_S19640C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,30)];
    init_test(&cd_S19640C1, buf);
    S19640C1 *dp, &lv = *(dp=new (buf) S19640C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,116), "sizeof(S19640C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19640C1)");
    check_base_class_offset(lv, (S19640C2*), ABISELECT(160,80), "S19640C1");
    check_field_offset(lv, s19640c1f0, ABISELECT(8,4), "S19640C1.s19640c1f0");
    check_field_offset(lv, s19640c1f1, ABISELECT(96,44), "S19640C1.s19640c1f1");
    test_class_info(&lv, &cd_S19640C1);
    dp->~S19640C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19640C1(Test_S19640C1, "S19640C1", ABISELECT(224,116));

#else // __cplusplus

extern void _ZN8S19640C1C1Ev();
extern void _ZN8S19640C1D1Ev();
Name_Map name_map_S19640C1[] = {
  NSPAIR(_ZN8S19640C1C1Ev),
  NSPAIR(_ZN8S19640C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19640C2;
extern VTBL_ENTRY _ZTI8S19640C2[];
static Base_Class bases_S19640C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19640C2,    ABISELECT(160,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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19640C1[];
static  VTBL_ENTRY vtc_S19640C1[] = {
  ABISELECT(160,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19640C1[0]),
};
extern VTBL_ENTRY _ZTV8S19640C1[];
static  VTT_ENTRY vtt_S19640C1[] = {
  {&(_ZTV8S19640C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19640C1[];
extern  VTBL_ENTRY _ZTV8S19640C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19640C1[];
Class_Descriptor cd_S19640C1 = {  "S19640C1", // class name
  bases_S19640C1, 1,
  &(vtc_S19640C1[0]), // expected_vtbl_contents
  &(vtt_S19640C1[0]), // expected_vtt_contents
  ABISELECT(224,116), // object size
  NSPAIRA(_ZTI8S19640C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19640C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19640C1),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  S11064C1  {
  ::S15399C12_nt s11064c1f0;
  ::S15399C12_nt s11064c1f1;
  int s11064c1f2[2];
};
//SIG(1 S11064C1) C1{ FC2{ BC3{ m Fc[16]}} FC2 Fi[2]}



static void Test_S11064C1()
{
  {
    init_simple_test("S11064C1");
    S11064C1 lv;
    check2(sizeof(lv), 40, "sizeof(S11064C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11064C1)");
    check_field_offset(lv, s11064c1f0, 0, "S11064C1.s11064c1f0");
    check_field_offset(lv, s11064c1f1, 16, "S11064C1.s11064c1f1");
    check_field_offset(lv, s11064c1f2, 32, "S11064C1.s11064c1f2");
  }
}
static Arrange_To_Call_Me vS11064C1(Test_S11064C1, "S11064C1", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9064C2  {
  virtual  ~S9064C2(); // _ZN7S9064C2D1Ev
  virtual void  v2(); // _ZN7S9064C22v2Ev
  S9064C2(); // tgen
};
//SIG(-1 S9064C2) C1{ vd v1}


 S9064C2 ::~S9064C2(){ note_dtor("S9064C2", this);}
void  S9064C2 ::v2(){vfunc_called(this, "_ZN7S9064C22v2Ev");}
S9064C2 ::S9064C2(){ note_ctor("S9064C2", this);} // tgen

static void Test_S9064C2()
{
  extern Class_Descriptor cd_S9064C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9064C2, buf);
    S9064C2 *dp, &lv = *(dp=new (buf) S9064C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9064C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9064C2)");
    test_class_info(&lv, &cd_S9064C2);
    dp->~S9064C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9064C2(Test_S9064C2, "S9064C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9064C2C1Ev();
extern void _ZN7S9064C2D1Ev();
Name_Map name_map_S9064C2[] = {
  NSPAIR(_ZN7S9064C2C1Ev),
  NSPAIR(_ZN7S9064C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9064C2[];
extern void _ZN7S9064C2D1Ev();
extern void _ZN7S9064C2D0Ev();
extern void _ZN7S9064C22v2Ev();
static  VTBL_ENTRY vtc_S9064C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9064C2[0]),
  (VTBL_ENTRY)&_ZN7S9064C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9064C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9064C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9064C2[];
extern  VTBL_ENTRY _ZTV7S9064C2[];
Class_Descriptor cd_S9064C2 = {  "S9064C2", // class name
  0,0,//no base classes
  &(vtc_S9064C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9064C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9064C2),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  S9064C1  : S9064C2 {
  ::S16336C3_nt s9064c1f0;
  virtual  ~S9064C1(); // _ZN7S9064C1D1Ev
  virtual void  v1(); // _ZN7S9064C12v1Ev
  S9064C1(); // tgen
};
//SIG(1 S9064C1) C1{ BC2{ vd v2} vd v1 FC3{ m Fp Fi[2]}}


 S9064C1 ::~S9064C1(){ note_dtor("S9064C1", this);}
void  S9064C1 ::v1(){vfunc_called(this, "_ZN7S9064C12v1Ev");}
S9064C1 ::S9064C1(){ note_ctor("S9064C1", this);} // tgen

static void Test_S9064C1()
{
  extern Class_Descriptor cd_S9064C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S9064C1, buf);
    S9064C1 *dp, &lv = *(dp=new (buf) S9064C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9064C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9064C1)");
    check_base_class_offset(lv, (S9064C2*), 0, "S9064C1");
    check_field_offset(lv, s9064c1f0, ABISELECT(8,4), "S9064C1.s9064c1f0");
    test_class_info(&lv, &cd_S9064C1);
    dp->~S9064C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9064C1(Test_S9064C1, "S9064C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S9064C1C1Ev();
extern void _ZN7S9064C1D1Ev();
Name_Map name_map_S9064C1[] = {
  NSPAIR(_ZN7S9064C1C1Ev),
  NSPAIR(_ZN7S9064C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9064C2;
extern VTBL_ENTRY _ZTI7S9064C2[];
extern  VTBL_ENTRY _ZTV7S9064C2[];
static Base_Class bases_S9064C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9064C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9064C1[];
extern void _ZN7S9064C1D1Ev();
extern void _ZN7S9064C1D0Ev();
extern void _ZN7S9064C22v2Ev();
extern void _ZN7S9064C12v1Ev();
static  VTBL_ENTRY vtc_S9064C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9064C1[0]),
  (VTBL_ENTRY)&_ZN7S9064C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9064C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9064C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9064C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9064C1[];
extern  VTBL_ENTRY _ZTV7S9064C1[];
Class_Descriptor cd_S9064C1 = {  "S9064C1", // class name
  bases_S9064C1, 1,
  &(vtc_S9064C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S9064C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9064C1),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  S16033C1  {
  ::S708C29_nt s16033c1f0;
  ::S708C29_nt s16033c1f1;
  ::S708C29_nt s16033c1f2;
  ::S708C29_nt s16033c1f3;
  int s16033c1f4[3];
  void  mf16033c1(); // _ZN8S16033C19mf16033c1Ev
};
//SIG(1 S16033C1) C1{ m FC2{ m Fi[3]} FC2 FC2 FC2 Fi[3]}


void  S16033C1 ::mf16033c1(){}

static void Test_S16033C1()
{
  {
    init_simple_test("S16033C1");
    S16033C1 lv;
    check2(sizeof(lv), 60, "sizeof(S16033C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16033C1)");
    check_field_offset(lv, s16033c1f0, 0, "S16033C1.s16033c1f0");
    check_field_offset(lv, s16033c1f1, 12, "S16033C1.s16033c1f1");
    check_field_offset(lv, s16033c1f2, 24, "S16033C1.s16033c1f2");
    check_field_offset(lv, s16033c1f3, 36, "S16033C1.s16033c1f3");
    check_field_offset(lv, s16033c1f4, 48, "S16033C1.s16033c1f4");
  }
}
static Arrange_To_Call_Me vS16033C1(Test_S16033C1, "S16033C1", 60);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9781C2  {
  void *s9781c2f0;
  virtual  ~S9781C2(); // _ZN7S9781C2D1Ev
  virtual void  v4(); // _ZN7S9781C22v4Ev
  virtual void  v5(); // _ZN7S9781C22v5Ev
  virtual void  v6(); // _ZN7S9781C22v6Ev
  virtual void  v7(); // _ZN7S9781C22v7Ev
  S9781C2(); // tgen
};
//SIG(-1 S9781C2) C1{ vd v1 v2 v3 v4 Fp}


 S9781C2 ::~S9781C2(){ note_dtor("S9781C2", this);}
void  S9781C2 ::v4(){vfunc_called(this, "_ZN7S9781C22v4Ev");}
void  S9781C2 ::v5(){vfunc_called(this, "_ZN7S9781C22v5Ev");}
void  S9781C2 ::v6(){vfunc_called(this, "_ZN7S9781C22v6Ev");}
void  S9781C2 ::v7(){vfunc_called(this, "_ZN7S9781C22v7Ev");}
S9781C2 ::S9781C2(){ note_ctor("S9781C2", this);} // tgen

static void Test_S9781C2()
{
  extern Class_Descriptor cd_S9781C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9781C2, buf);
    S9781C2 *dp, &lv = *(dp=new (buf) S9781C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9781C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9781C2)");
    check_field_offset(lv, s9781c2f0, ABISELECT(8,4), "S9781C2.s9781c2f0");
    test_class_info(&lv, &cd_S9781C2);
    dp->~S9781C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9781C2(Test_S9781C2, "S9781C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9781C2C1Ev();
extern void _ZN7S9781C2D1Ev();
Name_Map name_map_S9781C2[] = {
  NSPAIR(_ZN7S9781C2C1Ev),
  NSPAIR(_ZN7S9781C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9781C2[];
extern void _ZN7S9781C2D1Ev();
extern void _ZN7S9781C2D0Ev();
extern void _ZN7S9781C22v4Ev();
extern void _ZN7S9781C22v5Ev();
extern void _ZN7S9781C22v6Ev();
extern void _ZN7S9781C22v7Ev();
static  VTBL_ENTRY vtc_S9781C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9781C2[0]),
  (VTBL_ENTRY)&_ZN7S9781C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9781C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9781C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9781C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9781C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9781C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9781C2[];
extern  VTBL_ENTRY _ZTV7S9781C2[];
Class_Descriptor cd_S9781C2 = {  "S9781C2", // class name
  0,0,//no base classes
  &(vtc_S9781C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9781C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9781C2),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  S9781C1  : S9781C2 {
  virtual void  v1(); // _ZN7S9781C12v1Ev
  virtual void  v2(); // _ZN7S9781C12v2Ev
  virtual void  v3(); // _ZN7S9781C12v3Ev
  ~S9781C1(); // tgen
  S9781C1(); // tgen
};
//SIG(1 S9781C1) C1{ BC2{ vd v4 v5 v6 v7 Fp} v1 v2 v3}


void  S9781C1 ::v1(){vfunc_called(this, "_ZN7S9781C12v1Ev");}
void  S9781C1 ::v2(){vfunc_called(this, "_ZN7S9781C12v2Ev");}
void  S9781C1 ::v3(){vfunc_called(this, "_ZN7S9781C12v3Ev");}
S9781C1 ::~S9781C1(){ note_dtor("S9781C1", this);} // tgen
S9781C1 ::S9781C1(){ note_ctor("S9781C1", this);} // tgen

static void Test_S9781C1()
{
  extern Class_Descriptor cd_S9781C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9781C1, buf);
    S9781C1 *dp, &lv = *(dp=new (buf) S9781C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9781C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9781C1)");
    check_base_class_offset(lv, (S9781C2*), 0, "S9781C1");
    test_class_info(&lv, &cd_S9781C1);
    dp->~S9781C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9781C1(Test_S9781C1, "S9781C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9781C1C1Ev();
extern void _ZN7S9781C1D1Ev();
Name_Map name_map_S9781C1[] = {
  NSPAIR(_ZN7S9781C1C1Ev),
  NSPAIR(_ZN7S9781C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9781C2;
extern VTBL_ENTRY _ZTI7S9781C2[];
extern  VTBL_ENTRY _ZTV7S9781C2[];
static Base_Class bases_S9781C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9781C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9781C1[];
extern void _ZN7S9781C1D1Ev();
extern void _ZN7S9781C1D0Ev();
extern void _ZN7S9781C22v4Ev();
extern void _ZN7S9781C22v5Ev();
extern void _ZN7S9781C22v6Ev();
extern void _ZN7S9781C22v7Ev();
extern void _ZN7S9781C12v1Ev();
extern void _ZN7S9781C12v2Ev();
extern void _ZN7S9781C12v3Ev();
static  VTBL_ENTRY vtc_S9781C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9781C1[0]),
  (VTBL_ENTRY)&_ZN7S9781C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9781C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9781C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9781C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9781C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9781C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9781C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9781C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9781C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9781C1[];
extern  VTBL_ENTRY _ZTV7S9781C1[];
Class_Descriptor cd_S9781C1 = {  "S9781C1", // class name
  bases_S9781C1, 1,
  &(vtc_S9781C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9781C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9781C1),11, //virtual function table var
  2, // 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  S9452C2  {
  void *s9452c2f0;
  virtual  ~S9452C2(); // _ZN7S9452C2D1Ev
  virtual void  v3(); // _ZN7S9452C22v3Ev
  virtual void  v4(); // _ZN7S9452C22v4Ev
  virtual void  v5(); // _ZN7S9452C22v5Ev
  virtual void  v6(); // _ZN7S9452C22v6Ev
  S9452C2(); // tgen
};
//SIG(-1 S9452C2) C1{ vd v1 v2 v3 v4 Fp}


 S9452C2 ::~S9452C2(){ note_dtor("S9452C2", this);}
void  S9452C2 ::v3(){vfunc_called(this, "_ZN7S9452C22v3Ev");}
void  S9452C2 ::v4(){vfunc_called(this, "_ZN7S9452C22v4Ev");}
void  S9452C2 ::v5(){vfunc_called(this, "_ZN7S9452C22v5Ev");}
void  S9452C2 ::v6(){vfunc_called(this, "_ZN7S9452C22v6Ev");}
S9452C2 ::S9452C2(){ note_ctor("S9452C2", this);} // tgen

static void Test_S9452C2()
{
  extern Class_Descriptor cd_S9452C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9452C2, buf);
    S9452C2 *dp, &lv = *(dp=new (buf) S9452C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9452C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9452C2)");
    check_field_offset(lv, s9452c2f0, ABISELECT(8,4), "S9452C2.s9452c2f0");
    test_class_info(&lv, &cd_S9452C2);
    dp->~S9452C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9452C2(Test_S9452C2, "S9452C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9452C2C1Ev();
extern void _ZN7S9452C2D1Ev();
Name_Map name_map_S9452C2[] = {
  NSPAIR(_ZN7S9452C2C1Ev),
  NSPAIR(_ZN7S9452C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9452C2[];
extern void _ZN7S9452C2D1Ev();
extern void _ZN7S9452C2D0Ev();
extern void _ZN7S9452C22v3Ev();
extern void _ZN7S9452C22v4Ev();
extern void _ZN7S9452C22v5Ev();
extern void _ZN7S9452C22v6Ev();
static  VTBL_ENTRY vtc_S9452C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9452C2[0]),
  (VTBL_ENTRY)&_ZN7S9452C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9452C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9452C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9452C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9452C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9452C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9452C2[];
extern  VTBL_ENTRY _ZTV7S9452C2[];
Class_Descriptor cd_S9452C2 = {  "S9452C2", // class name
  0,0,//no base classes
  &(vtc_S9452C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9452C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9452C2),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  S9452C1  : S9452C2 {
  void *s9452c1f0;
  virtual void  v1(); // _ZN7S9452C12v1Ev
  virtual void  v2(); // _ZN7S9452C12v2Ev
  ~S9452C1(); // tgen
  S9452C1(); // tgen
};
//SIG(1 S9452C1) C1{ BC2{ vd v3 v4 v5 v6 Fp} v1 v2 Fp}


void  S9452C1 ::v1(){vfunc_called(this, "_ZN7S9452C12v1Ev");}
void  S9452C1 ::v2(){vfunc_called(this, "_ZN7S9452C12v2Ev");}
S9452C1 ::~S9452C1(){ note_dtor("S9452C1", this);} // tgen
S9452C1 ::S9452C1(){ note_ctor("S9452C1", this);} // tgen

static void Test_S9452C1()
{
  extern Class_Descriptor cd_S9452C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9452C1, buf);
    S9452C1 *dp, &lv = *(dp=new (buf) S9452C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9452C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9452C1)");
    check_base_class_offset(lv, (S9452C2*), 0, "S9452C1");
    check_field_offset(lv, s9452c1f0, ABISELECT(16,8), "S9452C1.s9452c1f0");
    test_class_info(&lv, &cd_S9452C1);
    dp->~S9452C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9452C1(Test_S9452C1, "S9452C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9452C1C1Ev();
extern void _ZN7S9452C1D1Ev();
Name_Map name_map_S9452C1[] = {
  NSPAIR(_ZN7S9452C1C1Ev),
  NSPAIR(_ZN7S9452C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9452C2;
extern VTBL_ENTRY _ZTI7S9452C2[];
extern  VTBL_ENTRY _ZTV7S9452C2[];
static Base_Class bases_S9452C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9452C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9452C1[];
extern void _ZN7S9452C1D1Ev();
extern void _ZN7S9452C1D0Ev();
extern void _ZN7S9452C22v3Ev();
extern void _ZN7S9452C22v4Ev();
extern void _ZN7S9452C22v5Ev();
extern void _ZN7S9452C22v6Ev();
extern void _ZN7S9452C12v1Ev();
extern void _ZN7S9452C12v2Ev();
static  VTBL_ENTRY vtc_S9452C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9452C1[0]),
  (VTBL_ENTRY)&_ZN7S9452C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9452C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9452C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9452C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9452C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9452C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9452C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9452C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9452C1[];
extern  VTBL_ENTRY _ZTV7S9452C1[];
Class_Descriptor cd_S9452C1 = {  "S9452C1", // class name
  bases_S9452C1, 1,
  &(vtc_S9452C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9452C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9452C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9423C2  {
  void *s9423c2f0;
  int s9423c2f1;
  virtual  ~S9423C2(); // _ZN7S9423C2D1Ev
  virtual void  v3(); // _ZN7S9423C22v3Ev
  virtual void  v4(); // _ZN7S9423C22v4Ev
  virtual void  v5(); // _ZN7S9423C22v5Ev
  S9423C2(); // tgen
};
//SIG(-1 S9423C2) C1{ vd v1 v2 v3 Fp Fi}


 S9423C2 ::~S9423C2(){ note_dtor("S9423C2", this);}
void  S9423C2 ::v3(){vfunc_called(this, "_ZN7S9423C22v3Ev");}
void  S9423C2 ::v4(){vfunc_called(this, "_ZN7S9423C22v4Ev");}
void  S9423C2 ::v5(){vfunc_called(this, "_ZN7S9423C22v5Ev");}
S9423C2 ::S9423C2(){ note_ctor("S9423C2", this);} // tgen

static void Test_S9423C2()
{
  extern Class_Descriptor cd_S9423C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9423C2, buf);
    S9423C2 *dp, &lv = *(dp=new (buf) S9423C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9423C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9423C2)");
    check_field_offset(lv, s9423c2f0, ABISELECT(8,4), "S9423C2.s9423c2f0");
    check_field_offset(lv, s9423c2f1, ABISELECT(16,8), "S9423C2.s9423c2f1");
    test_class_info(&lv, &cd_S9423C2);
    dp->~S9423C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9423C2(Test_S9423C2, "S9423C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9423C2C1Ev();
extern void _ZN7S9423C2D1Ev();
Name_Map name_map_S9423C2[] = {
  NSPAIR(_ZN7S9423C2C1Ev),
  NSPAIR(_ZN7S9423C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9423C2[];
extern void _ZN7S9423C2D1Ev();
extern void _ZN7S9423C2D0Ev();
extern void _ZN7S9423C22v3Ev();
extern void _ZN7S9423C22v4Ev();
extern void _ZN7S9423C22v5Ev();
static  VTBL_ENTRY vtc_S9423C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9423C2[0]),
  (VTBL_ENTRY)&_ZN7S9423C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9423C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9423C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9423C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9423C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9423C2[];
extern  VTBL_ENTRY _ZTV7S9423C2[];
Class_Descriptor cd_S9423C2 = {  "S9423C2", // class name
  0,0,//no base classes
  &(vtc_S9423C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9423C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9423C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9423C1  : S9423C2 {
  virtual  ~S9423C1(); // _ZN7S9423C1D1Ev
  virtual void  v1(); // _ZN7S9423C12v1Ev
  virtual void  v2(); // _ZN7S9423C12v2Ev
  S9423C1(); // tgen
};
//SIG(1 S9423C1) C1{ BC2{ vd v3 v4 v5 Fp Fi} vd v1 v2}


 S9423C1 ::~S9423C1(){ note_dtor("S9423C1", this);}
void  S9423C1 ::v1(){vfunc_called(this, "_ZN7S9423C12v1Ev");}
void  S9423C1 ::v2(){vfunc_called(this, "_ZN7S9423C12v2Ev");}
S9423C1 ::S9423C1(){ note_ctor("S9423C1", this);} // tgen

static void Test_S9423C1()
{
  extern Class_Descriptor cd_S9423C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9423C1, buf);
    S9423C1 *dp, &lv = *(dp=new (buf) S9423C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9423C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9423C1)");
    check_base_class_offset(lv, (S9423C2*), 0, "S9423C1");
    test_class_info(&lv, &cd_S9423C1);
    dp->~S9423C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9423C1(Test_S9423C1, "S9423C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9423C1C1Ev();
extern void _ZN7S9423C1D1Ev();
Name_Map name_map_S9423C1[] = {
  NSPAIR(_ZN7S9423C1C1Ev),
  NSPAIR(_ZN7S9423C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9423C2;
extern VTBL_ENTRY _ZTI7S9423C2[];
extern  VTBL_ENTRY _ZTV7S9423C2[];
static Base_Class bases_S9423C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9423C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9423C1[];
extern void _ZN7S9423C1D1Ev();
extern void _ZN7S9423C1D0Ev();
extern void _ZN7S9423C22v3Ev();
extern void _ZN7S9423C22v4Ev();
extern void _ZN7S9423C22v5Ev();
extern void _ZN7S9423C12v1Ev();
extern void _ZN7S9423C12v2Ev();
static  VTBL_ENTRY vtc_S9423C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9423C1[0]),
  (VTBL_ENTRY)&_ZN7S9423C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9423C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9423C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9423C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9423C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9423C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9423C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9423C1[];
extern  VTBL_ENTRY _ZTV7S9423C1[];
Class_Descriptor cd_S9423C1 = {  "S9423C1", // class name
  bases_S9423C1, 1,
  &(vtc_S9423C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9423C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9423C1),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  S6811C2  {
  int s6811c2f0;
  virtual void  v4(); // _ZN7S6811C22v4Ev
  virtual void  v5(); // _ZN7S6811C22v5Ev
  virtual void  v6(); // _ZN7S6811C22v6Ev
  virtual void  v7(); // _ZN7S6811C22v7Ev
  virtual void  v8(); // _ZN7S6811C22v8Ev
  ~S6811C2(); // tgen
  S6811C2(); // tgen
};
//SIG(-1 S6811C2) C1{ v1 v2 v3 v4 v5 Fi}


void  S6811C2 ::v4(){vfunc_called(this, "_ZN7S6811C22v4Ev");}
void  S6811C2 ::v5(){vfunc_called(this, "_ZN7S6811C22v5Ev");}
void  S6811C2 ::v6(){vfunc_called(this, "_ZN7S6811C22v6Ev");}
void  S6811C2 ::v7(){vfunc_called(this, "_ZN7S6811C22v7Ev");}
void  S6811C2 ::v8(){vfunc_called(this, "_ZN7S6811C22v8Ev");}
S6811C2 ::~S6811C2(){ note_dtor("S6811C2", this);} // tgen
S6811C2 ::S6811C2(){ note_ctor("S6811C2", this);} // tgen

static void Test_S6811C2()
{
  extern Class_Descriptor cd_S6811C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6811C2, buf);
    S6811C2 *dp, &lv = *(dp=new (buf) S6811C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6811C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6811C2)");
    check_field_offset(lv, s6811c2f0, ABISELECT(8,4), "S6811C2.s6811c2f0");
    test_class_info(&lv, &cd_S6811C2);
    dp->~S6811C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6811C2(Test_S6811C2, "S6811C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6811C2C1Ev();
extern void _ZN7S6811C2D1Ev();
Name_Map name_map_S6811C2[] = {
  NSPAIR(_ZN7S6811C2C1Ev),
  NSPAIR(_ZN7S6811C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6811C2[];
extern void _ZN7S6811C22v4Ev();
extern void _ZN7S6811C22v5Ev();
extern void _ZN7S6811C22v6Ev();
extern void _ZN7S6811C22v7Ev();
extern void _ZN7S6811C22v8Ev();
static  VTBL_ENTRY vtc_S6811C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6811C2[0]),
  (VTBL_ENTRY)&_ZN7S6811C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6811C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6811C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6811C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6811C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S6811C2[];
extern  VTBL_ENTRY _ZTV7S6811C2[];
Class_Descriptor cd_S6811C2 = {  "S6811C2", // class name
  0,0,//no base classes
  &(vtc_S6811C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6811C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6811C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6811C1  : S6811C2 {
  virtual void  v1(); // _ZN7S6811C12v1Ev
  virtual void  v2(); // _ZN7S6811C12v2Ev
  virtual void  v3(); // _ZN7S6811C12v3Ev
  ~S6811C1(); // tgen
  S6811C1(); // tgen
};
//SIG(1 S6811C1) C1{ BC2{ v4 v5 v6 v7 v8 Fi} v1 v2 v3}


void  S6811C1 ::v1(){vfunc_called(this, "_ZN7S6811C12v1Ev");}
void  S6811C1 ::v2(){vfunc_called(this, "_ZN7S6811C12v2Ev");}
void  S6811C1 ::v3(){vfunc_called(this, "_ZN7S6811C12v3Ev");}
S6811C1 ::~S6811C1(){ note_dtor("S6811C1", this);} // tgen
S6811C1 ::S6811C1(){ note_ctor("S6811C1", this);} // tgen

static void Test_S6811C1()
{
  extern Class_Descriptor cd_S6811C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6811C1, buf);
    S6811C1 *dp, &lv = *(dp=new (buf) S6811C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6811C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6811C1)");
    check_base_class_offset(lv, (S6811C2*), 0, "S6811C1");
    test_class_info(&lv, &cd_S6811C1);
    dp->~S6811C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6811C1(Test_S6811C1, "S6811C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6811C1C1Ev();
extern void _ZN7S6811C1D1Ev();
Name_Map name_map_S6811C1[] = {
  NSPAIR(_ZN7S6811C1C1Ev),
  NSPAIR(_ZN7S6811C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6811C2;
extern VTBL_ENTRY _ZTI7S6811C2[];
extern  VTBL_ENTRY _ZTV7S6811C2[];
static Base_Class bases_S6811C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6811C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6811C1[];
extern void _ZN7S6811C22v4Ev();
extern void _ZN7S6811C22v5Ev();
extern void _ZN7S6811C22v6Ev();
extern void _ZN7S6811C22v7Ev();
extern void _ZN7S6811C22v8Ev();
extern void _ZN7S6811C12v1Ev();
extern void _ZN7S6811C12v2Ev();
extern void _ZN7S6811C12v3Ev();
static  VTBL_ENTRY vtc_S6811C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6811C1[0]),
  (VTBL_ENTRY)&_ZN7S6811C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6811C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6811C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6811C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6811C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6811C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6811C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6811C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6811C1[];
extern  VTBL_ENTRY _ZTV7S6811C1[];
Class_Descriptor cd_S6811C1 = {  "S6811C1", // class name
  bases_S6811C1, 1,
  &(vtc_S6811C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6811C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6811C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5568C1  : S19640C2 {
  int s5568c1f0[2];
  virtual void  v1(); // _ZN7S5568C12v1Ev
  ~S5568C1(); // tgen
  S5568C1(); // tgen
};
//SIG(1 S5568C1) C1{ BC2{ m Fc FD[2] Fc Fi} v1 Fi[2]}


void  S5568C1 ::v1(){vfunc_called(this, "_ZN7S5568C12v1Ev");}
S5568C1 ::~S5568C1(){ note_dtor("S5568C1", this);} // tgen
S5568C1 ::S5568C1(){ note_ctor("S5568C1", this);} // tgen

static void Test_S5568C1()
{
  extern Class_Descriptor cd_S5568C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S5568C1, buf);
    S5568C1 *dp, &lv = *(dp=new (buf) S5568C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S5568C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5568C1)");
    check_base_class_offset(lv, (S19640C2*), ABISELECT(16,4), "S5568C1");
    check_field_offset(lv, s5568c1f0, ABISELECT(80,40), "S5568C1.s5568c1f0");
    test_class_info(&lv, &cd_S5568C1);
    dp->~S5568C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5568C1(Test_S5568C1, "S5568C1", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S5568C1C1Ev();
extern void _ZN7S5568C1D1Ev();
Name_Map name_map_S5568C1[] = {
  NSPAIR(_ZN7S5568C1C1Ev),
  NSPAIR(_ZN7S5568C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19640C2;
extern VTBL_ENTRY _ZTI8S19640C2[];
static Base_Class bases_S5568C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19640C2,    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 _ZTI7S5568C1[];
extern void _ZN7S5568C12v1Ev();
static  VTBL_ENTRY vtc_S5568C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5568C1[0]),
  (VTBL_ENTRY)&_ZN7S5568C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S5568C1[];
extern  VTBL_ENTRY _ZTV7S5568C1[];
Class_Descriptor cd_S5568C1 = {  "S5568C1", // class name
  bases_S5568C1, 1,
  &(vtc_S5568C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S5568C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5568C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6274C3  : virtual S2123C30 , S2123C27 , S2123C23 {
  ~S6274C3(); // tgen
  S6274C3(); // tgen
};
//SIG(-1 S6274C3) C1{ VBC2{ m} BC3{ m} BC4{ m}}


S6274C3 ::~S6274C3(){ note_dtor("S6274C3", this);} // tgen
S6274C3 ::S6274C3(){ note_ctor("S6274C3", this);} // tgen

static void Test_S6274C3()
{
  extern Class_Descriptor cd_S6274C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6274C3, buf);
    S6274C3 *dp, &lv = *(dp=new (buf) S6274C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6274C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6274C3)");
    check_base_class_offset(lv, (S2123C30*), 0, "S6274C3");
    check_base_class_offset(lv, (S2123C27*), 0, "S6274C3");
    check_base_class_offset(lv, (S2123C23*), 0, "S6274C3");
    test_class_info(&lv, &cd_S6274C3);
    dp->~S6274C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6274C3(Test_S6274C3, "S6274C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6274C3C1Ev();
extern void _ZN7S6274C3D1Ev();
Name_Map name_map_S6274C3[] = {
  NSPAIR(_ZN7S6274C3C1Ev),
  NSPAIR(_ZN7S6274C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
static Base_Class bases_S6274C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6274C3[];
static  VTBL_ENTRY vtc_S6274C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6274C3[0]),
};
extern VTBL_ENTRY _ZTV7S6274C3[];
static  VTT_ENTRY vtt_S6274C3[] = {
  {&(_ZTV7S6274C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6274C3[];
extern  VTBL_ENTRY _ZTV7S6274C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6274C3[];
Class_Descriptor cd_S6274C3 = {  "S6274C3", // class name
  bases_S6274C3, 3,
  &(vtc_S6274C3[0]), // expected_vtbl_contents
  &(vtt_S6274C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6274C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6274C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6274C3),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  S6274C1  : S2123C30 , virtual S6274C3 {
  ~S6274C1(); // tgen
  S6274C1(); // tgen
};
//SIG(1 S6274C1) C1{ BC2{ m} VBC3{ VBC2 BC4{ m} BC5{ m}}}


S6274C1 ::~S6274C1(){ note_dtor("S6274C1", this);} // tgen
S6274C1 ::S6274C1(){ note_ctor("S6274C1", this);} // tgen

static void Test_S6274C1()
{
  extern Class_Descriptor cd_S6274C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6274C1, buf);
    S6274C1 *dp, &lv = *(dp=new (buf) S6274C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6274C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6274C1)");
    /*is_ambiguous_... S6274C1::S2123C30 */ AMB_check_base_class_offset(lv, (S2123C30*), 0, "S6274C1");
    check_base_class_offset(lv, (S2123C30*)(S6274C3*), ABISELECT(8,4), "S6274C1");
    check_base_class_offset(lv, (S2123C27*)(S6274C3*), 0, "S6274C1");
    check_base_class_offset(lv, (S2123C23*)(S6274C3*), 0, "S6274C1");
    check_base_class_offset(lv, (S6274C3*), 0, "S6274C1");
    test_class_info(&lv, &cd_S6274C1);
    dp->~S6274C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6274C1(Test_S6274C1, "S6274C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6274C1C1Ev();
extern void _ZN7S6274C1D1Ev();
Name_Map name_map_S6274C1[] = {
  NSPAIR(_ZN7S6274C1C1Ev),
  NSPAIR(_ZN7S6274C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
extern Class_Descriptor cd_S2123C27;
extern VTBL_ENTRY _ZTI8S2123C27[];
extern Class_Descriptor cd_S2123C23;
extern VTBL_ENTRY _ZTI8S2123C23[];
extern Class_Descriptor cd_S6274C3;
extern VTBL_ENTRY _ZTI7S6274C3[];
extern  VTBL_ENTRY _ZTV7S6274C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6274C3[];
static Base_Class bases_S6274C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2123C30,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2123C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6274C3,    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 _ZTI7S6274C1[];
static  VTBL_ENTRY vtc_S6274C1[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6274C1[0]),
};
extern VTBL_ENTRY _ZTV7S6274C1[];
static  VTBL_ENTRY _tg__ZTV7S6274C3__7S6274C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6274C3[0]),
};
static  VTT_ENTRY vtt_S6274C1[] = {
  {&(_ZTV7S6274C1[4]),  4,4},
  {&(_ZTV7S6274C1[4]),  4,4},
  {&(_tg__ZTV7S6274C3__7S6274C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6274C1[];
extern  VTBL_ENTRY _ZTV7S6274C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6274C1[];
Class_Descriptor cd_S6274C1 = {  "S6274C1", // class name
  bases_S6274C1, 5,
  &(vtc_S6274C1[0]), // expected_vtbl_contents
  &(vtt_S6274C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6274C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6274C1),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6274C1),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  S9453C2  {
  void *s9453c2f0;
  virtual  ~S9453C2(); // _ZN7S9453C2D1Ev
  virtual void  v3(); // _ZN7S9453C22v3Ev
  virtual void  v4(); // _ZN7S9453C22v4Ev
  virtual void  v5(); // _ZN7S9453C22v5Ev
  virtual void  v6(); // _ZN7S9453C22v6Ev
  S9453C2(); // tgen
};
//SIG(-1 S9453C2) C1{ vd v1 v2 v3 v4 Fp}


 S9453C2 ::~S9453C2(){ note_dtor("S9453C2", this);}
void  S9453C2 ::v3(){vfunc_called(this, "_ZN7S9453C22v3Ev");}
void  S9453C2 ::v4(){vfunc_called(this, "_ZN7S9453C22v4Ev");}
void  S9453C2 ::v5(){vfunc_called(this, "_ZN7S9453C22v5Ev");}
void  S9453C2 ::v6(){vfunc_called(this, "_ZN7S9453C22v6Ev");}
S9453C2 ::S9453C2(){ note_ctor("S9453C2", this);} // tgen

static void Test_S9453C2()
{
  extern Class_Descriptor cd_S9453C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9453C2, buf);
    S9453C2 *dp, &lv = *(dp=new (buf) S9453C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9453C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9453C2)");
    check_field_offset(lv, s9453c2f0, ABISELECT(8,4), "S9453C2.s9453c2f0");
    test_class_info(&lv, &cd_S9453C2);
    dp->~S9453C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9453C2(Test_S9453C2, "S9453C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9453C2C1Ev();
extern void _ZN7S9453C2D1Ev();
Name_Map name_map_S9453C2[] = {
  NSPAIR(_ZN7S9453C2C1Ev),
  NSPAIR(_ZN7S9453C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9453C2[];
extern void _ZN7S9453C2D1Ev();
extern void _ZN7S9453C2D0Ev();
extern void _ZN7S9453C22v3Ev();
extern void _ZN7S9453C22v4Ev();
extern void _ZN7S9453C22v5Ev();
extern void _ZN7S9453C22v6Ev();
static  VTBL_ENTRY vtc_S9453C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9453C2[0]),
  (VTBL_ENTRY)&_ZN7S9453C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9453C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9453C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9453C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9453C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9453C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9453C2[];
extern  VTBL_ENTRY _ZTV7S9453C2[];
Class_Descriptor cd_S9453C2 = {  "S9453C2", // class name
  0,0,//no base classes
  &(vtc_S9453C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9453C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9453C2),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  S9453C1  : S9453C2 {
  virtual void  v1(); // _ZN7S9453C12v1Ev
  virtual void  v2(); // _ZN7S9453C12v2Ev
  ~S9453C1(); // tgen
  S9453C1(); // tgen
};
//SIG(1 S9453C1) C1{ BC2{ vd v3 v4 v5 v6 Fp} v1 v2}


void  S9453C1 ::v1(){vfunc_called(this, "_ZN7S9453C12v1Ev");}
void  S9453C1 ::v2(){vfunc_called(this, "_ZN7S9453C12v2Ev");}
S9453C1 ::~S9453C1(){ note_dtor("S9453C1", this);} // tgen
S9453C1 ::S9453C1(){ note_ctor("S9453C1", this);} // tgen

static void Test_S9453C1()
{
  extern Class_Descriptor cd_S9453C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9453C1, buf);
    S9453C1 *dp, &lv = *(dp=new (buf) S9453C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9453C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9453C1)");
    check_base_class_offset(lv, (S9453C2*), 0, "S9453C1");
    test_class_info(&lv, &cd_S9453C1);
    dp->~S9453C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9453C1(Test_S9453C1, "S9453C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9453C1C1Ev();
extern void _ZN7S9453C1D1Ev();
Name_Map name_map_S9453C1[] = {
  NSPAIR(_ZN7S9453C1C1Ev),
  NSPAIR(_ZN7S9453C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9453C2;
extern VTBL_ENTRY _ZTI7S9453C2[];
extern  VTBL_ENTRY _ZTV7S9453C2[];
static Base_Class bases_S9453C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9453C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9453C1[];
extern void _ZN7S9453C1D1Ev();
extern void _ZN7S9453C1D0Ev();
extern void _ZN7S9453C22v3Ev();
extern void _ZN7S9453C22v4Ev();
extern void _ZN7S9453C22v5Ev();
extern void _ZN7S9453C22v6Ev();
extern void _ZN7S9453C12v1Ev();
extern void _ZN7S9453C12v2Ev();
static  VTBL_ENTRY vtc_S9453C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9453C1[0]),
  (VTBL_ENTRY)&_ZN7S9453C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9453C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9453C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9453C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9453C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9453C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9453C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9453C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9453C1[];
extern  VTBL_ENTRY _ZTV7S9453C1[];
Class_Descriptor cd_S9453C1 = {  "S9453C1", // class name
  bases_S9453C1, 1,
  &(vtc_S9453C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9453C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9453C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6414C2  {
  void *s6414c2f0;
  int s6414c2f1;
  virtual  ~S6414C2(); // _ZN7S6414C2D1Ev
  virtual void  v1(); // _ZN7S6414C22v1Ev
  virtual void  v2(); // _ZN7S6414C22v2Ev
  virtual void  v3(); // _ZN7S6414C22v3Ev
  S6414C2(); // tgen
};
//SIG(-1 S6414C2) C1{ vd v1 v2 v3 Fp Fi}


 S6414C2 ::~S6414C2(){ note_dtor("S6414C2", this);}
void  S6414C2 ::v1(){vfunc_called(this, "_ZN7S6414C22v1Ev");}
void  S6414C2 ::v2(){vfunc_called(this, "_ZN7S6414C22v2Ev");}
void  S6414C2 ::v3(){vfunc_called(this, "_ZN7S6414C22v3Ev");}
S6414C2 ::S6414C2(){ note_ctor("S6414C2", this);} // tgen

static void Test_S6414C2()
{
  extern Class_Descriptor cd_S6414C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6414C2, buf);
    S6414C2 *dp, &lv = *(dp=new (buf) S6414C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6414C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6414C2)");
    check_field_offset(lv, s6414c2f0, ABISELECT(8,4), "S6414C2.s6414c2f0");
    check_field_offset(lv, s6414c2f1, ABISELECT(16,8), "S6414C2.s6414c2f1");
    test_class_info(&lv, &cd_S6414C2);
    dp->~S6414C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6414C2(Test_S6414C2, "S6414C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6414C2C1Ev();
extern void _ZN7S6414C2D1Ev();
Name_Map name_map_S6414C2[] = {
  NSPAIR(_ZN7S6414C2C1Ev),
  NSPAIR(_ZN7S6414C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6414C2[];
extern void _ZN7S6414C2D1Ev();
extern void _ZN7S6414C2D0Ev();
extern void _ZN7S6414C22v1Ev();
extern void _ZN7S6414C22v2Ev();
extern void _ZN7S6414C22v3Ev();
static  VTBL_ENTRY vtc_S6414C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6414C2[0]),
  (VTBL_ENTRY)&_ZN7S6414C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6414C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6414C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6414C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6414C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6414C2[];
extern  VTBL_ENTRY _ZTV7S6414C2[];
Class_Descriptor cd_S6414C2 = {  "S6414C2", // class name
  0,0,//no base classes
  &(vtc_S6414C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6414C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6414C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6414C1  : S6414C2 {
  void *s6414c1f0;
  virtual  ~S6414C1(); // _ZN7S6414C1D1Ev
  S6414C1(); // tgen
};
//SIG(1 S6414C1) C1{ BC2{ vd v1 v2 v3 Fp Fi} vd Fp}


 S6414C1 ::~S6414C1(){ note_dtor("S6414C1", this);}
S6414C1 ::S6414C1(){ note_ctor("S6414C1", this);} // tgen

static void Test_S6414C1()
{
  extern Class_Descriptor cd_S6414C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6414C1, buf);
    S6414C1 *dp, &lv = *(dp=new (buf) S6414C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6414C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6414C1)");
    check_base_class_offset(lv, (S6414C2*), 0, "S6414C1");
    check_field_offset(lv, s6414c1f0, ABISELECT(24,12), "S6414C1.s6414c1f0");
    test_class_info(&lv, &cd_S6414C1);
    dp->~S6414C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6414C1(Test_S6414C1, "S6414C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6414C1C1Ev();
extern void _ZN7S6414C1D1Ev();
Name_Map name_map_S6414C1[] = {
  NSPAIR(_ZN7S6414C1C1Ev),
  NSPAIR(_ZN7S6414C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6414C2;
extern VTBL_ENTRY _ZTI7S6414C2[];
extern  VTBL_ENTRY _ZTV7S6414C2[];
static Base_Class bases_S6414C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6414C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6414C1[];
extern void _ZN7S6414C1D1Ev();
extern void _ZN7S6414C1D0Ev();
extern void _ZN7S6414C22v1Ev();
extern void _ZN7S6414C22v2Ev();
extern void _ZN7S6414C22v3Ev();
static  VTBL_ENTRY vtc_S6414C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6414C1[0]),
  (VTBL_ENTRY)&_ZN7S6414C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6414C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6414C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6414C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6414C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6414C1[];
extern  VTBL_ENTRY _ZTV7S6414C1[];
Class_Descriptor cd_S6414C1 = {  "S6414C1", // class name
  bases_S6414C1, 1,
  &(vtc_S6414C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6414C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6414C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8918C2  {
  void *s8918c2f0;
  int s8918c2f1;
  virtual  ~S8918C2(); // _ZN7S8918C2D1Ev
  virtual void  v2(); // _ZN7S8918C22v2Ev
  virtual void  v3(); // _ZN7S8918C22v3Ev
  virtual void  v4(); // _ZN7S8918C22v4Ev
  S8918C2(); // tgen
};
//SIG(-1 S8918C2) C1{ vd v1 v2 v3 Fp Fi}


 S8918C2 ::~S8918C2(){ note_dtor("S8918C2", this);}
void  S8918C2 ::v2(){vfunc_called(this, "_ZN7S8918C22v2Ev");}
void  S8918C2 ::v3(){vfunc_called(this, "_ZN7S8918C22v3Ev");}
void  S8918C2 ::v4(){vfunc_called(this, "_ZN7S8918C22v4Ev");}
S8918C2 ::S8918C2(){ note_ctor("S8918C2", this);} // tgen

static void Test_S8918C2()
{
  extern Class_Descriptor cd_S8918C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8918C2, buf);
    S8918C2 *dp, &lv = *(dp=new (buf) S8918C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8918C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8918C2)");
    check_field_offset(lv, s8918c2f0, ABISELECT(8,4), "S8918C2.s8918c2f0");
    check_field_offset(lv, s8918c2f1, ABISELECT(16,8), "S8918C2.s8918c2f1");
    test_class_info(&lv, &cd_S8918C2);
    dp->~S8918C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8918C2(Test_S8918C2, "S8918C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8918C2C1Ev();
extern void _ZN7S8918C2D1Ev();
Name_Map name_map_S8918C2[] = {
  NSPAIR(_ZN7S8918C2C1Ev),
  NSPAIR(_ZN7S8918C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8918C2[];
extern void _ZN7S8918C2D1Ev();
extern void _ZN7S8918C2D0Ev();
extern void _ZN7S8918C22v2Ev();
extern void _ZN7S8918C22v3Ev();
extern void _ZN7S8918C22v4Ev();
static  VTBL_ENTRY vtc_S8918C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8918C2[0]),
  (VTBL_ENTRY)&_ZN7S8918C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8918C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8918C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8918C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8918C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S8918C2[];
extern  VTBL_ENTRY _ZTV7S8918C2[];
Class_Descriptor cd_S8918C2 = {  "S8918C2", // class name
  0,0,//no base classes
  &(vtc_S8918C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8918C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8918C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8918C1  : S8918C2 {
  virtual  ~S8918C1(); // _ZN7S8918C1D1Ev
  virtual void  v1(); // _ZN7S8918C12v1Ev
  S8918C1(); // tgen
};
//SIG(1 S8918C1) C1{ BC2{ vd v2 v3 v4 Fp Fi} vd v1}


 S8918C1 ::~S8918C1(){ note_dtor("S8918C1", this);}
void  S8918C1 ::v1(){vfunc_called(this, "_ZN7S8918C12v1Ev");}
S8918C1 ::S8918C1(){ note_ctor("S8918C1", this);} // tgen

static void Test_S8918C1()
{
  extern Class_Descriptor cd_S8918C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8918C1, buf);
    S8918C1 *dp, &lv = *(dp=new (buf) S8918C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8918C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8918C1)");
    check_base_class_offset(lv, (S8918C2*), 0, "S8918C1");
    test_class_info(&lv, &cd_S8918C1);
    dp->~S8918C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8918C1(Test_S8918C1, "S8918C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8918C1C1Ev();
extern void _ZN7S8918C1D1Ev();
Name_Map name_map_S8918C1[] = {
  NSPAIR(_ZN7S8918C1C1Ev),
  NSPAIR(_ZN7S8918C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8918C2;
extern VTBL_ENTRY _ZTI7S8918C2[];
extern  VTBL_ENTRY _ZTV7S8918C2[];
static Base_Class bases_S8918C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8918C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8918C1[];
extern void _ZN7S8918C1D1Ev();
extern void _ZN7S8918C1D0Ev();
extern void _ZN7S8918C22v2Ev();
extern void _ZN7S8918C22v3Ev();
extern void _ZN7S8918C22v4Ev();
extern void _ZN7S8918C12v1Ev();
static  VTBL_ENTRY vtc_S8918C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8918C1[0]),
  (VTBL_ENTRY)&_ZN7S8918C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8918C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8918C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8918C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8918C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8918C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8918C1[];
extern  VTBL_ENTRY _ZTV7S8918C1[];
Class_Descriptor cd_S8918C1 = {  "S8918C1", // class name
  bases_S8918C1, 1,
  &(vtc_S8918C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8918C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8918C1),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  S8916C2  {
  void *s8916c2f0;
  int s8916c2f1;
  virtual  ~S8916C2(); // _ZN7S8916C2D1Ev
  virtual void  v2(); // _ZN7S8916C22v2Ev
  virtual void  v3(); // _ZN7S8916C22v3Ev
  virtual void  v4(); // _ZN7S8916C22v4Ev
  S8916C2(); // tgen
};
//SIG(-1 S8916C2) C1{ vd v1 v2 v3 Fp Fi}


 S8916C2 ::~S8916C2(){ note_dtor("S8916C2", this);}
void  S8916C2 ::v2(){vfunc_called(this, "_ZN7S8916C22v2Ev");}
void  S8916C2 ::v3(){vfunc_called(this, "_ZN7S8916C22v3Ev");}
void  S8916C2 ::v4(){vfunc_called(this, "_ZN7S8916C22v4Ev");}
S8916C2 ::S8916C2(){ note_ctor("S8916C2", this);} // tgen

static void Test_S8916C2()
{
  extern Class_Descriptor cd_S8916C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8916C2, buf);
    S8916C2 *dp, &lv = *(dp=new (buf) S8916C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8916C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8916C2)");
    check_field_offset(lv, s8916c2f0, ABISELECT(8,4), "S8916C2.s8916c2f0");
    check_field_offset(lv, s8916c2f1, ABISELECT(16,8), "S8916C2.s8916c2f1");
    test_class_info(&lv, &cd_S8916C2);
    dp->~S8916C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8916C2(Test_S8916C2, "S8916C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8916C2C1Ev();
extern void _ZN7S8916C2D1Ev();
Name_Map name_map_S8916C2[] = {
  NSPAIR(_ZN7S8916C2C1Ev),
  NSPAIR(_ZN7S8916C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8916C2[];
extern void _ZN7S8916C2D1Ev();
extern void _ZN7S8916C2D0Ev();
extern void _ZN7S8916C22v2Ev();
extern void _ZN7S8916C22v3Ev();
extern void _ZN7S8916C22v4Ev();
static  VTBL_ENTRY vtc_S8916C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8916C2[0]),
  (VTBL_ENTRY)&_ZN7S8916C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8916C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8916C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8916C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8916C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S8916C2[];
extern  VTBL_ENTRY _ZTV7S8916C2[];
Class_Descriptor cd_S8916C2 = {  "S8916C2", // class name
  0,0,//no base classes
  &(vtc_S8916C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8916C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8916C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8916C1  : S8916C2 {
  int s8916c1f0;
  virtual void  v1(); // _ZN7S8916C12v1Ev
  ~S8916C1(); // tgen
  S8916C1(); // tgen
};
//SIG(1 S8916C1) C1{ BC2{ vd v2 v3 v4 Fp Fi} v1 Fi}


void  S8916C1 ::v1(){vfunc_called(this, "_ZN7S8916C12v1Ev");}
S8916C1 ::~S8916C1(){ note_dtor("S8916C1", this);} // tgen
S8916C1 ::S8916C1(){ note_ctor("S8916C1", this);} // tgen

static void Test_S8916C1()
{
  extern Class_Descriptor cd_S8916C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S8916C1, buf);
    S8916C1 *dp, &lv = *(dp=new (buf) S8916C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S8916C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8916C1)");
    check_base_class_offset(lv, (S8916C2*), 0, "S8916C1");
    check_field_offset(lv, s8916c1f0, ABISELECT(20,12), "S8916C1.s8916c1f0");
    test_class_info(&lv, &cd_S8916C1);
    dp->~S8916C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8916C1(Test_S8916C1, "S8916C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S8916C1C1Ev();
extern void _ZN7S8916C1D1Ev();
Name_Map name_map_S8916C1[] = {
  NSPAIR(_ZN7S8916C1C1Ev),
  NSPAIR(_ZN7S8916C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8916C2;
extern VTBL_ENTRY _ZTI7S8916C2[];
extern  VTBL_ENTRY _ZTV7S8916C2[];
static Base_Class bases_S8916C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8916C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8916C1[];
extern void _ZN7S8916C1D1Ev();
extern void _ZN7S8916C1D0Ev();
extern void _ZN7S8916C22v2Ev();
extern void _ZN7S8916C22v3Ev();
extern void _ZN7S8916C22v4Ev();
extern void _ZN7S8916C12v1Ev();
static  VTBL_ENTRY vtc_S8916C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8916C1[0]),
  (VTBL_ENTRY)&_ZN7S8916C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8916C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8916C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8916C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8916C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8916C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8916C1[];
extern  VTBL_ENTRY _ZTV7S8916C1[];
Class_Descriptor cd_S8916C1 = {  "S8916C1", // class name
  bases_S8916C1, 1,
  &(vtc_S8916C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S8916C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8916C1),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  S6574C2  {
  void *s6574c2f0;
  int s6574c2f1;
  virtual  ~S6574C2(); // _ZN7S6574C2D1Ev
  virtual void  v2(); // _ZN7S6574C22v2Ev
  virtual void  v3(); // _ZN7S6574C22v3Ev
  virtual void  v4(); // _ZN7S6574C22v4Ev
  S6574C2(); // tgen
};
//SIG(-1 S6574C2) C1{ vd v1 v2 v3 Fp Fi}


 S6574C2 ::~S6574C2(){ note_dtor("S6574C2", this);}
void  S6574C2 ::v2(){vfunc_called(this, "_ZN7S6574C22v2Ev");}
void  S6574C2 ::v3(){vfunc_called(this, "_ZN7S6574C22v3Ev");}
void  S6574C2 ::v4(){vfunc_called(this, "_ZN7S6574C22v4Ev");}
S6574C2 ::S6574C2(){ note_ctor("S6574C2", this);} // tgen

static void Test_S6574C2()
{
  extern Class_Descriptor cd_S6574C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6574C2, buf);
    S6574C2 *dp, &lv = *(dp=new (buf) S6574C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6574C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6574C2)");
    check_field_offset(lv, s6574c2f0, ABISELECT(8,4), "S6574C2.s6574c2f0");
    check_field_offset(lv, s6574c2f1, ABISELECT(16,8), "S6574C2.s6574c2f1");
    test_class_info(&lv, &cd_S6574C2);
    dp->~S6574C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6574C2(Test_S6574C2, "S6574C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6574C2C1Ev();
extern void _ZN7S6574C2D1Ev();
Name_Map name_map_S6574C2[] = {
  NSPAIR(_ZN7S6574C2C1Ev),
  NSPAIR(_ZN7S6574C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6574C2[];
extern void _ZN7S6574C2D1Ev();
extern void _ZN7S6574C2D0Ev();
extern void _ZN7S6574C22v2Ev();
extern void _ZN7S6574C22v3Ev();
extern void _ZN7S6574C22v4Ev();
static  VTBL_ENTRY vtc_S6574C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6574C2[0]),
  (VTBL_ENTRY)&_ZN7S6574C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6574C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6574C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6574C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6574C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6574C2[];
extern  VTBL_ENTRY _ZTV7S6574C2[];
Class_Descriptor cd_S6574C2 = {  "S6574C2", // class name
  0,0,//no base classes
  &(vtc_S6574C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6574C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6574C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6574C1  : S6574C2 {
  void *s6574c1f0;
  virtual void  v1(); // _ZN7S6574C12v1Ev
  ~S6574C1(); // tgen
  S6574C1(); // tgen
};
//SIG(1 S6574C1) C1{ BC2{ vd v2 v3 v4 Fp Fi} v1 Fp}


void  S6574C1 ::v1(){vfunc_called(this, "_ZN7S6574C12v1Ev");}
S6574C1 ::~S6574C1(){ note_dtor("S6574C1", this);} // tgen
S6574C1 ::S6574C1(){ note_ctor("S6574C1", this);} // tgen

static void Test_S6574C1()
{
  extern Class_Descriptor cd_S6574C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6574C1, buf);
    S6574C1 *dp, &lv = *(dp=new (buf) S6574C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6574C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6574C1)");
    check_base_class_offset(lv, (S6574C2*), 0, "S6574C1");
    check_field_offset(lv, s6574c1f0, ABISELECT(24,12), "S6574C1.s6574c1f0");
    test_class_info(&lv, &cd_S6574C1);
    dp->~S6574C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6574C1(Test_S6574C1, "S6574C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6574C1C1Ev();
extern void _ZN7S6574C1D1Ev();
Name_Map name_map_S6574C1[] = {
  NSPAIR(_ZN7S6574C1C1Ev),
  NSPAIR(_ZN7S6574C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6574C2;
extern VTBL_ENTRY _ZTI7S6574C2[];
extern  VTBL_ENTRY _ZTV7S6574C2[];
static Base_Class bases_S6574C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6574C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6574C1[];
extern void _ZN7S6574C1D1Ev();
extern void _ZN7S6574C1D0Ev();
extern void _ZN7S6574C22v2Ev();
extern void _ZN7S6574C22v3Ev();
extern void _ZN7S6574C22v4Ev();
extern void _ZN7S6574C12v1Ev();
static  VTBL_ENTRY vtc_S6574C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6574C1[0]),
  (VTBL_ENTRY)&_ZN7S6574C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6574C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6574C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6574C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6574C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6574C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6574C1[];
extern  VTBL_ENTRY _ZTV7S6574C1[];
Class_Descriptor cd_S6574C1 = {  "S6574C1", // class name
  bases_S6574C1, 1,
  &(vtc_S6574C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6574C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6574C1),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  S16582C1  {
  int s16582c1f0;
  char s16582c1f1[16];
  int s16582c1f2[2];
  char s16582c1f3[384];
  void  mf16582c1(); // _ZN8S16582C19mf16582c1Ev
};
//SIG(1 S16582C1) C1{ m Fi Fc[16] Fi[2] Fc[384]}


void  S16582C1 ::mf16582c1(){}

static void Test_S16582C1()
{
  {
    init_simple_test("S16582C1");
    S16582C1 lv;
    check2(sizeof(lv), 412, "sizeof(S16582C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16582C1)");
    check_field_offset(lv, s16582c1f0, 0, "S16582C1.s16582c1f0");
    check_field_offset(lv, s16582c1f1, 4, "S16582C1.s16582c1f1");
    check_field_offset(lv, s16582c1f2, 20, "S16582C1.s16582c1f2");
    check_field_offset(lv, s16582c1f3, 28, "S16582C1.s16582c1f3");
  }
}
static Arrange_To_Call_Me vS16582C1(Test_S16582C1, "S16582C1", 412);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6227C1  : S2123C30 {
  void *s6227c1f0;
  int s6227c1f1;
  ::S3681C6_nt s6227c1f2;
};
//SIG(1 S6227C1) C1{ BC2{ m} Fp Fi FC3{ m Fp[2]}}



static void Test_S6227C1()
{
  extern Class_Descriptor cd_S6227C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6227C1, buf);
    S6227C1 &lv = *(new (buf) S6227C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6227C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6227C1)");
    check_base_class_offset(lv, (S2123C30*), 0, "S6227C1");
    check_field_offset(lv, s6227c1f0, 0, "S6227C1.s6227c1f0");
    check_field_offset(lv, s6227c1f1, ABISELECT(8,4), "S6227C1.s6227c1f1");
    check_field_offset(lv, s6227c1f2, ABISELECT(16,8), "S6227C1.s6227c1f2");
    test_class_info(&lv, &cd_S6227C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6227C1(Test_S6227C1, "S6227C1", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S2123C30;
extern VTBL_ENTRY _ZTI8S2123C30[];
static Base_Class bases_S6227C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2123C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6227C1 = {  "S6227C1", // class name
  bases_S6227C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,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  S6415C2  {
  void *s6415c2f0;
  int s6415c2f1;
  virtual  ~S6415C2(); // _ZN7S6415C2D1Ev
  virtual void  v1(); // _ZN7S6415C22v1Ev
  virtual void  v2(); // _ZN7S6415C22v2Ev
  virtual void  v3(); // _ZN7S6415C22v3Ev
  S6415C2(); // tgen
};
//SIG(-1 S6415C2) C1{ vd v1 v2 v3 Fp Fi}


 S6415C2 ::~S6415C2(){ note_dtor("S6415C2", this);}
void  S6415C2 ::v1(){vfunc_called(this, "_ZN7S6415C22v1Ev");}
void  S6415C2 ::v2(){vfunc_called(this, "_ZN7S6415C22v2Ev");}
void  S6415C2 ::v3(){vfunc_called(this, "_ZN7S6415C22v3Ev");}
S6415C2 ::S6415C2(){ note_ctor("S6415C2", this);} // tgen

static void Test_S6415C2()
{
  extern Class_Descriptor cd_S6415C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6415C2, buf);
    S6415C2 *dp, &lv = *(dp=new (buf) S6415C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6415C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6415C2)");
    check_field_offset(lv, s6415c2f0, ABISELECT(8,4), "S6415C2.s6415c2f0");
    check_field_offset(lv, s6415c2f1, ABISELECT(16,8), "S6415C2.s6415c2f1");
    test_class_info(&lv, &cd_S6415C2);
    dp->~S6415C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6415C2(Test_S6415C2, "S6415C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6415C2C1Ev();
extern void _ZN7S6415C2D1Ev();
Name_Map name_map_S6415C2[] = {
  NSPAIR(_ZN7S6415C2C1Ev),
  NSPAIR(_ZN7S6415C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6415C2[];
extern void _ZN7S6415C2D1Ev();
extern void _ZN7S6415C2D0Ev();
extern void _ZN7S6415C22v1Ev();
extern void _ZN7S6415C22v2Ev();
extern void _ZN7S6415C22v3Ev();
static  VTBL_ENTRY vtc_S6415C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6415C2[0]),
  (VTBL_ENTRY)&_ZN7S6415C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6415C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6415C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6415C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6415C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6415C2[];
extern  VTBL_ENTRY _ZTV7S6415C2[];
Class_Descriptor cd_S6415C2 = {  "S6415C2", // class name
  0,0,//no base classes
  &(vtc_S6415C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6415C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6415C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6415C1  : S6415C2 {
  virtual  ~S6415C1(); // _ZN7S6415C1D1Ev
  S6415C1(); // tgen
};
//SIG(1 S6415C1) C1{ BC2{ vd v1 v2 v3 Fp Fi} vd}


 S6415C1 ::~S6415C1(){ note_dtor("S6415C1", this);}
S6415C1 ::S6415C1(){ note_ctor("S6415C1", this);} // tgen

static void Test_S6415C1()
{
  extern Class_Descriptor cd_S6415C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6415C1, buf);
    S6415C1 *dp, &lv = *(dp=new (buf) S6415C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6415C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6415C1)");
    check_base_class_offset(lv, (S6415C2*), 0, "S6415C1");
    test_class_info(&lv, &cd_S6415C1);
    dp->~S6415C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6415C1(Test_S6415C1, "S6415C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6415C1C1Ev();
extern void _ZN7S6415C1D1Ev();
Name_Map name_map_S6415C1[] = {
  NSPAIR(_ZN7S6415C1C1Ev),
  NSPAIR(_ZN7S6415C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6415C2;
extern VTBL_ENTRY _ZTI7S6415C2[];
extern  VTBL_ENTRY _ZTV7S6415C2[];
static Base_Class bases_S6415C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6415C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6415C1[];
extern void _ZN7S6415C1D1Ev();
extern void _ZN7S6415C1D0Ev();
extern void _ZN7S6415C22v1Ev();
extern void _ZN7S6415C22v2Ev();
extern void _ZN7S6415C22v3Ev();
static  VTBL_ENTRY vtc_S6415C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6415C1[0]),
  (VTBL_ENTRY)&_ZN7S6415C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6415C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6415C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6415C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6415C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6415C1[];
extern  VTBL_ENTRY _ZTV7S6415C1[];
Class_Descriptor cd_S6415C1 = {  "S6415C1", // class name
  bases_S6415C1, 1,
  &(vtc_S6415C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6415C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6415C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12657C1  {
  int s12657c1f0;
  void *s12657c1f1;
  char s12657c1f2[4];
  int s12657c1f3;
  void *s12657c1f4;
  int s12657c1f5;
  void *s12657c1f6;
};
//SIG(1 S12657C1) C1{ Fi Fp Fc[4] Fi Fp Fi Fp}



static void Test_S12657C1()
{
  {
    init_simple_test("S12657C1");
    S12657C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S12657C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12657C1)");
    check_field_offset(lv, s12657c1f0, 0, "S12657C1.s12657c1f0");
    check_field_offset(lv, s12657c1f1, ABISELECT(8,4), "S12657C1.s12657c1f1");
    check_field_offset(lv, s12657c1f2, ABISELECT(16,8), "S12657C1.s12657c1f2");
    check_field_offset(lv, s12657c1f3, ABISELECT(20,12), "S12657C1.s12657c1f3");
    check_field_offset(lv, s12657c1f4, ABISELECT(24,16), "S12657C1.s12657c1f4");
    check_field_offset(lv, s12657c1f5, ABISELECT(32,20), "S12657C1.s12657c1f5");
    check_field_offset(lv, s12657c1f6, ABISELECT(40,24), "S12657C1.s12657c1f6");
  }
}
static Arrange_To_Call_Me vS12657C1(Test_S12657C1, "S12657C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18745C1  {
  short s18745c1f0[9];
  int s18745c1f1;
  virtual void  v1(); // _ZN8S18745C12v1Ev
  virtual void  v2(); // _ZN8S18745C12v2Ev
  virtual void  v3(); // _ZN8S18745C12v3Ev
  virtual void  v4(); // _ZN8S18745C12v4Ev
  virtual void  v5(); // _ZN8S18745C12v5Ev
  ~S18745C1(); // tgen
  S18745C1(); // tgen
};
//SIG(1 S18745C1) C1{ v1 v2 v3 v4 v5 Fs[9] Fi}


void  S18745C1 ::v1(){vfunc_called(this, "_ZN8S18745C12v1Ev");}
void  S18745C1 ::v2(){vfunc_called(this, "_ZN8S18745C12v2Ev");}
void  S18745C1 ::v3(){vfunc_called(this, "_ZN8S18745C12v3Ev");}
void  S18745C1 ::v4(){vfunc_called(this, "_ZN8S18745C12v4Ev");}
void  S18745C1 ::v5(){vfunc_called(this, "_ZN8S18745C12v5Ev");}
S18745C1 ::~S18745C1(){ note_dtor("S18745C1", this);} // tgen
S18745C1 ::S18745C1(){ note_ctor("S18745C1", this);} // tgen

static void Test_S18745C1()
{
  extern Class_Descriptor cd_S18745C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S18745C1, buf);
    S18745C1 *dp, &lv = *(dp=new (buf) S18745C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S18745C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18745C1)");
    check_field_offset(lv, s18745c1f0, ABISELECT(8,4), "S18745C1.s18745c1f0");
    check_field_offset(lv, s18745c1f1, ABISELECT(28,24), "S18745C1.s18745c1f1");
    test_class_info(&lv, &cd_S18745C1);
    dp->~S18745C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18745C1(Test_S18745C1, "S18745C1", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN8S18745C1C1Ev();
extern void _ZN8S18745C1D1Ev();
Name_Map name_map_S18745C1[] = {
  NSPAIR(_ZN8S18745C1C1Ev),
  NSPAIR(_ZN8S18745C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18745C1[];
extern void _ZN8S18745C12v1Ev();
extern void _ZN8S18745C12v2Ev();
extern void _ZN8S18745C12v3Ev();
extern void _ZN8S18745C12v4Ev();
extern void _ZN8S18745C12v5Ev();
static  VTBL_ENTRY vtc_S18745C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18745C1[0]),
  (VTBL_ENTRY)&_ZN8S18745C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18745C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18745C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18745C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18745C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18745C1[];
extern  VTBL_ENTRY _ZTV8S18745C1[];
Class_Descriptor cd_S18745C1 = {  "S18745C1", // class name
  0,0,//no base classes
  &(vtc_S18745C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI8S18745C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18745C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16391C1  {
  ::S3681C6_nt s16391c1f0;
  __tsi64 s16391c1f1[2];
  char s16391c1f2;
  void  mf16391c1(); // _ZN8S16391C19mf16391c1Ev
};
//SIG(1 S16391C1) C1{ m FC2{ m Fp[2]} FL[2] Fc}


void  S16391C1 ::mf16391c1(){}

static void Test_S16391C1()
{
  {
    init_simple_test("S16391C1");
    S16391C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S16391C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16391C1)");
    check_field_offset(lv, s16391c1f0, 0, "S16391C1.s16391c1f0");
    check_field_offset(lv, s16391c1f1, ABISELECT(16,8), "S16391C1.s16391c1f1");
    check_field_offset(lv, s16391c1f2, ABISELECT(32,24), "S16391C1.s16391c1f2");
  }
}
static Arrange_To_Call_Me vS16391C1(Test_S16391C1, "S16391C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6416C2  {
  void *s6416c2f0;
  int s6416c2f1;
  virtual  ~S6416C2(); // _ZN7S6416C2D1Ev
  virtual void  v1(); // _ZN7S6416C22v1Ev
  virtual void  v2(); // _ZN7S6416C22v2Ev
  virtual void  v3(); // _ZN7S6416C22v3Ev
  S6416C2(); // tgen
};
//SIG(-1 S6416C2) C1{ vd v1 v2 v3 Fp Fi}


 S6416C2 ::~S6416C2(){ note_dtor("S6416C2", this);}
void  S6416C2 ::v1(){vfunc_called(this, "_ZN7S6416C22v1Ev");}
void  S6416C2 ::v2(){vfunc_called(this, "_ZN7S6416C22v2Ev");}
void  S6416C2 ::v3(){vfunc_called(this, "_ZN7S6416C22v3Ev");}
S6416C2 ::S6416C2(){ note_ctor("S6416C2", this);} // tgen

static void Test_S6416C2()
{
  extern Class_Descriptor cd_S6416C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6416C2, buf);
    S6416C2 *dp, &lv = *(dp=new (buf) S6416C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6416C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6416C2)");
    check_field_offset(lv, s6416c2f0, ABISELECT(8,4), "S6416C2.s6416c2f0");
    check_field_offset(lv, s6416c2f1, ABISELECT(16,8), "S6416C2.s6416c2f1");
    test_class_info(&lv, &cd_S6416C2);
    dp->~S6416C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6416C2(Test_S6416C2, "S6416C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6416C2C1Ev();
extern void _ZN7S6416C2D1Ev();
Name_Map name_map_S6416C2[] = {
  NSPAIR(_ZN7S6416C2C1Ev),
  NSPAIR(_ZN7S6416C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6416C2[];
extern void _ZN7S6416C2D1Ev();
extern void _ZN7S6416C2D0Ev();
extern void _ZN7S6416C22v1Ev();
extern void _ZN7S6416C22v2Ev();
extern void _ZN7S6416C22v3Ev();
static  VTBL_ENTRY vtc_S6416C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6416C2[0]),
  (VTBL_ENTRY)&_ZN7S6416C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6416C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6416C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6416C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6416C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6416C2[];
extern  VTBL_ENTRY _ZTV7S6416C2[];
Class_Descriptor cd_S6416C2 = {  "S6416C2", // class name
  0,0,//no base classes
  &(vtc_S6416C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6416C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6416C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6416C1  : S6416C2 {
  ~S6416C1(); // tgen
  S6416C1(); // tgen
};
//SIG(1 S6416C1) C1{ BC2{ vd v1 v2 v3 Fp Fi}}


S6416C1 ::~S6416C1(){ note_dtor("S6416C1", this);} // tgen
S6416C1 ::S6416C1(){ note_ctor("S6416C1", this);} // tgen

static void Test_S6416C1()
{
  extern Class_Descriptor cd_S6416C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6416C1, buf);
    S6416C1 *dp, &lv = *(dp=new (buf) S6416C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6416C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6416C1)");
    check_base_class_offset(lv, (S6416C2*), 0, "S6416C1");
    test_class_info(&lv, &cd_S6416C1);
    dp->~S6416C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6416C1(Test_S6416C1, "S6416C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6416C1C1Ev();
extern void _ZN7S6416C1D1Ev();
Name_Map name_map_S6416C1[] = {
  NSPAIR(_ZN7S6416C1C1Ev),
  NSPAIR(_ZN7S6416C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6416C2;
extern VTBL_ENTRY _ZTI7S6416C2[];
extern  VTBL_ENTRY _ZTV7S6416C2[];
static Base_Class bases_S6416C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6416C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6416C1[];
extern void _ZN7S6416C1D1Ev();
extern void _ZN7S6416C1D0Ev();
extern void _ZN7S6416C22v1Ev();
extern void _ZN7S6416C22v2Ev();
extern void _ZN7S6416C22v3Ev();
static  VTBL_ENTRY vtc_S6416C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6416C1[0]),
  (VTBL_ENTRY)&_ZN7S6416C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6416C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6416C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6416C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6416C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6416C1[];
extern  VTBL_ENTRY _ZTV7S6416C1[];
Class_Descriptor cd_S6416C1 = {  "S6416C1", // class name
  bases_S6416C1, 1,
  &(vtc_S6416C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6416C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6416C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10910C1  {
  char s10910c1f0[4];
  int s10910c1f1[3];
  __tsi64 s10910c1f2;
  char s10910c1f3[32];
};
//SIG(1 S10910C1) C1{ Fc[4] Fi[3] FL Fc[32]}



static void Test_S10910C1()
{
  {
    init_simple_test("S10910C1");
    S10910C1 lv;
    check2(sizeof(lv), 56, "sizeof(S10910C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10910C1)");
    check_field_offset(lv, s10910c1f0, 0, "S10910C1.s10910c1f0");
    check_field_offset(lv, s10910c1f1, 4, "S10910C1.s10910c1f1");
    check_field_offset(lv, s10910c1f2, 16, "S10910C1.s10910c1f2");
    check_field_offset(lv, s10910c1f3, 24, "S10910C1.s10910c1f3");
  }
}
static Arrange_To_Call_Me vS10910C1(Test_S10910C1, "S10910C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14428C2  {
  void *s14428c2f0;
  long s14428c2f1;
  int s14428c2f2;
};
//SIG(-1 S14428C2) C1{ Fp Fl Fi}



static void Test_S14428C2()
{
  {
    init_simple_test("S14428C2");
    S14428C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14428C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14428C2)");
    check_field_offset(lv, s14428c2f0, 0, "S14428C2.s14428c2f0");
    check_field_offset(lv, s14428c2f1, ABISELECT(8,4), "S14428C2.s14428c2f1");
    check_field_offset(lv, s14428c2f2, ABISELECT(16,8), "S14428C2.s14428c2f2");
  }
}
static Arrange_To_Call_Me vS14428C2(Test_S14428C2, "S14428C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14428C1  {
  void *s14428c1f0[10];
  ::S14428C2 s14428c1f1;
};
//SIG(1 S14428C1) C1{ Fp[10] FC2{ Fp Fl Fi}}



static void Test_S14428C1()
{
  {
    init_simple_test("S14428C1");
    S14428C1 lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S14428C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14428C1)");
    check_field_offset(lv, s14428c1f0, 0, "S14428C1.s14428c1f0");
    check_field_offset(lv, s14428c1f1, ABISELECT(80,40), "S14428C1.s14428c1f1");
  }
}
static Arrange_To_Call_Me vS14428C1(Test_S14428C1, "S14428C1", ABISELECT(104,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11372C2  {
  int s11372c2f0;
  ::S3681C6_nt s11372c2f1;
};
//SIG(-1 S11372C2) C1{ Fi FC2{ m Fp[2]}}



static void Test_S11372C2()
{
  {
    init_simple_test("S11372C2");
    S11372C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11372C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11372C2)");
    check_field_offset(lv, s11372c2f0, 0, "S11372C2.s11372c2f0");
    check_field_offset(lv, s11372c2f1, ABISELECT(8,4), "S11372C2.s11372c2f1");
  }
}
static Arrange_To_Call_Me vS11372C2(Test_S11372C2, "S11372C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11372C1  {
  ::S11372C2 s11372c1f0;
};
//SIG(1 S11372C1) C1{ FC2{ Fi FC3{ m Fp[2]}}}



static void Test_S11372C1()
{
  {
    init_simple_test("S11372C1");
    S11372C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11372C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11372C1)");
    check_field_offset(lv, s11372c1f0, 0, "S11372C1.s11372c1f0");
  }
}
static Arrange_To_Call_Me vS11372C1(Test_S11372C1, "S11372C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6034C1  : S3681C6_nt {
  int s6034c1f0;
  void *s6034c1f1;
  int s6034c1f2;
};
//SIG(1 S6034C1) C1{ BC2{ m Fp[2]} Fi Fp Fi}



static void Test_S6034C1()
{
  extern Class_Descriptor cd_S6034C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6034C1, buf);
    S6034C1 &lv = *(new (buf) S6034C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6034C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6034C1)");
    check_base_class_offset(lv, (S3681C6_nt*), 0, "S6034C1");
    check_field_offset(lv, s6034c1f0, ABISELECT(16,8), "S6034C1.s6034c1f0");
    check_field_offset(lv, s6034c1f1, ABISELECT(24,12), "S6034C1.s6034c1f1");
    check_field_offset(lv, s6034c1f2, ABISELECT(32,16), "S6034C1.s6034c1f2");
    test_class_info(&lv, &cd_S6034C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6034C1(Test_S6034C1, "S6034C1", ABISELECT(40,20));

#else // __cplusplus

extern Class_Descriptor cd_S3681C6_nt;
static Base_Class bases_S6034C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3681C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6034C1 = {  "S6034C1", // class name
  bases_S6034C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,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  S16357C1  {
  ::S21777C10 s16357c1f0;
  void  mf16357c1(); // _ZN8S16357C19mf16357c1Ev
};
//SIG(1 S16357C1) C1{ m FC2{ m Fp[2] Fi[4]}}


void  S16357C1 ::mf16357c1(){}

static void Test_S16357C1()
{
  {
    init_simple_test("S16357C1");
    S16357C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S16357C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16357C1)");
    check_field_offset(lv, s16357c1f0, 0, "S16357C1.s16357c1f0");
  }
}
static Arrange_To_Call_Me vS16357C1(Test_S16357C1, "S16357C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14728C1  {
  void *s14728c1f0[7];
  ::S14428C2 s14728c1f1;
};
//SIG(1 S14728C1) C1{ Fp[7] FC2{ Fp Fl Fi}}



static void Test_S14728C1()
{
  {
    init_simple_test("S14728C1");
    S14728C1 lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S14728C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14728C1)");
    check_field_offset(lv, s14728c1f0, 0, "S14728C1.s14728c1f0");
    check_field_offset(lv, s14728c1f1, ABISELECT(56,28), "S14728C1.s14728c1f1");
  }
}
static Arrange_To_Call_Me vS14728C1(Test_S14728C1, "S14728C1", ABISELECT(80,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17750C1  {
  void *s17750c1f0;
  int s17750c1f1;
  void *s17750c1f2;
  int s17750c1f3[3];
  char s17750c1f4;
  void  mf17750c1(); // _ZN8S17750C19mf17750c1Ev
};
//SIG(1 S17750C1) C1{ m Fp Fi Fp Fi[3] Fc}


void  S17750C1 ::mf17750c1(){}

static void Test_S17750C1()
{
  {
    init_simple_test("S17750C1");
    S17750C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S17750C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17750C1)");
    check_field_offset(lv, s17750c1f0, 0, "S17750C1.s17750c1f0");
    check_field_offset(lv, s17750c1f1, ABISELECT(8,4), "S17750C1.s17750c1f1");
    check_field_offset(lv, s17750c1f2, ABISELECT(16,8), "S17750C1.s17750c1f2");
    check_field_offset(lv, s17750c1f3, ABISELECT(24,12), "S17750C1.s17750c1f3");
    check_field_offset(lv, s17750c1f4, ABISELECT(36,24), "S17750C1.s17750c1f4");
  }
}
static Arrange_To_Call_Me vS17750C1(Test_S17750C1, "S17750C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11840C1  {
  ::S14428C2 s11840c1f0;
  void *s11840c1f1[4];
};
//SIG(1 S11840C1) C1{ FC2{ Fp Fl Fi} Fp[4]}



static void Test_S11840C1()
{
  {
    init_simple_test("S11840C1");
    S11840C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S11840C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11840C1)");
    check_field_offset(lv, s11840c1f0, 0, "S11840C1.s11840c1f0");
    check_field_offset(lv, s11840c1f1, ABISELECT(24,12), "S11840C1.s11840c1f1");
  }
}
static Arrange_To_Call_Me vS11840C1(Test_S11840C1, "S11840C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18926C1  {
  int s18926c1f0;
  int s18926c1f1:32;
  virtual  ~S18926C1(); // _ZN8S18926C1D1Ev
  virtual void  v1(); // _ZN8S18926C12v1Ev
  virtual void  v2(); // _ZN8S18926C12v2Ev
  S18926C1(); // tgen
};
//SIG(1 S18926C1) C1{ vd v1 v2 Fi Fi:32}


 S18926C1 ::~S18926C1(){ note_dtor("S18926C1", this);}
void  S18926C1 ::v1(){vfunc_called(this, "_ZN8S18926C12v1Ev");}
void  S18926C1 ::v2(){vfunc_called(this, "_ZN8S18926C12v2Ev");}
S18926C1 ::S18926C1(){ note_ctor("S18926C1", this);} // tgen

static void Test_S18926C1()
{
  extern Class_Descriptor cd_S18926C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18926C1, buf);
    S18926C1 *dp, &lv = *(dp=new (buf) S18926C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18926C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18926C1)");
    check_field_offset(lv, s18926c1f0, ABISELECT(8,4), "S18926C1.s18926c1f0");
    set_bf_and_test(lv, s18926c1f1, ABISELECT(12,8), 0, 32, 1, "S18926C1");
    set_bf_and_test(lv, s18926c1f1, ABISELECT(12,8), 0, 32, hide_sll(1LL<<31), "S18926C1");
    test_class_info(&lv, &cd_S18926C1);
    dp->~S18926C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18926C1(Test_S18926C1, "S18926C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18926C1C1Ev();
extern void _ZN8S18926C1D1Ev();
Name_Map name_map_S18926C1[] = {
  NSPAIR(_ZN8S18926C1C1Ev),
  NSPAIR(_ZN8S18926C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18926C1[];
extern void _ZN8S18926C1D1Ev();
extern void _ZN8S18926C1D0Ev();
extern void _ZN8S18926C12v1Ev();
extern void _ZN8S18926C12v2Ev();
static  VTBL_ENTRY vtc_S18926C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18926C1[0]),
  (VTBL_ENTRY)&_ZN8S18926C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18926C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18926C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18926C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18926C1[];
extern  VTBL_ENTRY _ZTV8S18926C1[];
Class_Descriptor cd_S18926C1 = {  "S18926C1", // class name
  0,0,//no base classes
  &(vtc_S18926C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18926C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18926C1),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  S10391C2  {
  char s10391c2f0[4096];
};
//SIG(-1 S10391C2) C1{ Fc[4096]}



static void Test_S10391C2()
{
  {
    init_simple_test("S10391C2");
    S10391C2 lv;
    check2(sizeof(lv), 4096, "sizeof(S10391C2)");
    check2(__alignof__(lv), 1, "__alignof__(S10391C2)");
    check_field_offset(lv, s10391c2f0, 0, "S10391C2.s10391c2f0");
  }
}
static Arrange_To_Call_Me vS10391C2(Test_S10391C2, "S10391C2", 4096);

#else // __cplusplus

Class_Descriptor cd_S10391C2 = {  "S10391C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4096, // 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  S10391C1  : S10391C2 {
};
//SIG(1 S10391C1) C1{ BC2{ Fc[4096]}}



static void Test_S10391C1()
{
  extern Class_Descriptor cd_S10391C1;
  void *lvp;
  {
    char buf[4096];
    init_test(&cd_S10391C1, buf);
    S10391C1 &lv = *(new (buf) S10391C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4096, "sizeof(S10391C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10391C1)");
    check_base_class_offset(lv, (S10391C2*), 0, "S10391C1");
    test_class_info(&lv, &cd_S10391C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10391C1(Test_S10391C1, "S10391C1", 4096);

#else // __cplusplus

extern Class_Descriptor cd_S10391C2;
static Base_Class bases_S10391C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10391C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S10391C1 = {  "S10391C1", // class name
  bases_S10391C1, 1,
  0, // no vftv
  0, //no vtt
  4096, // 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  S13843C1  {
  __tsi64 s13843c1f0;
  void *s13843c1f1[2];
  char s13843c1f2[8];
  int s13843c1f3;
};
//SIG(1 S13843C1) C1{ FL Fp[2] Fc[8] Fi}



static void Test_S13843C1()
{
  {
    init_simple_test("S13843C1");
    S13843C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13843C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13843C1)");
    check_field_offset(lv, s13843c1f0, 0, "S13843C1.s13843c1f0");
    check_field_offset(lv, s13843c1f1, 8, "S13843C1.s13843c1f1");
    check_field_offset(lv, s13843c1f2, ABISELECT(24,16), "S13843C1.s13843c1f2");
    check_field_offset(lv, s13843c1f3, ABISELECT(32,24), "S13843C1.s13843c1f3");
  }
}
static Arrange_To_Call_Me vS13843C1(Test_S13843C1, "S13843C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10582C1  {
  char s10582c1f0[12];
  int s10582c1f1;
  char s10582c1f2[584];
};
//SIG(1 S10582C1) C1{ Fc[12] Fi Fc[584]}



static void Test_S10582C1()
{
  {
    init_simple_test("S10582C1");
    S10582C1 lv;
    check2(sizeof(lv), 600, "sizeof(S10582C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10582C1)");
    check_field_offset(lv, s10582c1f0, 0, "S10582C1.s10582c1f0");
    check_field_offset(lv, s10582c1f1, 12, "S10582C1.s10582c1f1");
    check_field_offset(lv, s10582c1f2, 16, "S10582C1.s10582c1f2");
  }
}
static Arrange_To_Call_Me vS10582C1(Test_S10582C1, "S10582C1", 600);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21841C1  {
  void *s21841c1f0[3];
  int s21841c1f1[2];
  void  mf21841c1(); // _ZN8S21841C19mf21841c1Ev
  virtual  ~S21841C1(); // _ZN8S21841C1D1Ev
  S21841C1(); // tgen
};
//SIG(1 S21841C1) C1{ vd m Fp[3] Fi[2]}


void  S21841C1 ::mf21841c1(){}
 S21841C1 ::~S21841C1(){ note_dtor("S21841C1", this);}
S21841C1 ::S21841C1(){ note_ctor("S21841C1", this);} // tgen

static void Test_S21841C1()
{
  extern Class_Descriptor cd_S21841C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S21841C1, buf);
    S21841C1 *dp, &lv = *(dp=new (buf) S21841C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S21841C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21841C1)");
    check_field_offset(lv, s21841c1f0, ABISELECT(8,4), "S21841C1.s21841c1f0");
    check_field_offset(lv, s21841c1f1, ABISELECT(32,16), "S21841C1.s21841c1f1");
    test_class_info(&lv, &cd_S21841C1);
    dp->~S21841C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21841C1(Test_S21841C1, "S21841C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S21841C1C1Ev();
extern void _ZN8S21841C1D1Ev();
Name_Map name_map_S21841C1[] = {
  NSPAIR(_ZN8S21841C1C1Ev),
  NSPAIR(_ZN8S21841C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21841C1[];
extern void _ZN8S21841C1D1Ev();
extern void _ZN8S21841C1D0Ev();
static  VTBL_ENTRY vtc_S21841C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21841C1[0]),
  (VTBL_ENTRY)&_ZN8S21841C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21841C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21841C1[];
extern  VTBL_ENTRY _ZTV8S21841C1[];
Class_Descriptor cd_S21841C1 = {  "S21841C1", // class name
  0,0,//no base classes
  &(vtc_S21841C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S21841C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21841C1),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  S17759C1  {
  void *s17759c1f0;
  int s17759c1f1;
  void *s17759c1f2[3];
  int s17759c1f3;
  void  mf17759c1(); // _ZN8S17759C19mf17759c1Ev
};
//SIG(1 S17759C1) C1{ m Fp Fi Fp[3] Fi}


void  S17759C1 ::mf17759c1(){}

static void Test_S17759C1()
{
  {
    init_simple_test("S17759C1");
    S17759C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S17759C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17759C1)");
    check_field_offset(lv, s17759c1f0, 0, "S17759C1.s17759c1f0");
    check_field_offset(lv, s17759c1f1, ABISELECT(8,4), "S17759C1.s17759c1f1");
    check_field_offset(lv, s17759c1f2, ABISELECT(16,8), "S17759C1.s17759c1f2");
    check_field_offset(lv, s17759c1f3, ABISELECT(40,20), "S17759C1.s17759c1f3");
  }
}
static Arrange_To_Call_Me vS17759C1(Test_S17759C1, "S17759C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17929C2_nt  {
  int s17929c2f0;
};
//SIG(-1 S17929C2_nt) C1{ Fi}



//skip512 S17929C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17929C1  {
  void *s17929c1f0[2];
  ::S17929C2_nt s17929c1f1;
  void  mf17929c1(); // _ZN8S17929C19mf17929c1Ev
};
//SIG(1 S17929C1) C1{ m Fp[2] FC2{ Fi}}


void  S17929C1 ::mf17929c1(){}

static void Test_S17929C1()
{
  {
    init_simple_test("S17929C1");
    S17929C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S17929C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17929C1)");
    check_field_offset(lv, s17929c1f0, 0, "S17929C1.s17929c1f0");
    check_field_offset(lv, s17929c1f1, ABISELECT(16,8), "S17929C1.s17929c1f1");
  }
}
static Arrange_To_Call_Me vS17929C1(Test_S17929C1, "S17929C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10857C1  {
  char s10857c1f0[38];
  int s10857c1f1;
  short s10857c1f2[2];
};
//SIG(1 S10857C1) C1{ Fc[38] Fi Fs[2]}



static void Test_S10857C1()
{
  {
    init_simple_test("S10857C1");
    S10857C1 lv;
    check2(sizeof(lv), 48, "sizeof(S10857C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10857C1)");
    check_field_offset(lv, s10857c1f0, 0, "S10857C1.s10857c1f0");
    check_field_offset(lv, s10857c1f1, 40, "S10857C1.s10857c1f1");
    check_field_offset(lv, s10857c1f2, 44, "S10857C1.s10857c1f2");
  }
}
static Arrange_To_Call_Me vS10857C1(Test_S10857C1, "S10857C1", 48);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12690C1  {
  int s12690c1f0;
  void *s12690c1f1;
  int s12690c1f2;
  void *s12690c1f3[3];
};
//SIG(1 S12690C1) C1{ Fi Fp Fi Fp[3]}



static void Test_S12690C1()
{
  {
    init_simple_test("S12690C1");
    S12690C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S12690C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12690C1)");
    check_field_offset(lv, s12690c1f0, 0, "S12690C1.s12690c1f0");
    check_field_offset(lv, s12690c1f1, ABISELECT(8,4), "S12690C1.s12690c1f1");
    check_field_offset(lv, s12690c1f2, ABISELECT(16,8), "S12690C1.s12690c1f2");
    check_field_offset(lv, s12690c1f3, ABISELECT(24,12), "S12690C1.s12690c1f3");
  }
}
static Arrange_To_Call_Me vS12690C1(Test_S12690C1, "S12690C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12296C1  {
  int s12296c1f0;
  char s12296c1f1[4];
  int s12296c1f2[8];
};
//SIG(1 S12296C1) C1{ Fi Fc[4] Fi[8]}



static void Test_S12296C1()
{
  {
    init_simple_test("S12296C1");
    S12296C1 lv;
    check2(sizeof(lv), 40, "sizeof(S12296C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12296C1)");
    check_field_offset(lv, s12296c1f0, 0, "S12296C1.s12296c1f0");
    check_field_offset(lv, s12296c1f1, 4, "S12296C1.s12296c1f1");
    check_field_offset(lv, s12296c1f2, 8, "S12296C1.s12296c1f2");
  }
}
static Arrange_To_Call_Me vS12296C1(Test_S12296C1, "S12296C1", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15560C1  {
  ::S15179C4_nt s15560c1f0;
  int s15560c1f1;
  void  mf15560c1(); // _ZN8S15560C19mf15560c1Ev
};
//SIG(1 S15560C1) C1{ m FC2{ Fi[2]} Fi}


void  S15560C1 ::mf15560c1(){}

static void Test_S15560C1()
{
  {
    init_simple_test("S15560C1");
    S15560C1 lv;
    check2(sizeof(lv), 12, "sizeof(S15560C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15560C1)");
    check_field_offset(lv, s15560c1f0, 0, "S15560C1.s15560c1f0");
    check_field_offset(lv, s15560c1f1, 8, "S15560C1.s15560c1f1");
  }
}
static Arrange_To_Call_Me vS15560C1(Test_S15560C1, "S15560C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18397C1  {
  void *s18397c1f0[7];
  int s18397c1f1[8];
  void  mf18397c1(); // _ZN8S18397C19mf18397c1Ev
};
//SIG(1 S18397C1) C1{ m Fp[7] Fi[8]}


void  S18397C1 ::mf18397c1(){}

static void Test_S18397C1()
{
  {
    init_simple_test("S18397C1");
    S18397C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S18397C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18397C1)");
    check_field_offset(lv, s18397c1f0, 0, "S18397C1.s18397c1f0");
    check_field_offset(lv, s18397c1f1, ABISELECT(56,28), "S18397C1.s18397c1f1");
  }
}
static Arrange_To_Call_Me vS18397C1(Test_S18397C1, "S18397C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18083C1  {
  void *s18083c1f0[2];
  int s18083c1f1;
  void *s18083c1f2;
  void  mf18083c1(); // _ZN8S18083C19mf18083c1Ev
};
//SIG(1 S18083C1) C1{ m Fp[2] Fi Fp}


void  S18083C1 ::mf18083c1(){}

static void Test_S18083C1()
{
  {
    init_simple_test("S18083C1");
    S18083C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18083C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18083C1)");
    check_field_offset(lv, s18083c1f0, 0, "S18083C1.s18083c1f0");
    check_field_offset(lv, s18083c1f1, ABISELECT(16,8), "S18083C1.s18083c1f1");
    check_field_offset(lv, s18083c1f2, ABISELECT(24,12), "S18083C1.s18083c1f2");
  }
}
static Arrange_To_Call_Me vS18083C1(Test_S18083C1, "S18083C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11939C2_nt  {
  short s11939c2f0;
};
//SIG(-1 S11939C2_nt) C1{ Fs}



//skip512 S11939C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11939C1  {
  ::S11939C2_nt s11939c1f0;
  void *s11939c1f1[2];
};
//SIG(1 S11939C1) C1{ FC2{ Fs} Fp[2]}



static void Test_S11939C1()
{
  {
    init_simple_test("S11939C1");
    S11939C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11939C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11939C1)");
    check_field_offset(lv, s11939c1f0, 0, "S11939C1.s11939c1f0");
    check_field_offset(lv, s11939c1f1, ABISELECT(8,4), "S11939C1.s11939c1f1");
  }
}
static Arrange_To_Call_Me vS11939C1(Test_S11939C1, "S11939C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17005C1  {
  unsigned int s17005c1f0:1;
  int s17005c1f1:31;
  void  mf17005c1(); // _ZN8S17005C19mf17005c1Ev
};
//SIG(1 S17005C1) C1{ m Fi:1 Fi:31}


void  S17005C1 ::mf17005c1(){}

static void Test_S17005C1()
{
  {
    init_simple_test("S17005C1");
    static S17005C1 lv;
    check2(sizeof(lv), 4, "sizeof(S17005C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17005C1)");
    set_bf_and_test(lv, s17005c1f0, 0, 0, 1, 1, "S17005C1");
    set_bf_and_test(lv, s17005c1f1, 0, 1, 31, 1, "S17005C1");
    set_bf_and_test(lv, s17005c1f1, 0, 1, 31, hide_sll(1LL<<30), "S17005C1");
  }
}
static Arrange_To_Call_Me vS17005C1(Test_S17005C1, "S17005C1", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14048C1  {
  void *s14048c1f0;
  char s14048c1f1;
  int s14048c1f2;
  char s14048c1f3;
};
//SIG(1 S14048C1) C1{ Fp Fc Fi Fc}



static void Test_S14048C1()
{
  {
    init_simple_test("S14048C1");
    S14048C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S14048C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14048C1)");
    check_field_offset(lv, s14048c1f0, 0, "S14048C1.s14048c1f0");
    check_field_offset(lv, s14048c1f1, ABISELECT(8,4), "S14048C1.s14048c1f1");
    check_field_offset(lv, s14048c1f2, ABISELECT(12,8), "S14048C1.s14048c1f2");
    check_field_offset(lv, s14048c1f3, ABISELECT(16,12), "S14048C1.s14048c1f3");
  }
}
static Arrange_To_Call_Me vS14048C1(Test_S14048C1, "S14048C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14720C1  {
  void *s14720c1f0[6];
  int s14720c1f1[2];
};
//SIG(1 S14720C1) C1{ Fp[6] Fi[2]}



static void Test_S14720C1()
{
  {
    init_simple_test("S14720C1");
    S14720C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S14720C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14720C1)");
    check_field_offset(lv, s14720c1f0, 0, "S14720C1.s14720c1f0");
    check_field_offset(lv, s14720c1f1, ABISELECT(48,24), "S14720C1.s14720c1f1");
  }
}
static Arrange_To_Call_Me vS14720C1(Test_S14720C1, "S14720C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13870C1  {
  long s13870c1f0;
  short s13870c1f1;
  void *s13870c1f2[2];
};
//SIG(1 S13870C1) C1{ Fl Fs Fp[2]}



static void Test_S13870C1()
{
  {
    init_simple_test("S13870C1");
    S13870C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S13870C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13870C1)");
    check_field_offset(lv, s13870c1f0, 0, "S13870C1.s13870c1f0");
    check_field_offset(lv, s13870c1f1, ABISELECT(8,4), "S13870C1.s13870c1f1");
    check_field_offset(lv, s13870c1f2, ABISELECT(16,8), "S13870C1.s13870c1f2");
  }
}
static Arrange_To_Call_Me vS13870C1(Test_S13870C1, "S13870C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13671C1  {
  long s13671c1f0;
  char s13671c1f1[512];
};
//SIG(1 S13671C1) C1{ Fl Fc[512]}



static void Test_S13671C1()
{
  {
    init_simple_test("S13671C1");
    S13671C1 lv;
    check2(sizeof(lv), ABISELECT(520,516), "sizeof(S13671C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13671C1)");
    check_field_offset(lv, s13671c1f0, 0, "S13671C1.s13671c1f0");
    check_field_offset(lv, s13671c1f1, ABISELECT(8,4), "S13671C1.s13671c1f1");
  }
}
static Arrange_To_Call_Me vS13671C1(Test_S13671C1, "S13671C1", ABISELECT(520,516));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10651C1  {
  char s10651c1f0[18];
  int s10651c1f1;
};
//SIG(1 S10651C1) C1{ Fc[18] Fi}



static void Test_S10651C1()
{
  {
    init_simple_test("S10651C1");
    S10651C1 lv;
    check2(sizeof(lv), 24, "sizeof(S10651C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10651C1)");
    check_field_offset(lv, s10651c1f0, 0, "S10651C1.s10651c1f0");
    check_field_offset(lv, s10651c1f1, 20, "S10651C1.s10651c1f1");
  }
}
static Arrange_To_Call_Me vS10651C1(Test_S10651C1, "S10651C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13680C1  {
  __tsi64 s13680c1f0;
  char s13680c1f1[8];
};
//SIG(1 S13680C1) C1{ FL Fc[8]}



static void Test_S13680C1()
{
  {
    init_simple_test("S13680C1");
    S13680C1 lv;
    check2(sizeof(lv), 16, "sizeof(S13680C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13680C1)");
    check_field_offset(lv, s13680c1f0, 0, "S13680C1.s13680c1f0");
    check_field_offset(lv, s13680c1f1, 8, "S13680C1.s13680c1f1");
  }
}
static Arrange_To_Call_Me vS13680C1(Test_S13680C1, "S13680C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17430C1  {
  __tsi64 s17430c1f0[7];
  void  mf17430c1(); // _ZN8S17430C19mf17430c1Ev
};
//SIG(1 S17430C1) C1{ m FL[7]}


void  S17430C1 ::mf17430c1(){}

static void Test_S17430C1()
{
  {
    init_simple_test("S17430C1");
    S17430C1 lv;
    check2(sizeof(lv), 56, "sizeof(S17430C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17430C1)");
    check_field_offset(lv, s17430c1f0, 0, "S17430C1.s17430c1f0");
  }
}
static Arrange_To_Call_Me vS17430C1(Test_S17430C1, "S17430C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13278C1  {
  int s13278c1f0[23];
};
//SIG(1 S13278C1) C1{ Fi[23]}



static void Test_S13278C1()
{
  {
    init_simple_test("S13278C1");
    S13278C1 lv;
    check2(sizeof(lv), 92, "sizeof(S13278C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13278C1)");
    check_field_offset(lv, s13278c1f0, 0, "S13278C1.s13278c1f0");
  }
}
static Arrange_To_Call_Me vS13278C1(Test_S13278C1, "S13278C1", 92);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

